Docker Desktop for Mac の Kubernetes 機能を使用して Mac 上に Kubernetes クラスタを構築する

f:id:kyagi:20180216023000p:plain

Mac でお手軽 Kubernetes クラスタ構築

難しい、となかなか敷居が高くなりがちな Kubernetes だが Docker Desktop for Mac の Kubernetes 機能を利用すると、お手軽に Mac に Kubernetes クラスタを構築することができる。

Docker Desktop for Mac とは?

Mac の Docker 環境の最新版。少し前までは Docker Toolbox が使用されていたが、現在では Docker Desktop for Mac がスタンダードになっている。18.06 から Kubernetes 機能も搭載された。

f:id:kyagi:20190224163753p:plain

インストール

Docker.dmg をダウンロードしてインストールする。 https://hub.docker.com/editions/community/docker-ce-desktop-mac

Kubernetes 機能の有効化

Preferences から Kubernetes タブに進んで、「Enable Kubernetes」にチェックを入れるとバックグラウンドで Kubernetes が動き出す。

f:id:kyagi:20190224164507p:plain

Kubernetes Dashboard の有効化

以下のドキュメント通りに kubectl createkubectl proxy を打った後、指定の localhost:8001 の URL をブラウザで開く。

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

Kubernetes Dashboard のアクセス

Dashboard のアクセスには認証が必要になる。ネームスペース kube-system で起動している deployment-controller のトークンを利用してアクセスする。

$ kubectl -n kube-system get secret | grep deployment-controller | awk '{print $1}' | xargs -I{} kubectl describe secret {} -n kube-system | grep ^token | awk '{print $2}'

f:id:kyagi:20190224164556p:plain f:id:kyagi:20190224164612p:plain

go の docker イメージや拙作の rod(統合 REPL 環境)を動かす

$ kubectl run golang --image=golang:1.11.5-stretch --command -- tail -f /dev/null
deployment.apps "golang" created

$ kubectl run rod --image=kyagi/rod --command -- tail -f /dev/null
deployment.apps "rod" created

$ kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
golang    1         1         1            1           19s
rod       1         1         1            1           2m
ubuntu    1         1         1            1           5d

f:id:kyagi:20190224170512p:plain

まとめ

Docker Desktop for Mac を開発で利用しているのであれば、せっかく追加された Kubernetes 機能を使わないのはもったいない。難しいと思われがちな(実際、自前で構築するのは難しい) Kubernetes クラスタをお手軽に構築できるので「Kubernetes ってこんな感じなんだ」とまずは感触をつかみたい方にもオススメの方法と言える。いったん構築してしまえば kubectl や Dashboard から「作って壊す」のはもちろん、いろいろな操作ができる。Docker 単体や Docker compose を使って開発環境を構築するよりも効率的なことも多い はず。(^_^)

※個人的には imagePullPolicyAlways から IfNotPresent にすることで docker build したイメージを dockerhub に push する手間がなくなり、修正&確認のサイクルが回しやすくなるのがありがたい。イメージを修正した場合は build した後に、単にその pod を削除して自動再生された pod で確認すればよい。( ・ㅂ・)و ̑̑