節點問題偵測工具是開放原始碼程式庫,可監控節點健康狀態,並偵測常見的節點問題,例如硬體、核心或容器執行階段問題。在 Google Distributed Cloud 中,這項服務會在每個節點上以 systemd 服務的形式執行。
從 Google Distributed Cloud 1.10.0 版開始,系統預設會啟用節點問題偵測工具。
如需其他協助,請與 Cloud Customer Care 團隊聯絡。如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」:
可偵測哪些問題?
節點問題偵測工具可以偵測下列問題:
- 容器執行階段問題,例如執行階段 Daemon 無回應
- 硬體問題,例如 CPU、記憶體或磁碟故障
- 核心問題,例如核心死結狀況或檔案系統損毀
它會在節點上執行,並以 NodeCondition 或 Event 的形式,向 Kubernetes API 伺服器回報問題。NodeCondition 是指節點無法執行 Pod 的問題,而Event 則是對 Pod 影響有限的暫時性問題,但仍被視為重要問題而需要回報。
下表說明 Node Problem Detector 偵測到的 NodeConditions,以及是否可自動修復:
| 條件 | 原因 | 支援自動修復1 | 
|---|---|---|
| KernelDeadlock | 核心程序卡住,等待其他核心程序釋出必要資源。 | 否 | 
| ReadonlyFilesystem | 由於磁碟空間已滿等問題,叢集無法寫入檔案系統。 | 否 | 
| FrequentKubeletRestart | kubelet 經常重新啟動,導致節點無法有效執行 Pod。 | 否 | 
| FrequentDockerRestart | Docker 精靈在 20 分鐘內重新啟動超過 5 次。 | 否 | 
| FrequentContainerdRestart | 容器執行階段在 20 分鐘內重新啟動超過 5 次。 | 否 | 
| FrequentUnregisterNetDevice | 節點經常取消註冊網路裝置。 | 否 | 
| KubeletUnhealthy | 節點無法正常運作或未回應控制層。 | 否 | 
| ContainerRuntimeUnhealthy | 容器執行階段運作異常,導致 Pod 無法在節點上執行或排程。 | 否 | 
| CorruptDockerOverlay2 | Docker overlay2 儲存空間驅動程式目錄中存在檔案系統問題或不一致。 | 否 | 
| OrphanContainers2 | 已刪除容器專屬的 Pod,但對應的容器仍存在於節點中。 | 否 | 
| FailedCgroupRemoval2 | 部分 cgroup 處於凍結狀態。 | 是 | 
1 如果是 1.32 以上版本,系統支援在特定情況下自動修復偵測到的問題。
2 支援 1.32 以上版本。
以下是 Node Problem Detector 報告的幾種 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 時,可以自動修復節點上的相應問題。自 1.32 版起,唯一支援自動修復的 NodeCondition 是 FailedCgroupRemoval。
如何查看偵測到的問題
執行下列 kubectl describe 指令,尋找 NodeConditions 和 Events:
kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG
更改下列內容:
- NODE_NAME:您要檢查的節點名稱。
- KUBECONFIG:叢集 kubeconfig 檔案的路徑。
如何啟用及停用節點問題偵測工具
Node Problem Detector 預設為啟用,但可以在 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 指令。
- 如要停用 Node Problem Detector,請執行下列指令: - systemctl stop node-problem-detector
- 如要重新啟動 Node Problem Detector,請執行下列指令: - systemctl restart node-problem-detector
- 如要檢查 Node Problem Detector 是否在特定節點上執行,請執行下列指令: - systemctl is-active node-problem-detector
不支援的功能
Google Distributed Cloud 不支援下列 Node Problem Detector 自訂項目:
- 將節點問題偵測工具報告匯出至其他監控系統,例如 Stackdriver 或 Prometheus。
- 自訂要尋找的 NodeConditions或Events。
- 執行使用者定義的監控指令碼。
後續步驟
如需其他協助,請與 Cloud Customer Care 團隊聯絡。如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: