環境
- OS: Mac OS 10.14(Mojave)
- Docker for Mac: stable版(18.06.1-ce-mac73 (26764))
TL;DR
- Docker for Mac(stable版)でKubernetesインストールしてみた
- docker-comose.ymlでもKubernetesにデプロイできる
- 余談(kube-composeについて)
今年の初めにDocker for macのedge版でKubernetensの統合されていたようですが、試しそびれていました。現在では自分の端末に入っているstable版にもKubernetes機能入っていたので試してみました。
Kubernetesのインストール
はい、これだけです。
- 「Preference」で設定開いて「Kubernetes」メニュー選ぶ
- 「Enable Kubernetes」チェック入れて「Kubernetes」を選択して「Apply」をクリック(swarmの選択肢は残されている)
Kubernetesのインストールが正常に終わると「Kubernetes is running」の表示が出ます。あっさり。
Contextの切り替え
kubectlで管理する向き先(Kubernetesの環境)を「docker-for-desktop」にしておきます。自分の場合は昔作ったminikube環境もあったのでそちらから変更。
インストールの確認
dockerコンテナ
Kubernetesの各コンポーネントがdockerコンテナ化されて立ち上がっています。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14f9376a591d k8s.gcr.io/pause-amd64:3.1 "/pause" 4 days ago Up 4 days k8s_POD_kubernetes-dashboard-7d5dcdb6d9-v2htg_kube-system_a65ca6bd-c45a-11e8-b684-025000000001_0
f5e9689be63e k8s.gcr.io/k8s-dns-sidecar-amd64 "/sidecar --v=2 --lo…" 5 days ago Up 5 days k8s_sidecar_kube-dns-86f4d74b45-dhqsw_kube-system_6f9e4239-c398-11e8-b684-025000000001_0
5703f9d2d7a0 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64 "/dnsmasq-nanny -v=2…" 5 days ago Up 5 days k8s_dnsmasq_kube-dns-86f4d74b45-dhqsw_kube-system_6f9e4239-c398-11e8-b684-025000000001_0
91571f8472c2 docker/kube-compose-api-server "/api-server --kubec…" 5 days ago Up 5 days k8s_compose_compose-api-6fbc44c575-8cbcj_docker_6f9cbdbc-c398-11e8-b684-025000000001_0
1a7e00f186af k8s.gcr.io/kube-proxy-amd64 "/usr/local/bin/kube…" 5 days ago Up 5 days k8s_kube-proxy_kube-proxy-rlnsl_kube-system_6fbbb55e-c398-11e8-b684-025000000001_0
483c8c6b6dbc docker/kube-compose-controller "/compose-controller…" 5 days ago Up 5 days k8s_compose_compose-7447646cf5-mrqpl_docker_6f9de91a-c398-11e8-b684-025000000001_0
746e2792f53a k8s.gcr.io/k8s-dns-kube-dns-amd64 "/kube-dns --domain=…" 5 days ago Up 5 days k8s_kubedns_kube-dns-86f4d74b45-dhqsw_kube-system_6f9e4239-c398-11e8-b684-025000000001_0
bd83b0c4b898 k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_compose-api-6fbc44c575-8cbcj_docker_6f9cbdbc-c398-11e8-b684-025000000001_0
0278b6953eb5 k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_kube-proxy-rlnsl_kube-system_6fbbb55e-c398-11e8-b684-025000000001_0
d8a93dc5826d k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_compose-7447646cf5-mrqpl_docker_6f9de91a-c398-11e8-b684-025000000001_0
5dea4052fa58 k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_kube-dns-86f4d74b45-dhqsw_kube-system_6f9e4239-c398-11e8-b684-025000000001_0
bad5703d1be2 k8s.gcr.io/etcd-amd64 "etcd --data-dir=/va…" 5 days ago Up 5 days k8s_etcd_etcd-docker-for-desktop_kube-system_d76b3556d1f39ec8d0043b915215028f_0
734db670ba24 k8s.gcr.io/kube-apiserver-amd64 "kube-apiserver --ad…" 5 days ago Up 5 days k8s_kube-apiserver_kube-apiserver-docker-for-desktop_kube-system_ca46586ea287e0ae17ccd3dbfa4aa8ee_0
2a1effa9da89 k8s.gcr.io/kube-scheduler-amd64 "kube-scheduler --ad…" 5 days ago Up 5 days k8s_kube-scheduler_kube-scheduler-docker-for-desktop_kube-system_ea66a171667ec4aaf1b274428a42a7cf_0
82f789f4ce8b k8s.gcr.io/kube-controller-manager-amd64 "kube-controller-man…" 5 days ago Up 5 days k8s_kube-controller-manager_kube-controller-manager-docker-for-desktop_kube-system_708c58241d063556f72d047bd4ff0668_0
814f74f0aa8c k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_etcd-docker-for-desktop_kube-system_d76b3556d1f39ec8d0043b915215028f_0
68b84d8cbbaa k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_kube-scheduler-docker-for-desktop_kube-system_ea66a171667ec4aaf1b274428a42a7cf_0
3794af6fbf34 k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_kube-controller-manager-docker-for-desktop_kube-system_708c58241d063556f72d047bd4ff0668_0
3c1ee6d1aedf k8s.gcr.io/pause-amd64:3.1 "/pause" 5 days ago Up 5 days k8s_POD_kube-apiserver-docker-for-desktop_kube-system_ca46586ea287e0ae17ccd3dbfa4aa8ee_0
Pod
コンポーネントはPod化もされている。名前空間dockerでcomposeな名前のものが気になる・・・
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
docker compose-7447646cf5-mrqpl 1/1 Running 0 11d
docker compose-api-6fbc44c575-8cbcj 1/1 Running 0 11d
kube-system etcd-docker-for-desktop 1/1 Running 0 11d
kube-system kube-apiserver-docker-for-desktop 1/1 Running 0 11d
kube-system kube-controller-manager-docker-for-desktop 1/1 Running 0 11d
kube-system kube-dns-86f4d74b45-dhqsw 3/3 Running 0 11d
kube-system kube-proxy-rlnsl 1/1 Running 0 11d
kube-system kube-scheduler-docker-for-desktop 1/1 Running 0 11d
Service
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
kubernetes-dashboardのインストール(オプション)
minikubeと違い、kubernetes-dashboardはインストールされていないので、必要に応じてdeploymentのyamlでデプロイします。(全部コマンドでやるんだって人は別にいらないからデフォルトで入ってないのかと。)
公式のyamlをkubectl applyしてproxy立ち上げるだけです。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
あとは下記URLからlocalhostのKubernetesダッシュボードにアクセスできます。
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
composeとの統合
先ほどからdockerでcomposeなPodなどいるなーと思っていたら
こちらでdocker stack deploy
でkubernetesにdocker-compose.ymlでデプロイできるとの記事が。自分でも試しにRocket.Chatをデプロイしてみましたが、同様の方法でできました。
「{サービス名}-published」の名前でtype:LoadBalancerのServiceまで自動で作成してくれています。これは便利!
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
db-86b5bb8c7d-cp6bl 1/1 Running 0 23h
rocketchat-868d764d6d-zlhz8 1/1 Running 2 23h
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP None <none> 55555/TCP 23h
rocketchat ClusterIP None <none> 55555/TCP 23h
rocketchat-published LoadBalancer 10.107.203.249 localhost 3000:32046/TCP 23h
ただ、上記の記事と状況が違ったのはCRD(Custom Resource Definition)が出てこなかった事。バイナリレベルで統合されたんでしょうか・・・?
余談(kube-composeについて)
コンテナ一覧を見ていて気になったkube-compose。おそらくこれらがcomposeでのデプロイを可能にしているのでは?と思いもう少し見てみました。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91571f8472c2 docker/kube-compose-api-server "/api-server --kubec…" 5 days ago Up 5 days k8s_compose_compose-api-6fbc44c575-8cbcj_docker_6f9cbdbc-c398-11e8-b684-025000000001_0
483c8c6b6dbc docker/kube-compose-controller "/compose-controller…" 5 days ago Up 5 days k8s_compose_compose-7447646cf5-mrqpl_docker_6f9de91a-c398-11e8-b684-025000000001_0
ちなみにDockerhubのリポジトリにも説明一切なし。gitのリポジトリにも出てこない。。ということでdocker imageの履歴を覗いてみました。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/kube-compose-controller v0.3.9 16260a912a7b 3 months ago 29.9MB
docker/kube-compose-api-server v0.3.9 8757267f7b06 3 months ago 42.5MB
kube-compose-api-server
$ docker history 8757267f7b06 --no-trunc
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:8757267f7b0602bb4cc7824401d827f02ad7fc28a4c25597d9b36010acacbf5d 3 months ago /bin/sh -c #(nop) COPY file:e7db357c3c8a7cb5eac874ad0d2d02c211be0b996f395947b8317354de4fffae in /validate-yaml 4.84MB
<missing> 3 months ago /bin/sh -c #(nop) COPY file:955c5482c520f26c4e30aaa98406fc833d9dcfc14de6e30b1ce7612dc4573fbe in /api-server 33MB
<missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["/api-server"] 0B
<missing> 3 months ago /bin/sh -c apk add ca-certificates --no-cache 555kB
<missing> 8 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 8 months ago /bin/sh -c #(nop) ADD file:093f0723fa46f6cdbd6f7bd146448bb70ecce54254c35701feeceb956414622f in / 4.15MB
kube-compose-controller
$ docker history 16260a912a7b --no-trunc
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:16260a912a7b6e10bf56d6b7a85ae2f6a6fbd036a17c937261bb0d96670d056d 3 months ago /bin/sh -c #(nop) COPY file:e7db357c3c8a7cb5eac874ad0d2d02c211be0b996f395947b8317354de4fffae in /validate-yaml 4.84MB
<missing> 3 months ago /bin/sh -c #(nop) COPY file:71a9ea80a2ad03c6633727b8e2c57f9cc185f5e78fad340b072d101f77e5fa06 in /compose-controller 20.4MB
<missing> 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["/compose-controller"] 0B
<missing> 3 months ago /bin/sh -c apk add ca-certificates --no-cache 555kB
<missing> 8 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 8 months ago /bin/sh -c #(nop) ADD file:093f0723fa46f6cdbd6f7bd146448bb70ecce54254c35701feeceb956414622f in / 4.15MB
なんかCOPYしてる。よくわからないのでコンテナの中にも入ってみました。
$ docker exec -it k8s_compose_compose-api… /bin/sh
バイナリコピーしてただけか。だからCRDは出てこなかったのか・・?
compose-controllerも同じでした。
どうでもいいですがコンテナのOSはやっぱりAlpineでした。
/ # cat /etc/issue
Welcome to Alpine Linux 3.7
Kernel \r on an \m (\l)