透過 Minikube 建立多虛擬機節點的 Kubernetes 叢集(不要懷疑!)

Posted by Kyle Bai on 2018-07-22

本文將說明如何透過 Minikube 建立多節點 Kubernetes 叢集。一般來說 Minikube 僅提供單節點功能,即透過虛擬機建立僅有一個具備 Maste/Node 節點的 Kubernetes 叢集,然而為了方便快速部署與測試多節點功能,自己改了一下 Minikube,並支援到 v1.11.x 版本,因此這邊提供給大家參考。

事前準備

開始部署叢集前需先確保以下條件已達成:

  • 在測試機器下載 Minikube 二進制執行檔:

如果上面連結掛了,可以透過以下方式安裝:

$ git clone https://github.com/kairen/minikube.git -b workshop-nctu $GOPATH/src/k8s.io/minikube
$ cd $GOPATH/src/k8s.io/minikube
$ make
  • 在測試機器下載 Virtual Box 來提供給 Minikube 建立虛擬機。
  • IMPORTANT: 測試機器記得開啟 VT-x or AMD-v virtualization.
  • 雖然建議用 vbox,但是討厭 Oracle 的人可以改用其他虛擬化工具(ex: kvm, xhyve),理論上可以動。
  • 下載所屬作業系統的 kubeclt
  • 目前已測試過 Ubuntu 16.04 Desktop、Mac OS X 與 Windows 10 作業系統。
  • Windows 使用者建議用 git bash 來操作。

建立叢集

本節將說明如何建立 Master 與 Node 節點,並將這些節點組成一個叢集。

在開始前確認之前是否已經裝過 Minikube,若有的話,就把上面下載二進制檔放任意方便你執行的位置,或者直接取代之前的,然後再開始前請先刪除 Home 目錄的.minikube資料夾:

$ rm -rf $HOME/.minikube

Master 節點

首先透過 Minikube 執行以下指令來啟動 Master 節點,並透過 kubectl 檢查:

$ minikube --profile k8s-m1 start
$ kubectl -n kube-system get po -o wide
NAME                             READY     STATUS    RESTARTS   AGE       IP               NODE
coredns-78fcdf6894-cgwlj         1/1       Running   0          53s       10.244.0.3       k8s-m1
coredns-78fcdf6894-rwvt7         1/1       Running   0          53s       10.244.0.2       k8s-m1
etcd-k8s-m1                      1/1       Running   0          21s       192.168.99.100   k8s-m1
kube-addon-manager-k8s-m1        1/1       Running   0          23s       192.168.99.100   k8s-m1
kube-apiserver-k8s-m1            1/1       Running   0          7s        192.168.99.100   k8s-m1
kube-controller-manager-k8s-m1   1/1       Running   0          12s       192.168.99.100   k8s-m1
kube-flannel-ds-ftrv7            1/1       Running   0          51s       192.168.99.100   k8s-m1
kube-proxy-hxgfg                 1/1       Running   0          53s       192.168.99.100   k8s-m1
storage-provisioner              1/1       Running   0          51s       192.168.99.100   k8s-m1
  • --vm-driver 可以選擇使用其他 VM driver 來啟動虛擬機,如 xhyve、hyperv、hyperkit 與 kvm2 等等。

完成後,確認 k8s-m1 節點處於 Ready 狀態:

$ kubectl get no
NAME      STATUS    ROLES     AGE       VERSION
k8s-m1    Ready     master    2m        v1.11.0

Node 節點

確認 Master 完成後,這邊接著透過 Minikube 開啟新的節點來加入:

# 啟動一台新節點,注意記得加入`--node`
$ minikube --profile k8s-n1 start --node

# 接著取得 Master token 與 IP
$ minikube --profile k8s-m1 ssh "ip -4 a"
$ minikube --profile k8s-m1 ssh "sudo kubeadm token list"

# 進入 k8s-n1 然後執行接下來指令
$ minikube --profile k8s-n1 ssh

# 這邊為 k8s-n1 VM 內
$ sudo su -
$ TOKEN=7rzqkm.1goumlnntalpxvw0
$ kubeadm join --token ${TOKEN} ${MASTER_IP}:8443 \
    --discovery-token-unsafe-skip-ca-verification \
    --ignore-preflight-errors=Swap \
    --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests
  • 另外上面的 IP 有可能會不同,請確認 master 節點 IP 在執行。
  • 其他節點以此類推。

完成後,透過 kubectl 檢查 Node 是否有加入叢集:

$ kubectl get no
NAME      STATUS    ROLES     AGE       VERSION
k8s-m1    Ready     master    6m        v1.11.0
k8s-n1    Ready     <none>    40s       v1.11.0

$ kubectl get csr
NAME                                                   AGE       REQUESTOR                 CONDITION
node-csr-NRwFiYgjTNUbwpFEbQMkZM0N-whAqSHmgmV43VC-S78   53s       system:bootstrap:lb06u0   Approved,Issued

這樣一個 Kubernetes 叢集就完成了,速度快一點不到 5 分鐘就可以建立好了。

刪除虛擬機與檔案

最後若想清除環境的話,直接刪除虛擬機即可:

$ minikube --profile <node_name> delete

而檔案只要刪除 Home 目錄的.minikube資料夾,以及minikube執行檔即可。