Docker for Macに同梱のKubernetesを使う(minikubeの代替?)

Docker for MacKubernetesが同梱されるようになったことはなんとなく知っていたが、どのように使うのかは分かっていなかったので試してみた。

現時点でのDocker for MacのバージョンはVersion 18.06.0-ce-mac70 (26399)

f:id:road288:20180810161026p:plain

Preferenceをみると、Kubernetesというタブができているので、それを開いてEnable Kubernetesにチェックを入れる。

f:id:road288:20180810161116p:plain

Defaultのオーケストレーションツールを選択する。SwarmはつかったことないのでKubernetesにする(デフォルトはSwarmになっていた)。

f:id:road288:20180810161212p:plain

画面に沿ってインストールする。インストールは数分かかった。 f:id:road288:20180810161220p:plain

インストールが終わると、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 - クリエーションライン株式会社

Compose file version 3 reference | Docker Documentation