最近は kubernetes (k8s) が人気。ただ、k8s は大規模なアプリでも耐えられるような設計なので、概念がめちゃ多くて理解がむずかしい。
ローカル環境開発では、そんなたいそうな物はいらないので、docker-compose を使うと簡単で良い
しかし、それだとローカルと本番でそれぞれ docker を管理する環境が異なり、設定ファイルなどが混在してしまう・・。
- ローカル開発は docker-compose
- 本番は k8s
そこで、最近は minikube というローカル環境で簡単に k8s を実行できるものがあったので、試した。
minikube は vm を使う仕様なので、start のときに vm driver を指定することができる。デフォルトだと virtualbox ?かもだけど、mac だと hyperkit というのが速いっぽいのでそれにした。
$ brew cask install minikube $ minikube start --vm-driver=hyperkit $ minikube status minikube: Running cluster: Running kubectl: Correctly Configured: pointing to minikube-vm at 192.168.64.3 # これで pod, deployment が作られる $ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080 deployment "hello-minikube" created # この時点でコンテナは動いている $ kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-minikube 1 1 1 1 2m # しかし、k8s の外(このマシン)からアクセスできない。外部からのアクセスを許可するには service を作る必要がある $ kubectl expose deployment hello-minikube --type=NodePort service "hello-minikube" exposed # 次のコマンドで実行しているコンテナの URL が取れる $ minikube service hello-minikube --url # 終わったら deployment を削除 $ minikube delete deployment hello-minikube
感想
docker-compose であれば、 docker-compose up
ですべての環境が整ったが、minikube は minikube start
だけでは完結しない。けっきょく kubectl
も使わないといけないし、複雑に感じた。
特に、pod, deployment, service という3階層もあるので、どうしても出てくるものが多い。
minikube のおかげでかなり楽にはなったんだろうけど、まだローカル環境で k8s は難しいという印象。