iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Kubernetes

Kubernetes三十天就上手系列 第 5

Day 05- 將 Node 加到 Kubernetes Cluster

  • 分享至 

  • xImage
  •  

將 Node 加入 Kubernetes Cluster 的完整指南

在 Kubernetes 中,Node 是用來運行應用程式工作負載的主機。隨著應用程式的擴展,將更多的 Node 加入到 Kubernetes Cluster 中是一個關鍵步驟。本文將詳盡介紹如何將新的 Node 加入已初始化的 Kubernetes Cluster,並探討過程中的最佳實踐和常見問題的解決方案。

前置準備工作

在開始之前,請確保已經完成以下準備工作:

  1. 控制平面(Control Plane)的設置

    • 請參考Day 03- 安裝與設定 Kubernetes 環境中的前面三個步驟,完成 Docker、Kubeadm、Kubectl 和 Kubelet的安裝和服務啟動工作。這包括安裝 Kubernetes 相關套件,以及設定必要的網路和防火牆組態。
  2. 網路連接

    • 確保新 Node 能夠與控制平面節點通過網路連接,這是後續步驟能否成功的關鍵。
  3. 時間同步

    • 所有 Node 的系統時間需要保持同步,以避免由於時間不一致而引發的 TLS 證書驗證失敗問題。建議使用 ntpchrony 服務來實現時間同步。

加入 Node 的步驟詳解

一旦完成了上述的準備工作,就可以開始將新的 Node 加入到 Kubernetes Cluster 中了。以下是具體的操作步驟:

步驟 1:取得加入指令

首先,您需要在控制平面節點上生成加入指令。這個指令將用來指導新的 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 中。

步驟 2:在新 Node 上執行加入指令

在每個需要加入的 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.]

步驟 3:驗證 Node 加入結果

加入完成後,您可以通過以下指令檢查所有 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

處理常見問題

Node 狀態非 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
  • 網路套件模組未完全啟動:新 Node 可能正在啟動網路套件模組,這過程中狀態會暫時為 NotReady。此情況通常不會持續很久,等待網路套件模組啟動完畢即可。
  • 時間不同步:時間不一致也可能導致 Node 無法正確加入 Cluster。檢查所有節點的時間同步狀況,並確保它們在同一時間服務器上同步。

進階主題:擴展與最佳實踐

隨著 Kubernetes Cluster 的規模增長,持續擴展 Cluster 的能力變得相當重要。以下是一些在擴展 Kubernetes Cluster 時應該考慮的進階主題和最佳實踐:

1. 多區域與多Cluster的設置

  • 在大型部署中,考慮跨多個地理區域或多個 Cluster 部署 Node,以提高 Cluster 的高可用性和故障恢復能力。

2. 自動化擴展

  • 使用 Kubernetes 的 Cluster Autoscaler 自動管理 Node 的擴展與縮減,根據工作負載需求自動調整 Cluster 大小。

3. 資源監控與優化

  • 定期監控 Cluster 中的資源使用情況,確保每個 Node 的負載平衡。使用 Prometheus 和 Grafana 等工具,幫助您可視化和優化資源分配。

防火牆與網路設定的詳細說明

在正式環境中,網路設定和防火牆設置尤為重要。以下是一些關鍵的端口和服務,它們需要在防火牆中開放,以確保 Kubernetes Cluster 的順利運行:

  • 6443:Kubernetes API 服務。這是控制平面和 Node 之間通訊的核心端口,必須開放以允許控制平面與每個 Node 之間的安全通訊。
  • 10250:Kubelet API。Kubelet 是 Kubernetes 的一個組件,它在每個 Node 上運行,負責管理該 Node 上的容器。開放此端口以允許控制平面與 Kubelet 通訊。
  • 10255:Kubelet 唯讀端口(可選)。如果啟用了此端口,將允許對 Node 的唯讀存取,主要用於監控用途。
  • 8472:Flannel vxlan(如果使用 Flannel)。Flannel 是一種 Kubernetes 網路套件模組,確保這個端口在使用 Flannel 的情況下被開放。

總結

通過以上詳細步驟,您已經成功地將 Node 加入到 Kubernetes Cluster。這些新加入的 Node 為您的 Cluster 提供了更多的計算資源,使其具備更高的可用性和擴展性。隨著 Cluster 的擴展和應用負載的增加,繼續遵循這些最佳實踐將有助於保持 Kubernetes 部署的健康和穩定。在未來的文章中,我們將進一步探討 Kubernetes 的其他核心概念和進階功能,幫助您更深入地理解並掌握這一強大的容器編排工具。


上一篇
Day 04- Kubernetes 網路外掛模組詳解
下一篇
Day 06- 使用 Kubectl 進行基本操作
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言