在 Kubernetes 中,Node 是用來運行應用程式工作負載的主機。隨著應用程式的擴展,將更多的 Node 加入到 Kubernetes Cluster 中是一個關鍵步驟。本文將詳盡介紹如何將新的 Node 加入已初始化的 Kubernetes Cluster,並探討過程中的最佳實踐和常見問題的解決方案。
在開始之前,請確保已經完成以下準備工作:
控制平面(Control Plane)的設置:
網路連接:
時間同步:
ntp
或 chrony
服務來實現時間同步。一旦完成了上述的準備工作,就可以開始將新的 Node 加入到 Kubernetes Cluster 中了。以下是具體的操作步驟:
首先,您需要在控制平面節點上生成加入指令。這個指令將用來指導新的 Node 如何與現有的 Kubernetes Cluster 進行通訊和註冊。
kubeadm token create --print-join-command
該指令會生成一個類似於以下格式的加入指令:
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
這個指令包含了控制平面的 IP 地址、Token 以及證書的雜湊碼(hash code),接下來需要這些資訊將新 Node 加入到 Cluster 中。
在每個需要加入的 Node 上,使用 sudo
權限執行剛才取得的加入指令:
sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
該指令將使該 Node 與控制平面進行通訊,並將其註冊到 Kubernetes Cluster 中。成功執行後,您會看到成功加入的提示資訊:
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-check] Waiting for a healthy kubelet. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 501.604437ms
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
[Run 'kubectl get nodes' on the control-plane to see this node join the cluster.]
加入完成後,您可以通過以下指令檢查所有 Node 是否成功加入 Cluster:
kubectl get nodes
在指令輸出中,您應該能看到新加入的 Node,並且其狀態為 Ready
。如果一切正常,新 Node 應該如以下範例所示已經加入到 Cluster 並準備好接收工作負載:
NAME STATUS ROLES AGE VERSION
k8s-cp Ready control-plane 4h2m v1.30.3
k8s-n1 Ready <none> 2m7s v1.30.3
這表示有兩個節點在 Kubernetes 叢集中,一個是控制平面節點(k8s-cp
),另一個是沒有指定角色的工作節點(k8s-n1
),兩者的狀態都是 "Ready",並且都運行在 Kubernetes 版本 v1.30.3
。
Ready
如果新 Node 已經顯示在 kubectl get nodes
的列表中,但其狀態並非 Ready
,這可能是由於以下原因:
NAME STATUS ROLES AGE VERSION
k8s-cp Ready control-plane 4h2m v1.30.3
k8s-n1 NotReady <none> 2m7s v1.30.3
NotReady
。此情況通常不會持續很久,等待網路套件模組啟動完畢即可。隨著 Kubernetes Cluster 的規模增長,持續擴展 Cluster 的能力變得相當重要。以下是一些在擴展 Kubernetes Cluster 時應該考慮的進階主題和最佳實踐:
在正式環境中,網路設定和防火牆設置尤為重要。以下是一些關鍵的端口和服務,它們需要在防火牆中開放,以確保 Kubernetes Cluster 的順利運行:
通過以上詳細步驟,您已經成功地將 Node 加入到 Kubernetes Cluster。這些新加入的 Node 為您的 Cluster 提供了更多的計算資源,使其具備更高的可用性和擴展性。隨著 Cluster 的擴展和應用負載的增加,繼續遵循這些最佳實踐將有助於保持 Kubernetes 部署的健康和穩定。在未來的文章中,我們將進一步探討 Kubernetes 的其他核心概念和進階功能,幫助您更深入地理解並掌握這一強大的容器編排工具。