どうも世の中の趨勢はkubernetesを使う方向で決してる感じがあるわけで、そろそろ押さえておかねばなるまいと勉強しはじめた今日この頃。
一年前に前職でDockerのオーケストレーションツールを検討していた頃はまだどれが有力とも言いづらい状況だったし、導入も運用もなかなか大変そうな雰囲気だったのでスルーしていたのだけど、今では色々なPaaSがマネージドな環境を提供し始めたし、公式でminikubeというローカル環境が用意されたということで学ぶには丁度よいタイミングになったといえると思う。
「いうてもdocker-composeみたいなもんでしょう」とタカをくくって始めてみたのだけど・・・いやはや独特の概念・用語が沢山あるやら、移行しようにも必ずしも一対一で機能が対応しているわけではなくて頭を捻らねばならないやら。
学習コストは低くないというか、なまじdocker-compose慣れしてしまうと戸惑う部分もある。
ただ、実際に手を動かしてみると例えば起動・終了をトリガーとしたコマンドの実行やcron的な定期実行を定義できたり、何よりオートスケールを考慮した作りになっていたりと、なるほど実運用を見越した合理的な機能構成になっていると感じられる。
そんなわけで、学習環境としてminikubeをセットアップするところまで今回は紹介しようと思う。
導入
minikubeはGithubリポジトリのリリースページの手順に従えば良い。
以下OSX環境にて以下の手順で導入を行うことができる。
(※追記: これ$ brew cask install minikube
でもいけた)
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.18.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
また、実際にはkubectlコマンドから操作を行うことになるので、これも導入する。
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
minikubeの準備
ひとまず起動する。
$ minikube start Starting local Kubernetes cluster... Starting VM... Downloading Minikube ISO 89.51 MB / 89.51 MB [==============================================] 100.00% 0s SSH-ing files into VM... Setting up certs... Starting cluster components... Connecting to cluster... Setting up kubeconfig... Kubectl is now configured to use the cluster.
下記のコマンドでVMのIPを確認できる。
$ minikube ip 192.168.99.100
kubectlの接続設定を行う。
$ kubectl config use-context minikube Switched to context "minikube".
動作確認
ひとまず簡単にコンテナを動かしてみる。ここではrun
コマンドを用いる。
以下はtest-pod
という名称のdeploymentという概念でbusybox
イメージを起動しsh -c "echo test-message;tail -f /dev/null"
というコマンドを実行するという意味。
$ kubectl run test-pod --image=busybox -- sh -c "echo test-message;tail -f /dev/null" deployment "test-pod" created
先のコマンドにより、最初にdeployment
というものが生成される。get
コマンドにより確認できる。
(この辺の概念は後々別記事で触れようと思うけど、今はそういうものなんだ程度に飲み込んで貰った方が良い。)
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE test-pod 1 1 1 0 10s
ちなみに3引数目はdeployments
でもdeployment
でも略してdeploy
でも大丈夫。
先のdeployment
は今度はpod
というコンテナ群を起動する。すなわち今回でいうところのbusybox
だ。これまたget
コマンドで確認できる。
これが実際に起動しているコンテナ群の実体と思えば良い。
$ kubectl get pods NAME READY STATUS RESTARTS AGE test-pod-4115855308-fpbvj 1/1 Running 0 1m
ちなみにこちらもpods
をpod
やpo
として略すことができる。
そして実体となるpod
の名称からlogs
コマンドでログを閲覧する。echo
コマンドで出力したメッセージを確認できる。
$ kubectl logs test-pod-4115855308-fpbvj test-message
既に起動しているコンテナでコマンドを実行する、いわばdocker exec
的なこともできる。
dockerコマンドと同じノリで-it
でインタラクティブモードを用いてコンテナ内に入ることもできる。
$ kubectl exec test-pod-4115855308-fpbvj echo hogehoge hogehoge $ kubectl exec test-pod-4115855308-fpbvj -it sh / #
後片付け
それぞれdelete
コマンドで片付けることができる。
deployment
を片付ければpod
の方も終了される。
$ kubectl delete deploy test-pod deployment "test-pod" deleted $ kubectl get deploy No resources found. $ kubectl get po NAME READY STATUS RESTARTS AGE test-pod-4115855308-n13ts 1/1 Terminating 0 1m (ちょっと待ってから) $ kubectl get po No resources found.
kubernetes最初に押さえなきゃいけない概念や機能がいっぱいあるんだけど公式ドキュメントは初手で読み込むにはちょっとしんどいし、まとまった学習資料が欲しいなーと思って書籍を物色したりしたんだけど、今のところあんまり出版されて無さそう。
クラウド開発徹底攻略 (WEB+DB PRESS plus)
- 作者: 菅原元気,磯辺和彦,山口与力,澤登亨彦,内田誠悟,小林明大,石村真吾,相澤歩,柴田博志,伊藤直也,登尾徳誠,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/05/13
- メディア: 大型本
- この商品を含むブログを見る
追記
OSX上でminikubeを動作させるVMとしてはVirtualBoxの他にxhyveを選択することもできる。(こっちの方がパフォーマンス良い?)
以下インストール手順。
# この記事だとバイナリダウンロードしてたけど、homebrewでも入る $ brew cask install minikube # driverの導入、権限付与 $ brew install docker-machine-driver-xhyve $ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve $ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
起動時にオプションとして指定
$ minikube start --vm-driver=xhyve Starting local Kubernetes v1.6.4 cluster... Starting VM... Moving files into cluster... Setting up certs... Starting cluster components... Connecting to cluster... Setting up kubeconfig... Kubectl is now configured to use the cluster.
また、docker-machineを用いてminikube上のdockerを操作できる。
$ eval $(minikube docker-env)
クラスタ上で動作させたいイメージなんかはこれで作ると良いかも。
解除は
$ docker-machine env -u
追記: GCRに上げたイメージを拾うには