節點狀態

Kubernetes 中 節點 的狀態是管理 Kubernetes 叢集的關鍵方面。在本文中,我們將介紹監控和維護節點狀態的基礎知識,以確保叢集健康穩定。

節點狀態欄位

節點的狀態包含以下資訊

您可以使用 kubectl 檢視節點的 狀態 和其他詳細資訊。

kubectl describe node <insert-node-name-here>

輸出的每個部分將在下面進行描述。

地址

這些欄位的使用取決於您的雲提供商或裸機配置。

  • HostName: 節點核心報告的主機名。可以透過 kubelet 的 --hostname-override 引數進行覆蓋。
  • ExternalIP: 通常是節點可從叢集外部訪問的 IP 地址。
  • InternalIP: 通常是節點只能在叢集內部訪問的 IP 地址。

狀況

conditions 欄位描述了所有 Running 節點的 狀態。條件示例包括:

節點條件及其適用描述。
節點條件描述
Ready如果節點健康且準備好接受 Pod,則為 True;如果節點不健康且不接受 Pod,則為 False;如果節點控制器在 node-monitor-grace-period(預設為 50 秒)內未收到節點的訊息,則為 Unknown
DiskPressure如果存在磁碟空間壓力(即磁碟容量低),則為 True;否則為 False
MemoryPressure如果存在節點記憶體壓力(即節點記憶體低),則為 True;否則為 False
PIDPressure如果程序數存在壓力(即節點上的程序過多),則為 True;否則為 False
NetworkUnavailable如果節點的網路配置不正確,則為 True;否則為 False

在 Kubernetes API 中,節點的條件表示為 Node 資源的 .status 部分。例如,以下 JSON 結構描述了一個健康的節點:

"conditions": [
  {
    "type": "Ready",
    "status": "True",
    "reason": "KubeletReady",
    "message": "kubelet is posting ready status",
    "lastHeartbeatTime": "2019-06-05T18:38:35Z",
    "lastTransitionTime": "2019-06-05T11:41:27Z"
  }
]

當節點出現問題時,Kubernetes 控制平面會自動建立與影響節點的條件相匹配的 汙點(taints)。例如,當 Ready 條件的 status 持續 UnknownFalse 的時間超過 kube-controller-manager 的 NodeMonitorGracePeriod(預設為 50 秒)時,就會發生這種情況。這會導致向 Node 新增 node.kubernetes.io/unreachable 汙點(對於 Unknown 狀態)或 node.kubernetes.io/not-ready 汙點(對於 False 狀態)。

這些汙點會影響待處理的 Pod,因為排程程式在將 Pod 分配到 Node 時會考慮 Node 的汙點。應用 NoExecute 汙點可能會導致已排程到該節點的現有 Pod 被驅逐。Pod 也可能具有 容忍(tolerations),使其能夠在具有特定汙點的 Node 上進行排程並繼續執行。

有關更多詳細資訊,請參閱 基於汙點的驅逐按條件汙點化節點

容量和可分配資源

描述了節點上的可用資源:CPU、記憶體以及可以排程到該節點上的最大 Pod 數量。

capacity 塊中的欄位表示 Node 的總資源量。allocatable 塊表示 Node 上可供普通 Pod 消耗的資源量。

您可以在學習如何 在 Node 上預留計算資源 時,閱讀有關容量和可分配資源的內容。

資訊

描述了關於節點的常規資訊,例如核心版本、Kubernetes 版本(kubelet 和 kube-proxy 版本)、容器執行時詳細資訊以及節點使用的作業系統。kubelet 從節點收集此資訊並將其釋出到 Kubernetes API。

心跳(Heartbeats)

Kubernetes 節點發送的心跳有助於您的叢集確定每個節點的可訪問性,並在檢測到故障時採取相應措施。

節點有兩種形式的心跳:

  • 對 Node 的 .status 的更新
  • 位於 kube-node-lease 名稱空間內的 Lease 物件。每個 Node 都有一個關聯的 Lease 物件。

與 Node 的 .status 更新相比,Lease 是一種輕量級資源。使用 Lease 進行心跳可以減少這些更新對大型叢集的效能影響。

kubelet 負責建立和更新 Node 的 .status,以及更新其相關的 Lease。

  • kubelet 會在狀態發生更改時,或者如果一段時間內沒有更新,則會以配置的間隔更新節點的 .status。節點 .status 更新的預設間隔是 5 分鐘,遠長於 40 秒的預設不可訪問節點超時時間。
  • kubelet 每 10 秒(預設更新間隔)建立並更新其 Lease 物件。Lease 更新獨立於 Node 的 .status 更新。如果 Lease 更新失敗,kubelet 會重試,使用指數退避策略,起始延遲為 200 毫秒,最高上限為 7 秒。
最後修改時間:2024 年 11 月 26 日下午 9:30 PST:修復 node-monitor-grace-period (6685c008b5)