昨天提到怎麼安裝kubeadm以及準備實驗環境,今天來討論如何建立集群~
流程會是先初始化Control-Plane ⇒ 安裝Pod網路插件 ⇒ 加入Worker Node
# Control-Plane Node初始化
kubeadm init <args>
所謂Control-Plane Node是指Master Node,這些Node上會擁有etcd、API Server等元件。
我們可以從上面發現,這代表了在初始化時可以加入的參數,那我們來看看有哪些常用的參數吧~
––control-plane-endpoint和––apiserver-advertise-address的差異為前者是指集群,而後者是Master Node。
接下來我們就可以開始初始化了~
初始化成功後我們會看到下列訊息:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a Pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
系統會提示要輸入以下指令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然後這邊顯示的kubeadm join指令與參數紀錄一下,之後要加入其他Node時會用到,但是現在暫時用不到。
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
在這個階段要注意的是我們的Pod網路插件不能和任何主機網路重疊,如果發現目前使用的Pod網路插件和其他主機網路有衝突,可以在kubeadm init時,使用--pod-network-cidr來變更。
有很多基於Pod網路插件的CNI(Container Network Interface),我個人比較熟悉的是flannel:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
安裝後,我們現在可以確認CoreDNS Pod是否正常運作,如果正常運作的話會顯示Running:
kubectl get pods --all-namespaces
在這個階段我們需要做到:
連至Node:可以使用SSH或是其他方式。
擁有root權限
sudo su -
安裝Container Runtime
輸入剛才kubeadm init得到的指令
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
接下來確認是否集群建立成功:
kubectl get nodes
如果所有Node都是Ready就可以了~