minikubeはKubernetes公式のツールで、フル機能のKubernetesをローカル環境に構築することができます。Kubernetesへデプロイするアプリのテスト時、k8s objectをいじるたびにサーバにデプロイ・・みたいなことをするのがこれまで面倒でしたが、minikubeでだいぶ楽になりました。
TL;DR
docker-machine + redspread/localkubeよりだいぶ良いです。
ただし、5/31現在の0.1.0では、コンテナから外部ホストをDNSで解決できない問題がある(例えば、DatadogコンテナからメトリクスをDatadogへ送れないとか、apt-get updateできないとか)ので、もうしばらく待ちましょう。
ぼくは、今のところlocalkube+docker-machine最新版+Docker古いの(boot2docker v1.9.1をdocker-machineのオプション指定)で使ってます。DNS問題が解決したら、またminikubeを試してみる予定。
とりあえず、minikubeにIssue立てました。
https://github.com/kubernetes/minikube/issues/137
勘違いだったらいいんですが・・。他にもこの問題にあたった人は、ぜひコメントしていただけると。
0.2.0で修正されたようです。
2016年12月現在の最新バージョンは0.13.0です。
minikubeの生い立ち
minikubeはlibmachine + redspread/localkubeで作られています。
前提
- 2016/12/2にリリースされたバージョン0.13.0を使います
手順
minikubeのインストール
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.13.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
Kubernetesクラスタの作成
$ minikube start
Starting local Kubernetes cluster...
Creating CA: /Users/$USER/.minikube/certs/ca.pem
Creating client certificate: /Users/$USER/.minikube/certs/cert.pem
Running pre-create checks...
(minikubeVM) Image cache directory does not exist, creating it at /Users/$USER/.minikube/cache...
Creating machine...
(minikubeVM) Downloading /Users/$USER/.minikube/cache/boot2docker.iso from https://storage.googleapis.com/minikube/minikube-0.1.iso...
(minikubeVM) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
(minikubeVM) Creating VirtualBox VM...
(minikubeVM) Creating SSH key...
(minikubeVM) Starting the VM...
(minikubeVM) Check network to re-create if needed...
(minikubeVM) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
Kubernetes is available at https://192.168.99.101:443.
Run this command to use the cluster:
kubectl config use-context minikube
kubectlの設定
kubectlで操作する対象のKubernetesクラスタは複数設定できるのですが、
実際何らかのコマンドを実行するにあたっては、クラスタ(context)を一つ選ぶ必要があります。
今回、minikube start
でつくられたクラスタはminikubeという名前のcontextになっているので、それをkubectl config use-context
で選択します。
$ kubectl config use-context minikube
switched to context "minikube".
以降は、普通にkubectlコマンドを使えます。
minikube内のDockerデーモンへアクセスする
kubernetesクラスタの調査などの目的で、直接Dockerコマンドを叩きたい場合もあると思います。
一番よくあるのは、docker build
したいときでしょうか。
その場合は、docker
コマンドにdocker daemonの場所を伝えるために所定の環境変数を設定しておく必要があります。
docker-machine + localkubeを利用していた人は、eval "$(docker-machine env hogehoge)
を利用していたかと思いますが、minikubeにも同様のコマンドが用意されています。
$ eval "$(minikube docker-env)"
Dockerバージョンの確認
docker-machine
をお使いの方は、これまで「machineをアップグレードしたら、Kubernetesが対応していないDocker Engine(1.10とか1.11)になってしまってつらい(しかも完全に動かないわけではないのがつらい)」みたいなことがあったと思います。
minikube
はちゃんとKubernetesが対応しているバージョンのDockerをインストールしておいてくれます。docker info
で確認してみましょう。
k8s 1.3用のminikube 0.5.0のとき
$ docker info
Containers: 32
Images: 102
Server Version: 1.11.1
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 276
Dirperm1 Supported: true
Logging Driver: json-file
Kernel Version: 4.4.14-boot2docker
Operating System: Boot2Docker 1.11.1 (TCL 7.1); master : 901340f - Fri Jul 1 22:52:19 UTC 2016
CPUs: 1
Total Memory: 995.9 MiB
Name: minikubeVM
ID: W5CC:I65P:4675:OAGY:EDTH:IMI5:IWUG:U2ZR:NSFW:LH25:EFYT:Q7Z2
Debug mode (server): true
File Descriptors: 56
Goroutines: 116
System Time: 2016-07-11T06:59:49.867484291Z
EventsListeners: 0
Init SHA1:
Init Path:
Docker Root Dir: /mnt/sda1/var/lib/docker
Username: mumoshu
Registry: https://index.docker.io/v1/
Labels:
provider=virtualbox
k8s 1.2用のminikube 0.2.0のとき
$ docker info
Containers: 4
Images: 23
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 31
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.4.8-boot2docker
Operating System: Boot2Docker 1.9.1 (TCL 7.0); master : 7954f54 - Wed Apr 27 17:59:58 UTC 2016
CPUs: 1
Total Memory: 995.9 MiB
Name: minikubeVM
ID: S5CD:FAFS:AJUW:5MN5:XQXB:4UJO:IJGY:HFDC:FH3W:KZAR:IDK7:NYY2
Debug mode (server): true
File Descriptors: 35
Goroutines: 59
System Time: 2016-05-31T03:49:02.201025026Z
EventsListeners: 0
Init SHA1:
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker
Username: mumoshu
Registry: https://index.docker.io/v1/
Labels:
provider=virtualbox
Server Version: 1.9.1
とあるように、Kubernetes 1.2が前提としているDocker 1.9.1がインストールできていることが確認できました。
minikube VMにSSH接続する
k8s 1.3用のminikube 0.5.0以降
以前のバージョンのminikubeと比べて簡単になりました。
$ minikube ssh
k8s 1.2用のminikube 0.2.0のとき
docker-machine ssh
のようなコマンドはまだ用意されていないので、
- ユーザ名
- 接続先ホスト
- 秘密鍵の場所
を使ってSSHコマンドを実行する必要があります。
ユーザ名はdocker-machine同様dockerで、接続先IPアドレスはminikube ip
でとれます。秘密鍵は、~/.minikube
以下に保存されています。
$ ssh -i ~/.minikube/machines/minikubeVM/id_rsa docker@$(minikube ip)