Minikube Multi-Node Clusters

f:id:tworks55:20220312110804p:plain

Minikubeを何のオプションも設定せずに起動するとシングルクラスターとして環境が構築されます。

tworks55@LAPTOP-A1R0H57F:~$ kubectl get node
NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   10d   v1.23.3


複数ノードを使って動作確認をしたい場合もあると思いますので、今回は複数ノードでminikubeを作り直します。

複数ノードでminikubeを起動

既にノードが作成されている場合は、起動オプションでノード数を設定しても無視されます。


The cluster minikube already exists which means the --nodes parameter will be ignored. Use "minikube node add" to add nodes to an existing cluster.


tworks55@LAPTOP-A1R0H57F:~$ minikube start --nodes 3
😄  minikube v1.25.2 on Ubuntu 20.04
✨  Using the docker driver based on existing profile
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
🔄  Restarting existing docker container for "minikube" ...
🐳  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
    ▪ kubelet.housekeeping-interval=5m
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
    ▪ Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
    ▪ Using image kubernetesui/dashboard:v2.3.1
    ▪ Using image kubernetesui/metrics-scraper:v1.0.7
🌟  Enabled addons: storage-provisioner, default-storageclass, metrics-server, dashboard
❗  The cluster minikube already exists which means the --nodes parameter will be ignored. Use "minikube node add" to add nodes to an existing cluster.
💡  kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

既にある環境を削除しても良い場合は、以下のコマンドで削除してからminikubeを再起動します。ノード追加するケースは後程試します。

tworks55@LAPTOP-A1R0H57F:~$ minikube delete
🔥  Deleting "minikube" in docker ...
🔥  Deleting container "minikube" ...
🔥  Removing /home/tworks55/.minikube/machines/minikube ...
💀  Removed all traces of the "minikube" cluster.


3つのノードでminikubeを立ち上げます。

tworks55@LAPTOP-A1R0H57F:~$ minikube start --nodes 3
😄  minikube v1.25.2 on Ubuntu 20.04
✨  Automatically selected the docker driver
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🐳  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
    ▪ kubelet.housekeeping-interval=5m
    ▪ kubelet.cni-conf-dir=/etc/cni/net.mk
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner

👍  Starting worker node minikube-m02 in cluster minikube
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🌐  Found network options:
    ▪ NO_PROXY=192.168.49.2
🐳  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
    ▪ env NO_PROXY=192.168.49.2
🔎  Verifying Kubernetes components...

👍  Starting worker node minikube-m03 in cluster minikube
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🌐  Found network options:
    ▪ NO_PROXY=192.168.49.2,192.168.49.3
🐳  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
    ▪ env NO_PROXY=192.168.49.2
    ▪ env NO_PROXY=192.168.49.2,192.168.49.3
🔎  Verifying Kubernetes components...
💡  kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
tworks55@LAPTOP-A1R0H57F:~$ kubectl get node
NAME           STATUS   ROLES                  AGE    VERSION
minikube       Ready    control-plane,master   108s   v1.23.3
minikube-m02   Ready    <none>                 79s    v1.23.3
minikube-m03   Ready    <none>                 38s    v1.23.3

ノード追加


試しに4つ目のノードをminikube-m04として追加します。

tworks55@LAPTOP-A1R0H57F:~$ minikube node add minikube-m04
😄  Adding node m04 to cluster minikube
👍  Starting worker node minikube-m04 in cluster minikube
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🐳  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
🔎  Verifying Kubernetes components...
🏄  Successfully added m04 to minikube!
tworks55@LAPTOP-A1R0H57F:~$ kubectl get node
NAME           STATUS   ROLES                  AGE     VERSION
minikube       Ready    control-plane,master   9m16s   v1.23.3
minikube-m02   Ready    <none>                 8m47s   v1.23.3
minikube-m03   Ready    <none>                 8m6s    v1.23.3
minikube-m04   Ready    <none>                 37s     v1.23.3


簡単に追加できますね。

ノード削除


とりあえず4つも無くて良いのでminikube-m04を削除します。

tworks55@LAPTOP-A1R0H57F:~$ minikube node delete minikube-m04
🔥  Deleting node minikube-m04 from cluster minikube
✋  Stopping node "minikube-m04"  ...
🛑  Powering off "minikube-m04" via SSH ...
🔥  Deleting "minikube-m04" in docker ...
💀  Node minikube-m04 was successfully deleted.
tworks55@LAPTOP-A1R0H57F:~$ kubectl get node
NAME           STATUS   ROLES                  AGE     VERSION
minikube       Ready    control-plane,master   10m     v1.23.3
minikube-m02   Ready    <none>                 9m55s   v1.23.3
minikube-m03   Ready    <none>                 9m14s   v1.23.3


これでminikube環境でもTaintとTolerationの設定を試すことができますね。