節點問題偵測工具開放原始碼程式庫可讓您監控節點健康狀態,並偵測常見的硬體、核心或容器執行階段問題。在 Google Distributed Cloud 中,它會以 systemd 服務的形式在每個節點上執行,並在 1.10.0 以上版本中預設啟用。在 1.32 以上版本中,節點問題偵測工具也能自動修復特定節點問題。
如需其他協助,請與 Cloud Customer Care 團隊聯絡。您也可以參閱「取得支援」,進一步瞭解支援資源,包括:
這項工具會偵測哪些問題?
節點問題偵測工具可偵測下列問題:
- 容器執行階段問題,例如執行階段 Daemon 沒有回應
- 硬體問題,例如 CPU、記憶體或磁碟故障
- 核心問題,例如核心死結狀況或檔案系統損毀
它會在節點上執行,並以 NodeCondition 或 Event 的形式向 Kubernetes API 伺服器回報問題。NodeCondition 是指導致節點無法執行 Pod 的問題,而 Event 則是對 Pod 影響有限的暫時性問題,但仍被視為重要到需要回報。
下表說明節點問題偵測工具發現的 NodeConditions,以及是否可以自動修復:
| 條件 | 原因 | 支援自動修復1 |
|---|---|---|
KernelDeadlock |
核心程序卡住,等待其他核心程序釋出所需資源。 | 否 |
ReadonlyFilesystem |
叢集因發生問題 (例如磁碟已滿) 而無法寫入檔案系統。 | 否 |
FrequentKubeletRestart |
kubelet 經常重新啟動,導致節點無法有效執行 Pod。 | 否 |
FrequentDockerRestart |
Docker daemon 在 20 分鐘內重新啟動超過 5 次。 | 否 |
FrequentContainerdRestart |
容器執行階段在 20 分鐘內重新啟動超過 5 次。 | 否 |
FrequentUnregisterNetDevice |
節點經常取消註冊網路裝置。 | 否 |
CorruptDockerOverlay2 |
Docker overlay2 儲存空間驅動程式目錄中的檔案系統有問題或不一致。 | 否 |
OrphanContainers2 |
容器專屬的 Pod 已刪除,但對應的容器仍存在於節點中。 | 否 |
ContainerRuntimeUnhealthy |
容器執行階段無法正常運作,導致 Pod 無法在節點上執行或排程。 | 是 |
FailedCgroupRemoval2 |
部分 cgroup 處於凍結狀態。 | 是 |
KubeletUnhealthy |
節點無法正常運作,或未回應控制層。 | 是 |
1 1.32 以上版本支援在特定條件下自動修復偵測到的問題。
2 支援 1.32 以上版本。
節點問題偵測工具回報的 Events 類型範例如下:
Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.
這項工具可以修復哪些問題?
從 1.32 版開始,當節點問題偵測工具發現特定 NodeConditions 時,可以自動修復節點上的對應問題。下列 NodeConditions 支援自動修復功能:
ContainerRuntimeUnhealthyFailedCgroupRemovalKubeletUnhealthy
如何查看偵測到的問題
執行下列 kubectl describe 指令,尋找 NodeConditions 和 Events:
kubectl describe node NODE_NAME \
--kubeconfig=KUBECONFIG
更改下列內容:
NODE_NAME:要檢查的節點名稱。KUBECONFIG:叢集 kubeconfig 檔案的路徑。
如何啟用及停用節點問題偵測工具
根據預設,節點問題偵測工具會啟用,但您可以在 node-problem-detector-config ConfigMap 資源中停用。除非您明確停用,否則節點問題偵測工具會持續監控節點,找出代表節點發生問題的特定狀況。
如要停用特定叢集的節點問題偵測工具,請按照下列步驟操作:
編輯
node-problem-detector-configConfigMap 資源:kubectl edit configmap node-problem-detector-config \ --kubeconfig=KUBECONFIG \ --namespace=CLUSTER_NAMESPACE更改下列內容:
KUBECONFIG:叢集 kubeconfig 檔案的路徑。CLUSTER_NAMESPACE:要啟用節點問題偵測工具的叢集命名空間。
這個指令會自動啟動文字編輯器,您可以在其中編輯
node-problem-detector-config資源。在
node-problem-detector-config資源定義中,將data.enabled設為false。apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: "2025-04-19T21:36:44Z" name: node-problem-detector-config ... data: enabled: "false"node-problem-detector-configConfigMap 一開始沒有data欄位,因此您可能需要新增該欄位。如要更新資源,請儲存變更並關閉編輯器。
如要重新啟用節點問題偵測工具,請執行上述步驟,但在 node-problem-detector-config 資源定義中將 data.enabled 設為 true。
如何啟用及停用自動修復功能
從 1.32 版開始,節點問題偵測工具會檢查特定 NodeConditions,並自動修復節點上的對應問題。根據預設,系統會為支援的 NodeConditions 啟用自動修復功能,但您可以在 node-problem-detector-config ConfigMap 資源中停用這項功能。
如要停用特定叢集的自動修復行為,請按照下列步驟操作:
編輯
node-problem-detector-configConfigMap 資源:kubectl edit configmap node-problem-detector-config \ --kubeconfig=KUBECONFIG \ --namespace=CLUSTER_NAMESPACE更改下列內容:
KUBECONFIG:叢集 kubeconfig 檔案的路徑。CLUSTER_NAMESPACE:要啟用節點問題偵測工具的叢集命名空間。
這個指令會自動啟動文字編輯器,您可以在其中編輯
node-problem-detector-config資源。在
node-problem-detector-config資源定義中,將data.check-only設為true。apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: "2025-04-19T21:36:44Z" name: node-problem-detector-config ... data: enabled: "true" check-only: "true"node-problem-detector-configConfigMap 一開始沒有data欄位,因此您可能需要新增該欄位。將check-only設為"true",即可停用所有支援條件的自動修復功能。如要更新資源,請儲存變更並關閉編輯器。
如要為所有支援自動修復功能的 NodeConditions 重新啟用這項功能,請在 node-problem-detector-config ConfigMap 中將 data.check-only 設為 "false"。
如何停止及重新啟動節點問題偵測工具
節點問題偵測工具會以 systemd 服務的形式在各個節點上執行。如要管理特定節點的節點問題偵測工具,請使用 SSH 存取節點,並執行下列 systemctl 指令。
如要停用節點問題偵測工具,請執行下列指令:
systemctl stop node-problem-detector如要重新啟動節點問題偵測工具,請執行下列指令:
systemctl restart node-problem-detector如要檢查節點問題偵測工具是否在特定節點上執行,請執行下列指令:
systemctl is-active node-problem-detector
不支援的功能
Google Distributed Cloud 不支援下列節點問題偵測工具自訂項目:
- 將節點問題偵測工具報告匯出至其他監控系統,例如 Cloud Monitoring 或 Prometheus。
- 自訂要尋找的
NodeConditions或Events。 - 執行使用者定義的監控指令碼。
後續步驟
如需其他協助,請與 Cloud Customer Care 團隊聯絡。您也可以參閱「取得支援」,進一步瞭解支援資源,包括: