Minikubeを使ってローカル環境にKubernetes環境を用意する

コンニチハ、千葉です。

EKSがプレビュー中です。EKSがGAになる前に、Kubernetesを勉強するため、Minikubeを利用してMac上にKubernetes環境を用意しました。MinikubeはMac以外にも、Linux、Windowsにも対応しています。

Minikubeとは?

Minikubeはローカルで簡単にKubernetesを実行できるツールです。Kubernetesの検証や開発者のために、ノートPC上のVM環境でシングルノードのKubernetesクラスタを実行します。注意事項としては、シングルノードの環境になるので検証できない機能もあります。その場合は適宜クラウド環境に複数ノードでクラスを用意しましょう。 名前的に、小さいKubernetesでミニKubernetesからMinikube?

インストール

インストールの前提があります。 ハイパーバイザーが必要になります。Macの場合は、Hyperkit、xhyve、VirtualBox、VMware Fusionいずれかに対応しています。今回は、VirtualBoxで試してます。事前に任意のハイパーバイザーをインストールしておきましょう。

任意のハイパーバイザーをインストールしたらMinikubeをインストールします。brewを使います。

    
$ brew cask install minikube

インストールできたら早速起動してみましょう。--vm-driver=で、ハイパーバイザーを指定できます。

$ minikube --vm-driver=virtualbox start
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-27T00:13:02Z", GoVersion:"go1.9.4", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"", Minor:"", GitVersion:"v1.9.4", GitCommit:"bee2d1505c4fe820744d26d41ecd3fdd4a3d6546", GitTreeState:"clean", BuildDate:"2018-03-21T21:48:36Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}

起動できました!

Kubernetesを操作してみる

Podを起動して、起動状態を確認します。

 
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment.apps "hello-minikube" created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-c6c6764d-rd67p 1/1 Running 0 13m
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-minikube 1 1 1 1 10m

サービスを作成して外部からアクセスできるようにします。

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

起動されたコンテナにアクセスします。

$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.99.100:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
host=192.168.99.100:32582
user-agent=curl/7.54.0
BODY:

サービスを削除します。

$ kubectl delete service hello-minikube
service "hello-minikube" deleted

Podを削除します。

 
$ kubectl delete deployment hello-minikube
deployment.extensions "hello-minikube" deleted

Minikubeを停止します。

$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

さいごに

結構簡単にローカルにKubernetes環境を構築できました。テストや検証用に有用そうですね!

参考

https://github.com/kubernetes/minikube