Concepts - Cluster Architecture: Node
什麼是節點 (Node)?
在 Kubernetes (K8s) 中,節點 (Node) 是指一個工作機器 (Worker Machine),它可以是實體機 (Bare Metal) 或虛擬機 (VM)。每個節點都由控制平面 (Control Plane) 管理,並負責運行您的應用程式容器 (Workload)。
您可以透過設定,來決定容器要如何分佈在各個節點上,以及要分配多少運算資源 (Computing Resource) 給它們。
如何將節點加入叢集?
將節點加入 K8s 叢集的方式,會因您使用的 K8s 發行版 (Distribution) 而異。
- 雲端供應商託管的 K8s:如果您使用 GKE、EKS 或 AKS 等服務,通常只需要在管理主控台中點擊幾下即可新增節點。
- 本地環境 (On-Premise):在本地環境中,主要有兩種方式:
- 自動註冊 (Self-registration):
kubelet
服務在節點上啟動時,會自動向控制平面註冊。 - 手動新增 (Manually Add):您可以使用
kubectl
指令手動將節點加入叢集。
- 自動註冊 (Self-registration):
注意:每個節點的名稱在叢集中必須是唯一的,預設情況下會使用主機名稱 (hostname)。
kubectl
是操作 K8s 叢集的命令列工具,後續章節會有更詳細的介紹。
節點狀態詳解 (Node Status)
您可以使用 kubectl describe node
指令來查看特定節點的詳細資訊。
|
|
這個指令會回傳大量資訊,對於初學者來說可能有點不知所措。以下我們將重點解釋幾個關鍵部分:
範例輸出 (節錄)
|
|
總之,當您需要排查節點問題時,describe
是您的好朋友。
節點心跳 (Node Heartbeats)
K8s 的控制平面會定期檢查每個節點的健康狀態,這就是所謂的「心跳 (Heartbeats)」,預設每 5 秒一次。如果某個節點在指定時間內沒有回報心跳,控制平面會將其標記為 NotReady
。
此時,排程器 (Scheduler) 會避免將新的 Pod 調度到這個有問題的節點上,並且會開始驅逐 (Evict) 該節點上現有的 Pod,將它們重新安排到其他健康的節點上。
維護節點 (Maintaining a Node)
當您需要對節點進行維護(例如:硬體升級、核心更新)時,可以透過以下指令來安全地將其從叢集中隔離。
cordon
: 暫停調度
cordon
指令會將節點標記為 unschedulable
(不可調度)。
這就像在餐廳門口掛上「暫停入場」的牌子。K8s 的排程器不會再將新的 Pod 分配到這個節點上,但已經在上面運行的 Pod 不會受到影響,會繼續正常服務。
|
|
執行後,您可以使用 kubectl get node
查看到該節點的狀態變為 Ready,SchedulingDisabled
。
|
|
drain
: 驅逐 Pod
drain
指令比 cordon
更進一步。它不僅會將節點設為不可調度,還會安全地驅逐 (Evict) 該節點上所有由使用者部署的 Pod。
這就像餐廳不僅掛上「暫停入場」的牌子,還會禮貌地請店內所有客人離開,以便進行內部整修。K8s 會確保在驅逐 Pod 的同時,不會有新的 Pod 被調度進來。
|
|
如何恢復節點?
當節點維護完成後,您可以使用 uncordon
指令來讓節點重新回到可調度 (schedulable
) 的狀態,再次開始接收新的 Pod。
|
|
如何移除節點?
如果您確定要永久地從叢集中移除一個節點,可以使用 delete
指令。
|
|
以上是關於 K8s 節點的基本管理知識,這些操作是日常維運中非常重要的一環。