MinikubeでKubernatesのローカル環境を構築する
builderscon tokyo 2018 で Kubernates に関する 発表がいくつかありました。業務的に使う機会がなかったのですが、これを機に触ってみようと思い、まずは環境構築から、という話です。
事前準備
以降は以下の環境にて実行することを前提としています。
- MacOS X
- Homebrew
VirtualBoxのインストール
今回インストールする Minikube では以下のVMをサポートしています。
- virtualbox
- vmwarefusion
- KVM2
- KVM (deprecated in favor of KVM2)
- hyperkit
- xhyve
- hyperv
なんでも良いのですが、今回は過去に使ったことのある VirtualBox のインストーラをダウンロードし、インストールしました。
Minikube をインストールする
次に、ローカル環境で Kubernates を動かすために、 Minikube をインストールします。
1brew cask install minikube
インストールされたかを確認します。
1minikube version
2
3> minikube version: v0.29.0
これで minikube
コマンドが使えるようになりました。
Usageを確認する
minikube help
コマンドで、サブコマンドを確認してみます。
1Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.
2
3Usage:
4 minikube [command]
5
6Available Commands:
7 addons Modify minikube's kubernetes addons
8 cache Add or delete an image from the local cache.
9 completion Outputs minikube shell completion for the given shell (bash or zsh)
10 config Modify minikube config
11 dashboard Opens/displays the kubernetes dashboard URL for your local cluster
12 delete Deletes a local kubernetes cluster
13 docker-env Sets up docker env variables; similar to '$(docker-machine env)'
14 help Help about any command
15 ip Retrieves the IP address of the running cluster
16 logs Gets the logs of the running instance, used for debugging minikube, not user code
17 mount Mounts the specified directory into minikube
18 profile Profile sets the current minikube profile
19 service Gets the kubernetes URL(s) for the specified service in your local cluster
20 ssh Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'
21 ssh-key Retrieve the ssh identity key path of the specified cluster
22 start Starts a local kubernetes cluster
23 status Gets the status of a local kubernetes cluster
24 stop Stops a running local kubernetes cluster
25 update-check Print current and latest version number
26 update-context Verify the IP address of the running cluster in kubeconfig.
27 version Print the version of minikube
28
29Flags:
30 --alsologtostderr log to standard error as well as files
31 -b, --bootstrapper string The name of the cluster bootstrapper that will set up the kubernetes cluster. (default "kubeadm")
32 -h, --help help for minikube
33 --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0)
34 --log_dir string If non-empty, write log files in this directory
35 --logtostderr log to standard error instead of files
36 -p, --profile string The name of the minikube VM being used.
37 This can be modified to allow for multiple minikube instances to be run independently (default "minikube")
38 --stderrthreshold severity logs at or above this threshold go to stderr (default 2)
39 -v, --v Level log level for V logs
40 --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging
Minikubeの起動/停止
minikube start
コマンドで Kubernates クラスタを起動します。
初回実行時、kubelet
や kubeadm
もダウンロードされていることがわかります。
1minikube start
2
3> Starting local Kubernetes v1.10.0 cluster...
4> Starting VM...
5> Downloading Minikube ISO
6> 166.67 MB / 171.87 MB [== (中略)
余談ですが、 kubeadm
のダウンロードが終了する前に minikube logs -f
コマンドを実行してしまうと、以下のエラーメッセージが表示されます。
1F1005 08:25:45.623595 4174 logs.go:50] Error getting cluster bootstrapper: getting kubeadm bootstrapper: getting ssh client: Error dialing tcp via ssh client: dial tcp 127.0.0.1:22: connect: connection refused
起動確認をしてみます。
1minikube status
2
3> minikube: Running
4> cluster: Running
5> kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
停止するときは以下です。
1minikube stop
Minikubeの設定ファイルを確認する
minikube start
にて無事 Minikube の起動が完了すると、~/.minikube/
配下にファイルが生成されます。
1/Users/xxxxxxxxxx/.minikube/
2├── addons
3├── apiserver.crt
4├── apiserver.key
5├── ca.crt
6├── ca.key
7├── ca.pem
8├── cache
9│ ├── iso
10│ │ └── minikube-v0.29.0.iso
11│ └── v1.10.0
12│ ├── kubeadm
13│ └── kubelet
14├── cert.pem
15├── certs
16│ ├── ca-key.pem
17│ ├── ca.pem
18│ ├── cert.pem
19│ └── key.pem
20├── client.crt
21├── client.key
22├── config
23├── files
24├── key.pem
25├── logs
26├── machines
27│ ├── minikube
28│ │ ├── boot2docker.iso
29│ │ ├── config.json
30│ │ ├── disk.vmdk
31│ │ ├── id_rsa
32│ │ ├── id_rsa.pub
33│ │ └── minikube
34│ │ ├── Logs
35│ │ │ ├── VBox.log
36│ │ │ └── VBox.log.1
37│ │ ├── minikube.vbox
38│ │ └── minikube.vbox-prev
39│ ├── server-key.pem
40│ └── server.pem
41├── profiles
42│ └── minikube
43│ └── config.json
44├── proxy-client-ca.crt
45├── proxy-client-ca.key
46├── proxy-client.crt
47└── proxy-client.key
profiles/minikube/config.json
には以下のようにVMの設定と、Kubernates の設定が記載されていました。
これらは minikube start
コマンドのオプションとして渡せる値たちですね。
1{
2 "MachineConfig": {
3 "MinikubeISO": "https://storage.googleapis.com/minikube/iso/minikube-v0.29.0.iso",
4 "Memory": 2048,
5 "CPUs": 2,
6 "DiskSize": 20000,
7 "VMDriver": "virtualbox",
8 "HyperkitVpnKitSock": "",
9 "HyperkitVSockPorts": [],
10 "XhyveDiskDriver": "ahci-hd",
11 "DockerEnv": null,
12 "InsecureRegistry": null,
13 "RegistryMirror": null,
14 "HostOnlyCIDR": "192.168.99.1/24",
15 "HypervVirtualSwitch": "",
16 "KvmNetwork": "default",
17 "DockerOpt": null,
18 "DisableDriverMounts": false,
19 "NFSShare": [],
20 "NFSSharesRoot": "/nfsshares",
21 "UUID": "",
22 "GPU": false
23 },
24 "KubernetesConfig": {
25 "KubernetesVersion": "v1.10.0",
26 "NodeIP": "192.168.99.100",
27 "NodeName": "minikube",
28 "APIServerName": "minikubeCA",
29 "APIServerNames": null,
30 "APIServerIPs": null,
31 "DNSDomain": "cluster.local",
32 "ContainerRuntime": "",
33 "NetworkPlugin": "",
34 "FeatureGates": "",
35 "ServiceCIDR": "10.96.0.0/12",
36 "ExtraOptions": null,
37 "ShouldLoadCachedImages": false
38 }
39}
クラスタの削除
minikube delete
コマンドは ローカルのクラスタや関連ファイルを削除する ことができます。
実際に試してみたところ、 machines/minikube
ディレクトリと profiles/minikube/config.json
ファイルが削除されていることを確認できました。
プロファイルによるインスタンスの切り替え
設定ファイルを削除して気づいたのですが、 Minikube には profile
の概念があり、
複数の Minikube インスタンスを扱うことができるようです。
デフォルトでは minikube
というプロファイルが存在しますが、 minikube profile ${プロファイル名}
で現在の Minikube インスタンスを別プロファイルとして扱えます。
例えば、以下のようにしてプロファイル hoge
を作成した後、起動すると、
1minikube profile hoge
2
3> minikube profile was successfully set to hoge
4
5minikube start
先程の設定ファイルのディレクトリ内にもプロファイル用の設定が新規で追加されています。なるほどですね。
1├── machines
2│ ├── hoge
3│ │ ├── boot2docker.iso
4│ │ ├── config.json
5│ │ ├── disk.vmdk
6│ │ ├── hoge
7│ │ │ ├── Logs
8│ │ │ │ └── VBox.log
9│ │ │ ├── hoge.vbox
10│ │ │ └── hoge.vbox-prev
11│ │ ├── id_rsa
12│ │ └── id_rsa.pub
13│ ├── minikube
14│ │ ├── boot2docker.iso
15│ │ ├── config.json
16│ │ ├── disk.vmdk
17│ │ ├── id_rsa
18│ │ ├── id_rsa.pub
19│ │ └── minikube
20│ │ ├── Logs
21│ │ │ └── VBox.log
22│ │ ├── minikube.vbox
23│ │ └── minikube.vbox-prev
24│ ├── server-key.pem
25│ └── server.pem
26├── profiles
27│ ├── hoge
28│ │ └── config.json
29│ └── minikube
30│ └── config.json
プロファイルをデフォルトに戻すときは minikube profile default
としてあげます。
「あれ?私は今どっちのプロファイルでminikube立ち上げてるんだ?」と都度意識してあげる必要はありそうです。
ダッシュボードを確認する
最後に、ローカル環境で起動した Kubernates クラスタをダッシュボードで確認しましょう。
1minikube dashboard
ここまでできれば、次は開発ができそうです!