概要
minikube はローカルで kubernetes クラスタを構築することができるツールです
今回は VirtualBox と minikube を使ってローカル環境に kubernetes 環境を構築してみました
環境
- macOS 10.13.2
- minikube 0.25.0
- kubectl 1.9.2
- VertualBox 5.1.30r118389
minikube インストール
brew を使って簡単にインストールできます
- brew cask install minikube
インストールできたか確認してみましょう
- brew cask info minikube
- minikube version
minikube コマンドおよび kubectl コマンドが使えるようになっています
minikube ノードを起動する
minikube ノードは kubernetes 内で起動するマスターノードになります
今回ノードを作成する環境は VirtualBox にしています
minikube は VirtualBox 以外の仮想環境 (virtualbox xhyve vmwarefusion hyperkit) もサポートしているので VirtualBox 以外が良いという場合は別の環境を準備してそちらに構築しても OK です
- minikube start
Starting local Kubernetes v1.9.0 cluster...
Starting VM...
Downloading Minikube ISO
142.22 MB / 142.22 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
162.38 MB / 162.41 MB [============================================] 99.98% 0s
0 B / 65 B [----------------------------------------------------------] 0.00%
65 B / 65 B [======================================================] 100.00% 0s
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
--vm-driver
というオプションで VM を管理するインフラを指定します
デフォルトだと「virtualbox」が指定されるようです
ISO のダウンロードが始まり minikube 内で VM が起動します
これで VirtualBox 上に minikube というノードが構築されます
- VBoxManage list runningvms
"minikube" {43f30a82-89d7-4341-bc66-adad08d6b21c}
kubectl get nodes しても確認することができます
NAME STATUS ROLES AGE VERSION
minikube Ready <none> 58m v1.9.0
とりあえずコンテナを構築してみる
ノードが構築できたらとりあえずコンテナを作ってみましょう
deployment の作成 (コンテナも起動)
deployment はコンテナ定義になります
run コマンドを使うことで deployment の作成とコンテナの起動を同時に行えます
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
今回は echoserver という Web アプリのイメージを使います
8080 ポートでアプリが起動するようにオプションを付与しています
- kubectl get deployments
これで deployment ができているか確認しましょう
service の作成
service は deployment の上位的な概念でコンテナのスケールやバランシングを行います
今回は作成したコンテナを外部に公開するために使います
kubectl expose deployment hello-minikube --type=NodePort
NodePort はコンテナにアクセスのにノードのポートを使ってアクセスすることが出来るタイプです
- kubectl get services
とするとサービスの一覧を確認することができます
動作確認
あとはコンテナにアクセスしてみましょう
- kubectl get pod
でコンテナが起動していることを確認して
curl $(minikube service hello-minikube --url)
でアクセスしてみましょう
今回の Web アプリはリクエスト情報をダンプするようなアプリなのでヘッダやボディの情報が返ってくると思います
今度は動きを確認しながら別のコンテナを起動してみる
deployment と service の動きをもう少し確認してみたいと思います
今後は別のコンテナを起動してみましょう
まずは deployment だけ作成してみます
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
google-samples/kubernetes-bootcamp は簡単な nodejs アプリです
8080 で LISTEN するようにします
この状態ではコンテナ外部からアプリにアクセスすることはできません
なので今度はコンテナに直接入ってみます
- kubectl get pods
で起動したコンテナの名前を確認しましょう
そして exec コマンドを使って bash を起動しコンテナに入ってみます
kubectl exec -it kubernetes-bootcamp-5dbf48f7d4-bt9b5 bash
これでコンテナに入れると思います
コンテナ内で直接アプリにアクセスできることを確認しましょう
- curl localhost:8080
これだとノード経由でコンテナにアクセスできないので、そのために serivce を定義してあげます
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
これで kubectl get services
を確認すると 8080 ポートがノード側のポートに動的にバインドされているのが確認できます
ノード側は今回は minikube しかないので minikube のポートにアクセスしています
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h
kubernetes-bootcamp NodePort 10.110.89.189 <none> 8080:32127/TCP 2m
あとはバインドされたノード側のポートにアクセスすればコンテナにアクセスできるようになります
curl $(minikube ip):32127
後処理
service -> deployment -> minikube 停止とすれば OK です
- kubectl delete service hello-minikube
- kubectl delete deployment hello-minikube
- minikube stop
当然ですが service を delete した段階ではコンテナは削除されず deployment を削除したタイミングでコンテナも削除されます
Tips
minikube の管理用 UI を開く
- minikube dashboard
ラベルを指定して pod を取得する (ラベルは describe service で取得できます)
kubectl get pods -l run=kubernetes-bootcamp
最後に
minikube を使ってローカルに kubernetes を試せる環境を構築してみました
かなり簡単に kubernetes を試せるようになったなと感じました
実際にプロダクジョンに適用する場合は minikube ではなく kubeadm という管理ツールがあるのでそれを使ってちゃんとサーバを構築してください
あとは minikube と kubectl コマンドが混同しないようにしましょう
kubectl は kubernetes クラスタ内に存在するコンテナやサービスの操作に使います
minikube は kubernetes クラスタ自体の操作に使うコマンドになります
docker swarm に慣れてしまっている人でも基本的な概念などは似ているのでそこまで取っ付きにくくないかなと思います
機能的には kubernetes のほうが多いので複雑なコンテナマネージメントをやりたい場合には kubernetes を使うことになると思います
VirtualBox 上に作成した minikube 用のインスタンスにログインするには minikube ssh します
返信削除お掃除は
返信削除kubectl delete service hello-minikube
kubectl delete deployment hello-minikube
でできます
deployment を削除することで pod, deployment, replicaset が削除されます