そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

kubernetes学習その1 minikubeを導入して学習環境を整える

どうも世の中の趨勢はkubernetesを使う方向で決してる感じがあるわけで、そろそろ押さえておかねばなるまいと勉強しはじめた今日この頃。

一年前に前職でDockerのオーケストレーションツールを検討していた頃はまだどれが有力とも言いづらい状況だったし、導入も運用もなかなか大変そうな雰囲気だったのでスルーしていたのだけど、今では色々なPaaSがマネージドな環境を提供し始めたし、公式でminikubeというローカル環境が用意されたということで学ぶには丁度よいタイミングになったといえると思う。


「いうてもdocker-composeみたいなもんでしょう」とタカをくくって始めてみたのだけど・・・いやはや独特の概念・用語が沢山あるやら、移行しようにも必ずしも一対一で機能が対応しているわけではなくて頭を捻らねばならないやら。

学習コストは低くないというか、なまじdocker-compose慣れしてしまうと戸惑う部分もある。

ただ、実際に手を動かしてみると例えば起動・終了をトリガーとしたコマンドの実行やcron的な定期実行を定義できたり、何よりオートスケールを考慮した作りになっていたりと、なるほど実運用を見越した合理的な機能構成になっていると感じられる。

そんなわけで、学習環境としてminikubeをセットアップするところまで今回は紹介しようと思う。

導入

minikubeはGithubリポジトリのリリースページの手順に従えば良い。

github.com

以下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コマンドから操作を行うことになるので、これも導入する。

kubernetes.io

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

ちなみにこちらもpodspodpoとして略すことができる。


そして実体となる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 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