Docker for MacにKubernetesが同梱されるようになったことはなんとなく知っていたが、どのように使うのかは分かっていなかったので試してみた。
現時点でのDocker for MacのバージョンはVersion 18.06.0-ce-mac70 (26399)
。
Preferenceをみると、Kubernetesというタブができているので、それを開いてEnable Kubernetesにチェックを入れる。
Defaultのオーケストレーションツールを選択する。SwarmはつかったことないのでKubernetesにする(デフォルトはSwarmになっていた)。
画面に沿ってインストールする。インストールは数分かかった。
インストールが終わると、docker for desktopというコンテキストが用意されていて、ターミナル上もそれに切り替わっている。
ᐅ kubectl config current-context docker-for-desktop
defaultのネームスペースにはpodがないが、他のネームスペースにはpodがいくつか起動済みになっている。
~ ᐅ kubectl get pods No resources found. ~ ᐅ kubectl get namespace NAME STATUS AGE default Active 3m docker Active 3m kube-public Active 3m kube-system Active 3m ~ ᐅ kubectl get pods --namespace docker NAME READY STATUS RESTARTS AGE compose-7447646cf5-bk579 1/1 Running 0 3m compose-api-6fbc44c575-jg2dp 1/1 Running 0 3m ~ ᐅ kubectl get pods --namespace kube-public No resources found. ~ ᐅ kubectl get pods --namespace kube-system NAME READY STATUS RESTARTS AGE etcd-docker-for-desktop 1/1 Running 0 2m kube-apiserver-docker-for-desktop 1/1 Running 0 3m kube-controller-manager-docker-for-desktop 1/1 Running 0 2m kube-dns-86f4d74b45-kddhh 3/3 Running 0 3m kube-proxy-nnsx8 1/1 Running 0 3m kube-scheduler-docker-for-desktop 1/1 Running 0 2m
nodeが1つなのは当然として、kubernetesというserviceがすでに存在している。このへんはkubernetesのデフォのものなのか、docker for macならではの設定なのかは調べてない。
~ ᐅ kubectl get nodes NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 16m v1.10.3 ~ ᐅ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16m ~ ᐅ kubectl describe service kubernetes Name: kubernetes Namespace: default Labels: component=apiserver provider=kubernetes Annotations: <none> Selector: <none> Type: ClusterIP IP: 10.96.0.1 Port: https 443/TCP TargetPort: 6443/TCP Endpoints: 192.168.65.3:6443 Session Affinity: ClientIP Events: <none>
というか、get all --all-namespaces
という便利なコマンドがあった。
~ ᐅ kubectl get all --all-namespaces NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-system ds/kube-proxy 1 1 1 1 1 <none> 4m NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE docker deploy/compose 1 1 1 1 4m docker deploy/compose-api 1 1 1 1 4m kube-system deploy/kube-dns 1 1 1 1 4m NAMESPACE NAME DESIRED CURRENT READY AGE docker rs/compose-7447646cf5 1 1 1 4m docker rs/compose-api-6fbc44c575 1 1 1 4m kube-system rs/kube-dns-86f4d74b45 1 1 1 4m NAMESPACE NAME READY STATUS RESTARTS AGE docker po/compose-7447646cf5-fn2ft 1/1 Running 0 4m docker po/compose-api-6fbc44c575-bcg82 1/1 Running 0 4m kube-system po/etcd-docker-for-desktop 1/1 Running 0 3m kube-system po/kube-apiserver-docker-for-desktop 1/1 Running 0 3m kube-system po/kube-controller-manager-docker-for-desktop 1/1 Running 0 3m kube-system po/kube-dns-86f4d74b45-ggqq4 3/3 Running 0 4m kube-system po/kube-proxy-z9886 1/1 Running 0 4m kube-system po/kube-scheduler-docker-for-desktop 1/1 Running 0 3m NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default svc/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4m docker svc/compose-api ClusterIP 10.102.8.163 <none> 443/TCP 4m kube-system svc/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 4m
このdocker for desktopをリセットしたいとき
docker for macのPreferenceにResetという項目があり、そこでKubernetesのリセットもできるようになっている。
docker composeの設定ファイルを使う
docker stackコマンドでdocker-compose.ymlもKubernetesへデプロイできると書いてあって試してみたが、docker composeのversion1や2には対応していない。version 3のサンプルを使ったら動作した。
ᐅ docker stack deploy --compose-file docker-compose.yml words unsupported Compose file version: 1.0
参考
[和訳] デスクトップ向けDockerでのDocker ComposeとKubernetes #docker #kubernetes #k8s - クリエーションライン株式会社