節點問題偵測工具

節點問題偵測工具開放原始碼程式庫可讓您監控節點健康狀態,並偵測常見的硬體、核心或容器執行階段問題。在 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 支援自動修復功能:

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

如何查看偵測到的問題

執行下列 kubectl describe 指令,尋找 NodeConditions 和 Events:

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 指令。

  • 如要停用節點問題偵測工具,請執行下列指令:

    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 團隊聯絡。您也可以參閱「取得支援」,進一步瞭解支援資源,包括:

  • 建立客服案件的需求條件。
  • 工具:協助您疑難排解,例如您的環境設定、記錄和指標。
  • 支援的元件。