minikube 入門した

最近は kubernetes (k8s) が人気。ただ、k8s は大規模なアプリでも耐えられるような設計なので、概念がめちゃ多くて理解がむずかしい。

ローカル環境開発では、そんなたいそうな物はいらないので、docker-compose を使うと簡単で良い

しかし、それだとローカルと本番でそれぞれ docker を管理する環境が異なり、設定ファイルなどが混在してしまう・・。

  • ローカル開発は docker-compose
  • 本番は k8s

そこで、最近は minikube というローカル環境で簡単に k8s を実行できるものがあったので、試した。

minikube は vm を使う仕様なので、start のときに vm driver を指定することができる。デフォルトだと virtualbox ?かもだけど、mac だと hyperkit というのが速いっぽいのでそれにした。

別途 hyperkit driver のインストールが必要

$ 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 は難しいという印象。