節點問題偵測工具是開放原始碼程式庫,可監控節點健康狀態,並偵測常見的節點問題,例如硬體、核心或容器執行階段問題。在 Google Distributed Cloud 中,這項服務會在每個節點上以 systemd 服務的形式執行。
從 Google Distributed Cloud 1.10.0 版開始,Node Problem Detector 預設為啟用狀態。
如需其他協助,請與 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 儲存空間驅動程式目錄中存在檔案系統問題或不一致。 | 否 |
OrphanContainers 2 |
已刪除容器專屬的 Pod,但對應的容器仍存在於節點中。 | 否 |
FailedCgroupRemoval 2 |
部分 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-config
ConfigMap 資源中停用。除非您明確停用,否則節點問題偵測工具會持續監控節點,找出節點問題的特定狀況。
如要在特定叢集上停用節點問題偵測器,請按照下列步驟操作:
編輯
node-problem-detector-config
ConfigMap 資源: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-config
ConfigMap 沒有data
欄位,因此您可能需要新增該欄位。如要更新資源,請儲存變更並關閉編輯器。
如要重新啟用節點問題偵測器,請執行上述步驟,但在 node-problem-detector-config
資源定義中,將 data.enabled
設為 true
。
如何啟用及停用自動修復功能
從 1.32 版開始,節點問題偵測工具會檢查特定 NodeConditions
,並自動修復節點上的相應問題。根據預設,系統會為支援的 NodeConditions
啟用自動修復功能,但您可以在 node-problem-detector-config
ConfigMap 資源中停用這項功能。
如要停用指定叢集的自動修復行為,請按照下列步驟操作:
編輯
node-problem-detector-config
ConfigMap 資源: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-config
ConfigMap 沒有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 團隊聯絡。如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: