

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 EKS 節點監控代理程式偵測節點運作狀態問題
<a name="node-health-nma"></a>

本主題詳細說明 EKS 節點監控代理程式偵測到的節點運作狀態問題、這些問題如何呈現為節點條件或事件，以及如何設定節點監控代理程式。

EKS 節點監控代理程式可以搭配或不搭配 EKS 自動節點修復使用。如需 EKS 自動節點修復的詳細資訊，請參閱 [自動修復 EKS 叢集中的節點](node-repair.md)。

EKS 節點監控代理程式的原始碼會發佈在 [aws/eks-node-monitoring-agent](https://github.com/aws/eks-node-monitoring-agent) 儲存庫的 GitHub 上。

## 節點運作狀態問題
<a name="node-health-issues"></a>

下表中列出了節點監控代理程式能夠偵測的節點運作狀態問題。有兩種類型的問題：
+ 條件 – 必須執行修復動作的終端問題，例如，執行個體取代或重新啟動。啟用自動修復後，Amazon EKS 將執行修復動作，取代節點或重新啟動。如需詳細資訊，請參閱[節點條件](learn-status-conditions.md#status-node-conditions)。
+ 事件 – 暫時性問題或次佳節點組態。無須執行自動修復動作。如需詳細資訊，請參閱[事件節點](learn-status-conditions.md#status-node-events)。

## AcceleratedHardware 節點運作狀態問題
<a name="node-health-AcceleratedHardware"></a>

針對下表中所列嚴重性為「條件」的問題，監控條件為 `AcceleratedHardwareReady`。下表中的事件和條件適用於 NVIDIA 和 Neuron 相關的節點運作狀態問題。


| 名稱 | 嚴重性 | Description | 修復動作 | 
| --- | --- | --- | --- | 
|  DCGMDiagnosticFailure  |  條件  |  DCGM 作用中診斷測試套件的測試案例失敗。  |  無  | 
|  DCGMError  |  條件  |  DCGM 主機程序的連線遺失或無法建立。  |  無  | 
|  DCGMFieldError【代碼】  |  事件  |  DCGM 透過欄位識別符偵測到 GPU 降級。  |  無  | 
|  DCGMHealthCode【Code】  |  事件  |  DCGM 運作狀態檢查以非嚴重方式失敗。  |  無  | 
|  DCGMHealthCode【Code】  |  條件  |  DCGM 運作狀態檢查嚴重失敗。  |  無  | 
|  NeuronDMAError  |  條件  |  DMA 引擎遇到無法復原的錯誤。  |  取代  | 
|  NeuronHBMUncorrectableError  |  條件  |  HBM 遇到無法修正的錯誤，且產生了錯誤結果。  |  取代  | 
|  NeuronNCUncorrectableError  |  條件  |  偵測到 Neuron Core 無法修正的記憶體錯誤。  |  取代  | 
|  NeuronSRAMUncorrectableError  |  條件  |  晶片上 SRAM 遇到同位錯誤，且產生了錯誤結果。  |  取代  | 
|  NvidiaDeviceCountMismatch  |  事件  |  透過 NVML 可見的 GPUs 數量與檔案系統上的 NVIDIA 裝置計數不一致。  |  無  | 
|  NvidiaDoubleBitError  |  條件  |  GPU 驅動程式產生了雙位元錯誤。  |  取代  | 
|  NvidiaNCCLError  |  事件  |  NVIDIA Collective Communications 程式庫 () 中發生分段錯誤`libnccl`。  |  無  | 
|  NvidiaNVLinkError  |  條件  |  GPU 驅動程式報告了 NVLink 錯誤。  |  取代  | 
|  NvidiaPCIeError  |  事件  |  觸發 PCIe 重播以從傳輸錯誤中復原。  |  無  | 
|  NvidiaPageRetirement  |  事件  |  GPU 驅動程式已標記記憶體頁面進行淘汰。若在同一位址遇到單一雙位元錯誤或兩個單一位元錯誤，可能會發生此情況。  |  無  | 
|  NvidiaPowerError  |  事件  |  GPUs 的用電量超過允許的閾值。  |  無  | 
|  NvidiaThermalError  |  事件  |  GPUs 的熱狀態超過允許的閾值。  |  無  | 
|  NvidiaXID【Code】Error  |  條件  |  發生嚴重 GPU 錯誤。  |  取代或重新啟動  | 
|  NvidiaXID[Code]Warning  |  事件  |  發生非關鍵 GPU 錯誤。  |  無  | 

## NVIDIA XID 錯誤代碼
<a name="nvidia-xid-codes"></a>

節點監控代理程式會從 GPU 核心日誌偵測 NVIDIA XID 錯誤。XID 錯誤分為兩個類別：
+  **眾所周知的 XID 代碼** – 設定節點條件 (`AcceleratedHardwareReady=False`) 並在啟用時觸發自動修復的嚴重錯誤。原因碼格式為 `NvidiaXID[Code]Error`。EKS 節點監控代理程式偵測到的已知 XID 代碼可能不代表需要修復動作的 NVIDIA XID 代碼完整清單。
+  **未知 XID 代碼** – 僅記錄為 Kubernetes 事件。這些不會觸發自動修復。原因碼格式為 `NvidiaXID[Code]Warning`。若要調查未知的 XID 錯誤，請使用 檢閱您的核心日誌`dmesg | grep -i nvrm`。

若要了解 XID 錯誤的詳細資訊，請參閱 *NVIDIA GPU 部署與管理文件中*的 [Xid 錯誤](https://docs.nvidia.com/deploy/xid-errors/index.html#topic_5_1)。若要了解個別 XID 訊息的詳細資訊，請參閱 *NVIDIA GPU 部署與管理文件中*的[了解 Xid 訊息](https://docs.nvidia.com/deploy/gpu-debug-guidelines/index.html#understanding-xid-messages)。

下表列出已知的 XID 代碼、其意義，以及啟用的預設節點修復動作。


| XID 代碼 | Description | 修復動作 | 
| --- | --- | --- | 
|  13  |  圖形引擎例外狀況 – 發生 GPU 圖形引擎錯誤，通常是由軟體問題或驅動程式錯誤造成。  |  重新啟動  | 
|  31  |  GPU 記憶體頁面故障 – 應用程式嘗試存取無法映射或可存取的 GPU 記憶體。  |  重新啟動  | 
|  48  |  雙位元 ECC 錯誤 – GPU 記憶體中發生無法修正的雙位元錯誤，表示潛在的硬體降級。  |  重新啟動  | 
|  63  |  GPU 記憶體重新映射事件 – GPU 驅動程式因為偵測到錯誤而重新映射一部分 GPU 記憶體。這通常可以復原。  |  重新啟動  | 
|  64  |  GPU 記憶體重新映射失敗 – GPU 無法重新映射故障的記憶體，表示硬體問題。  |  重新啟動  | 
|  74  |  NVLink 錯誤 – GPUs 之間的高速 NVLink 互連發生錯誤。  |  取代  | 
|  79  |  GPU 已脫離匯流排 – 無法再透過 PCIe 存取 GPU，通常表示硬體故障或電源問題。  |  取代  | 
|  94  |  包含的記憶體錯誤 – 發生記憶體錯誤，但已包含且不會影響其他應用程式。  |  重新啟動  | 
|  95  |  未包含的記憶體錯誤 – 發生記憶體錯誤，可能已影響其他應用程式或系統記憶體。  |  重新啟動  | 
|  119  |  GSP RPC 逾時 – 與 GPU 系統處理器的通訊逾時，可能是因為韌體問題。  |  取代  | 
|  120  |  GSP 錯誤 – GPU 系統處理器發生錯誤。  |  取代  | 
|  121  |  C2C 錯誤 – chip-to-chip互連 （用於多晶片 GPUs) 發生錯誤。  |  取代  | 
|  140  |  ECC 未復原錯誤 – ECC 錯誤逸出遏制，可能已損毀資料。  |  取代  | 

若要檢視與 GPU 運作狀態相關的目前節點條件，請執行下列命令。

```
kubectl get nodes -o custom-columns='NAME:.metadata.name,ACCELERATOR_READY:.status.conditions[?(@.type=="AcceleratedHardwareReady")].status,REASON:.status.conditions[?(@.type=="AcceleratedHardwareReady")].reason'
```

若要檢視叢集上的 XID 相關事件，請執行下列其中一個命令。

```
kubectl get events | grep -i "NvidiaXID"
```

## ContainerRuntime 節點運作狀態問題
<a name="node-health-ContainerRuntime"></a>

針對下表中所列嚴重性為「條件」的問題，監控條件為 `ContainerRuntimeReady`。


| 名稱 | 嚴重性 | Description | 修復動作 | 
| --- | --- | --- | --- | 
|  ContainerRuntimeFailed  |  事件  |  容器執行時期未能建立容器，若重複發生，很可能與任何報告的問題相關。  |  無  | 
|  DeprecatedContainerdConfiguration  |  事件  |  使用已棄用映像資訊清單第 2 版的容器映像，結構描述 1 最近透過 提取至節點`containerd`。  |  無  | 
|  KubeletFailed  |  事件  |  kubelet 進入失敗狀態。  |  無  | 
|  LivenessProbeFailures  |  事件  |  偵測到活體探查失敗，若重複發生，可能表明應用程式碼問題或逾時值不足。  |  無  | 
|  PodStuckTerminating  |  條件  |  Pod 終止或終止時凍結時間過長，可能是由於阻止 Pod 狀態進度的 CRI 錯誤所致。  |  取代  | 
|  ReadinessProbeFailures  |  事件  |  偵測到整備探查失敗，若重複發生，可能表明應用程式碼問題或逾時值不足。  |  無  | 
|  【Name】RepeatedRestart  |  事件  |  系統化單位經常重新啟動。  |  無  | 
|  ServiceFailedToStart  |  事件  |  未能啟動系統化單元。  |  無  | 

## 核心節點運作狀態問題
<a name="node-health-Kernel"></a>

針對下表中所列嚴重性為「條件」的問題，監控條件為 `KernelReady`。


| 名稱 | 嚴重性 | Description | 修復動作 | 
| --- | --- | --- | --- | 
|  AppBlocked  |  事件  |  排程導致任務已遭到長時間封鎖，通常是由於輸入或輸出遭到封鎖所致。  |  無  | 
|  AppCrash  |  事件  |  節點上的應用程式已當機。  |  無  | 
|  ApproachingKernelPidMax  |  事件  |  程序數量接近目前`kernel.pid_max`設定可用的 PIDs 數量上限，之後就無法再啟動任何程序。  |  無  | 
|  ApproachingMaxOpenFiles  |  事件  |  依據目前的核心設定，開啟的檔案數目正在接近可開啟的最大檔案數目，之後將無法開啟新檔案。  |  無  | 
|  ConntrackExceededKernel  |  事件  |  連線追蹤超出核心上限，並且不能建立新的連線，這可能會導致封包遺失。  |  無  | 
|  ExcessiveZombieProcesses  |  事件  |  若程序不能完全回收，則會大量累積，這表明存在應用程式問題，並且可能會導致達到系統程序限制。  |  無  | 
|  ForkFailedOutOfPIDs  |  條件  |  系統缺少程序 ID 或記憶體導致分支或執行呼叫失敗，這可能是由於殭屍程序或實體記憶體耗盡所致。  |  取代  | 
|  KernelBug  |  事件  |  Linux 核心本身偵測並報告了核心錯誤，但此錯誤有時可能是由於節點具有高 CPU 或記憶體而導致事件處理延遲所致。  |  無  | 
|  LargeEnvironment  |  事件  |  此程序的環境變數數量大於預期，可能是由許多將 `enableServiceLinks`設為 true 的服務所造成，這可能會導致效能問題。  |  無  | 
|  RapidCron  |  事件  |  此節點上每五分鐘的 Cron 任務執行速度更快，若任務取用大量資源，則可能會影響效能。  |  無  | 
|  SoftLockup  |  事件  |  CPU 在一定時間內停滯。  |  無  | 

## 聯網節點運作狀態問題
<a name="node-health-Networking"></a>

針對下表中所列嚴重性為「條件」的問題，監控條件為 `NetworkingReady`。


| 名稱 | 嚴重性 | Description | 修復動作 | 
| --- | --- | --- | --- | 
|  BandwidthInExceeded  |  事件  |  因傳入的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。  |  無  | 
|  BandwidthOutExceeded  |  事件  |  因傳出的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。  |  無  | 
|  ConntrackExceeded  |  事件  |  連線追蹤超出執行個體上限，並且不能建立新的連線，這可能會導致封包遺失。  |  無  | 
|  EFAErrorMetric  |  事件  |  EFA 驅動程式指標顯示有一個具有效能降級的界面。  |  無  | 
|  IPAMDInconsistentState  |  事件  |  磁碟上 IPAMD 檢查點的狀態不會反映容器執行時間中的 IPs。  |  無  | 
|  IPAMDNoIPs  |  事件  |  IPAMD 沒有 IP 地址。  |  無  | 
|  IPAMDNotReady  |  條件  |  IPAMD 未能連線至 API 伺服器。  |  取代  | 
|  IPAMDNotRunning  |  條件  |  找不到正在執行的 Amazon VPC CNI 程序。  |  取代  | 
|  IPAMDRepeatedlyRestart  |  事件  |  IPAMD 服務發生多次重新啟動。  |  無  | 
|  InterfaceNotRunning  |  條件  |  此介面看起來未在執行中，或者存在網路問題。  |  取代  | 
|  InterfaceNotUp  |  條件  |  此介面看起來未啟用，或者存在網路問題。  |  取代  | 
|  KubeProxyNotReady  |  事件  |  Kube-proxy 未能監看或列示資源。  |  無  | 
|  LinkLocalExceeded  |  事件  |  由於本機代理伺服器服務的流量 PPS 超過網路介面上限而丟棄的封包數目。  |  無  | 
|  MACAddressPolicyMisconfigured  |  事件  |  systemd-networkd 連結組態的值不正確`MACAddressPolicy`。  |  無  | 
|  MissingDefaultRoutes  |  事件  |  缺少預設路由規則。  |  無  | 
|  MissingIPRoutes  |  事件  |  Pod IPs 缺少路由。  |  無  | 
|  MissingIPRules  |  事件  |  Pod IPs 缺少規則。  |  無  | 
|  MissingLoopbackInterface  |  條件  |  此執行個體缺少迴路介面，從而導致服務未能執行，具體取決於本機連線。  |  取代  | 
|  NetworkSysctl  |  事件  |  此節點的網路`sysctl`設定可能不正確。  |  無  | 
|  PPSExceeded  |  事件  |  因雙向 PPS 超過執行個體的上限而排入佇列或丟棄的封包數目。  |  無  | 
|  PortConflict  |  事件  |  如果 Pod 使用 hostPort，它可以撰寫`iptables`規則來覆寫主機的已繫結連接埠，從而可能阻止 API 伺服器存取 `kubelet`。  |  無  | 
|  UnexpectedRejectRule  |  事件  |  在 中找到非預期的 `REJECT`或 `DROP`規則`iptables`，可能封鎖預期的流量。  |  無  | 

## 儲存節點運作狀態問題
<a name="node-health-Storage"></a>

針對下表中所列嚴重性為「條件」的問題，監控條件為 `StorageReady`。


| 名稱 | 嚴重性 | Description | 修復動作 | 
| --- | --- | --- | --- | 
|  EBSInstanceIOPSExceeded  |  事件  |  已超過執行個體的 IOPS 上限。  |  無  | 
|  EBSInstanceThroughputExceeded  |  事件  |  已超過執行個體的最大輸送量。  |  無  | 
|  EBSVolumeIOPSExceeded  |  事件  |  已超過特定 EBS 磁碟區的 IOPS 上限。  |  無  | 
|  EBSVolumeThroughputExceeded  |  事件  |  已超過特定 Amazon EBS 磁碟區的輸送量上限。  |  無  | 
|  EtcHostsMountFailed  |  事件  |  由於使用者資料在`kubelet-container`操作`/var/lib/kubelet/pods`期間重新掛載，因此產生的 kubelet 掛載`/etc/hosts`失敗。  |  無  | 
|  IODelays  |  事件  |  程序中偵測到輸入或輸出延遲，若過多，可能表明輸入輸出佈建不足。  |  無  | 
|  KubeletDiskUsageSlow  |  事件  |  `kubelet` 會在嘗試存取 檔案系統時報告磁碟用量緩慢。這可能表示磁碟輸入輸出不足或檔案系統問題。  |  無  | 
|  XFSSmallAverageClusterSize  |  事件  |  XFS 平均叢集大小很小，表示可用空間分段過多。這可以防止在可用節點或可用空間的情況下建立檔案。  |  無  | 

## 設定節點監控代理程式
<a name="node-monitoring-agent-configure"></a>

EKS 節點監控代理程式會部署為 DaemonSet。當您將其部署為 EKS 附加元件時，您可以使用下列組態值來自訂安裝。如需預設組態，請參閱 EKS 節點監控代理程式 [Helm Chart](https://github.com/aws/eks-node-monitoring-agent/blob/main/charts/eks-node-monitoring-agent/values.yaml)。


| 組態選項 | Description | 
| --- | --- | 
|   `monitoringAgent.resources.requests.cpu`   |  監控代理程式的 CPU 資源請求。  | 
|   `monitoringAgent.resources.requests.memory`   |  監控代理程式的記憶體資源請求。  | 
|   `monitoringAgent.resources.limits.cpu`   |  監控代理程式的 CPU 資源限制。  | 
|   `monitoringAgent.resources.limits.memory`   |  監控代理程式的記憶體資源限制。  | 
|   `monitoringAgent.tolerations`   |  在污點節點上排程監控代理程式的容錯。  | 
|   `monitoringAgent.additionalArgs`   |  要傳遞給監控代理程式的其他命令列引數。  | 

**注意**  
您可以使用 EKS 附加元件或 Helm 安裝`verbosity``monitoringAgent.additionalArgs`來設定 `hostname-override`和 。您目前無法使用 EKS 附加元件`8002`或 Helm 安裝，透過其他 args 自訂節點監控代理程式的 `probe-address`() 或 `metrics-address`(`8003`)。

節點監控代理程式包含用於監控 NVIDIA GPUs 的 NVIDIA DCGM （資料中心 GPU Manager) 伺服器元件 (`nv-hostengine`)。此元件只會在屬於 NVIDIA GPU 執行個體類型的節點上執行，如代理程式 [Helm Chart](https://github.com/aws/eks-node-monitoring-agent/blob/main/charts/eks-node-monitoring-agent/values.yaml) `nodeAffinity`中的 所示。您無法搭配 EKS 節點監控代理程式使用現有的 NVIDIA DCGM 安裝，如果您需要此功能，請針對 EKS 藍圖 [GitHub 問題 \$12763](https://github.com/aws/containers-roadmap/issues/2763) 提供意見回饋。

當您將 EKS 節點監控代理程式部署為 EKS 附加元件時，您可以使用下列組態值自訂 NVIDIA DCGM 安裝。


| 組態選項 | Description | 
| --- | --- | 
|   `dcgmAgent.resources.requests.cpu`   |  DCGM 代理程式的 CPU 資源請求。  | 
|   `dcgmAgent.resources.requests.memory`   |  DCGM 代理程式的記憶體資源請求。  | 
|   `dcgmAgent.resources.limits.cpu`   |  DCGM 代理程式的 CPU 資源限制。  | 
|   `dcgmAgent.resources.limits.memory`   |  DCGM 代理程式的記憶體資源限制。  | 
|   `dcgmAgent.tolerations`   |  在污點節點上排程 DCGM 代理程式的容錯。  | 

您可以使用下列 AWS CLI 命令來取得 EKS 節點監控代理程式 EKS 附加元件的版本和結構描述的實用資訊。

取得 Kubernetes 版本的最新代理程式附加元件版本。將 取代`1.35`為您的 Kubernetes 版本。

```
aws eks describe-addon-versions \
  --addon-name eks-node-monitoring-agent \
  --kubernetes-version 1.35 \
  --query='addons[].addonVersions[].addonVersion'
```

取得 EKS 附加元件中支援的代理程式附加元件結構描述。`v1.5.1-eksbuild.1` 將 取代為您的代理程式版本。

```
aws eks describe-addon-configuration \
  --addon-name eks-node-monitoring-agent \
  --addon-version v1.5.1-eksbuild.1
```