概要
minikubeでk8sのローカルクラスタを構築して、開発環境として利用する際のコマンド例などのメモです。
Docker Desktopに付属のk8sクラスタの代替として利用するようなシンプルな利用方法を想定しています。またMac上で動かすことを想定に記載していますが、OS環境に依存する部分はほとんどありません。
基本的な使い方
クラスタの作成(初回起動)
初回起動時に色々なパラメータを指定した上で start
コマンドを実行することでクラスタを作成します。
主なパラメータ
-
p
: クラスタを識別するためのプロファイル名(省略可能ですがとりあえず付けておくのがオススメです) -
cpus
: コア数 -
memory
: メモリサイズ[MB] -
disk-size
: ディスクサイズ -
driver
: 仮想化に利用するドライバーの種別(Macではhyperkit
がIdle時のCPU使用率的にはオススメです) -
kubernetes-version
: Kubernetesバージョン(無指定だとデフォルトのバージョンが使われます)
実行例
$ minikube start -p minikube-dev1 --cpus 2 --memory 4096 --disk-size 50g --driver hyperkit
😄 [minikube-dev1] minikube v1.21.0 on Darwin 11.4
✨ Using the hyperkit driver based on user configuration
👍 Starting control plane node minikube-dev1 in cluster minikube-dev1
🔥 Creating hyperkit VM (CPUs=2, Memory=4096MB, Disk=51200MB) ...
🐳 Preparing Kubernetes v1.20.7 on Docker 20.10.6 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube-dev1" cluster and "default" namespace by default
クラスタの停止
クラスタを停止する際は stop
コマンドで停止します。
k8sはアイドル時も一定のCPUを消費するので、不要になったクラスタは停止しておいた方がマシンに優しくなります。(ただし後述するauto-pause add-onを入れておけば、アイドル時のCPU消費を大幅に削減できるので無理に止めなくても良いかもしれません)
実行例
$ minikube stop -p minikube-dev1
✋ Stopping node "minikube-dev1" ...
🛑 1 nodes stopped.
スタート(2回目以降)
停止したクラスタを再度起動する場合は単純に start
コマンドを実行します。
実行例
$ minikube start -p minikube-dev1
😄 [minikube-dev1] minikube v1.21.0 on Darwin 11.4
✨ Using the hyperkit driver based on existing profile
👍 Starting control plane node minikube-dev1 in cluster minikube-dev1
🔄 Restarting existing hyperkit VM for "minikube-dev1" ...
🐳 Preparing Kubernetes v1.20.7 on Docker 20.10.6 ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube-dev1" cluster and "default" namespace by default
クラスタの削除
不要になったクラスタを削除する場合は delete
コマンドで削除します。
実行例
$ minikube delete -p minikube-dev1
🔥 Deleting "minikube-dev1" in hyperkit ...
💀 Removed all traces of the "minikube-dev1" cluster.
デフォルトプロファイルの指定
デフォルトプロファイルを指定しておくと各種コマンドで -p
でのプロファイル指定が不要となります。
特定のクラスタを定常的に利用する場合は設定しておくと便利です。
実行例
$ minikube profile minikube-dev1
✅ minikube profile was successfully set to minikube-dev1
プロファイルのリスト表示
list
コマンドでプロファイルのリストと動作状態を確認することができます。
実行例
$ minikube profile list
|---------------|-----------|---------|---------------|------|---------|---------|-------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes |
|---------------|-----------|---------|---------------|------|---------|---------|-------|
| minikube | hyperkit | docker | 192.168.64.2 | 8443 | v1.19.4 | Stopped | 1 |
| minikube-dev1 | hyperkit | docker | 192.168.64.10 | 8443 | v1.20.7 | Running | 1 |
|---------------|-----------|---------|---------------|------|---------|---------|-------|
クラスタ設定の変更
実行例
クラスタのオプション設定は config set
コマンドで変更することができます。
指定できるオプションは起動時に指定するものと同じです。
$ minikube config set cpus 3
❗ These changes will take effect upon a minikube delete and then a minikube start
オススメのAddons
開発用に利用する際に入れておくと良いものをリストアップしています。
以降のコマンド例はデフォルトプロファイルの指定を実施済みの想定で -p
オプションは省略しています。
metrics-server
Metrics(CPU/Memory使用量)を取得できるようにするための add-on です。
$ minikube addons enable metrics-server
▪ Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
🌟 The 'metrics-server' addon is enabled
これで kubectl top
でリソース使用量が確認できるようになります。
$ kubectl top pods -n kube-system --use-protocol-buffers
NAME CPU(cores) MEMORY(bytes)
coredns-74ff55c5b-kks2v 3m 8Mi
etcd-minikube-dev1 13m 26Mi
kube-apiserver-minikube-dev1 59m 286Mi
kube-controller-manager-minikube-dev1 16m 43Mi
kube-proxy-zjhbd 1m 16Mi
kube-scheduler-minikube-dev1 3m 13Mi
metrics-server-7894db45f8-5nsv2 4m 13Mi
storage-provisioner 3m 8Mi
(α版) auto-pause
一定時間クラスタへの操作がないと kube-system で動いているコンテナを pause してくれる add-on です。アイドル時のCPU使用率を低下させることができます。
α版な影響か原理的な問題なのか動作が不安定になる部分がありますが、Kubernetesはアイドル時のCPU使用率が比較的高めなので、マシンに優しくする目的ではオススメです。
$ minikube addons enable auto-pause
▪ Using image gcr.io/k8s-minikube/auto-pause-hook:v0.0.2
▪ auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.
▪ https://github.com/kubernetes/minikube/labels/co/auto-pause
🌟 The 'auto-pause' addon is enabled
ingress
Ingress を利用できるようにする add-on です。
$ minikube addons enable ingress
▪ Using image k8s.gcr.io/ingress-nginx/controller:v0.44.0
▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
🔎 Verifying ingress addon...
🌟 The 'ingress' addon is enabled
Ingressへのアクセス方法
minikube では ip
コマンドでPodが動作するノードのIPアドレスが分かります。
$ minikube ip
192.168.64.6
この値を /etc/hosts
に設定してIngressでアクセスしたいホスト名を解決できるようにします。
例えば、Ingressのホスト名が hello.test
であれば下記の値を設定します。
192.168.64.6 hello.test
これでcurlやWebブラウザで hello.test
を指定することでIngressに対してリクエストが送れます。
その他
全部消してリセット
何か困ったことが起きた時は、とりあえず全部消してリセットしてみると治る場合があります。
$ minikube delete --purge --all