節點問題偵測工具

節點問題偵測工具是開放原始碼程式庫,可監控節點健康狀態,並偵測常見的節點問題,例如硬體、核心或容器執行階段問題。在 Google Distributed Cloud 中,這項服務會在每個節點上以 systemd 服務的形式執行。

從 Google Distributed Cloud 1.10.0 版開始,Node Problem Detector 預設為啟用狀態。

如需其他協助,請與 Cloud Customer Care 團隊聯絡。如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」:

可偵測哪些問題?

節點問題偵測工具可以偵測下列問題:

  • 容器執行階段問題,例如執行階段 Daemon 無回應
  • 硬體問題,例如 CPU、記憶體或磁碟故障
  • 核心問題,例如核心死結狀況或檔案系統損毀

它會在節點上執行,並以 NodeConditionEvent 的形式,向 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 版起,唯一支援自動修復的 NodeConditionFailedCgroupRemoval

如何查看偵測到的問題

執行下列 kubectl describe 指令,尋找 NodeConditionsEvents

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

更改下列內容:

  • NODE_NAME:您要檢查的節點名稱。

  • KUBECONFIG:叢集 kubeconfig 檔案的路徑。

如何啟用及停用節點問題偵測工具

節點問題偵測器預設為啟用,但可以在 node-problem-detector-config ConfigMap 資源中停用。除非您明確停用,否則節點問題偵測工具會持續監控節點,找出節點問題的特定狀況。

如要在特定叢集上停用節點問題偵測器,請按照下列步驟操作:

  1. 編輯 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 資源。

  2. 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 欄位,因此您可能需要新增該欄位。

  3. 如要更新資源,請儲存變更並關閉編輯器。

如要重新啟用節點問題偵測器,請執行上述步驟,但在 node-problem-detector-config 資源定義中,將 data.enabled 設為 true

如何啟用及停用自動修復功能

從 1.32 版開始,節點問題偵測工具會檢查特定 NodeConditions,並自動修復節點上的相應問題。根據預設,系統會為支援的 NodeConditions 啟用自動修復功能,但您可以在 node-problem-detector-config ConfigMap 資源中停用這項功能。

如要停用指定叢集的自動修復行為,請按照下列步驟操作:

  1. 編輯 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 資源。

  2. 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" 會停用所有支援情況的自動修復功能。

  3. 如要更新資源,請儲存變更並關閉編輯器。

如要重新啟用所有支援自動修復功能的 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。
  • 自訂要尋找的 NodeConditionsEvents
  • 執行使用者定義的監控指令碼。

後續步驟

如需其他協助,請與 Cloud Customer Care 團隊聯絡。如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: