使用 EKS 節點監控代理程式偵測節點運作狀態問題 - Amazon EKS

協助改進此頁面

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

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

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

使用 EKS 節點監控代理程式偵測節點運作狀態問題

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

EKS 節點監控代理程式可以搭配或不搭配 EKS 自動節點修復使用。如需 EKS 自動節點修復的詳細資訊,請參閱 自動修復 EKS 叢集中的節點

EKS 節點監控代理程式的原始碼會發佈在 aws/eks-node-monitoring-agent 儲存庫的 GitHub 上。

節點運作狀態問題

下表中列出了節點監控代理程式能夠偵測的節點運作狀態問題。有兩種類型的問題:

  • 條件 – 必須執行修復動作的終端問題,例如,執行個體取代或重新啟動。啟用自動修復後,Amazon EKS 將執行修復動作,取代節點或重新啟動。如需詳細資訊,請參閱節點條件

  • 事件 – 暫時性問題或次佳節點組態。無須執行自動修復動作。如需詳細資訊,請參閱事件節點

AcceleratedHardware 節點運作狀態問題

針對下表中所列嚴重性為「條件」的問題,監控條件為 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 錯誤代碼

節點監控代理程式會從 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 錯誤。若要了解個別 XID 訊息的詳細資訊,請參閱 NVIDIA GPU 部署與管理文件中了解 Xid 訊息

下表列出已知的 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 節點運作狀態問題

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

名稱 嚴重性 Description 修復動作

ContainerRuntimeFailed

事件

容器執行時期未能建立容器,若重複發生,很可能與任何報告的問題相關。

DeprecatedContainerdConfiguration

事件

使用已棄用映像資訊清單第 2 版的容器映像,結構描述 1 最近透過 提取至節點containerd

KubeletFailed

事件

kubelet 進入失敗狀態。

LivenessProbeFailures

事件

偵測到活體探查失敗,若重複發生,可能表明應用程式碼問題或逾時值不足。

PodStuckTerminating

條件

Pod 終止或終止時凍結時間過長,可能是由於阻止 Pod 狀態進度的 CRI 錯誤所致。

取代

ReadinessProbeFailures

事件

偵測到整備探查失敗,若重複發生,可能表明應用程式碼問題或逾時值不足。

【Name】RepeatedRestart

事件

系統化單位經常重新啟動。

ServiceFailedToStart

事件

未能啟動系統化單元。

核心節點運作狀態問題

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

名稱 嚴重性 Description 修復動作

AppBlocked

事件

排程導致任務已遭到長時間封鎖,通常是由於輸入或輸出遭到封鎖所致。

AppCrash

事件

節點上的應用程式已當機。

ApproachingKernelPidMax

事件

程序數量接近目前kernel.pid_max設定可用的 PIDs 數量上限,之後就無法再啟動任何程序。

ApproachingMaxOpenFiles

事件

依據目前的核心設定,開啟的檔案數目正在接近可開啟的最大檔案數目,之後將無法開啟新檔案。

ConntrackExceededKernel

事件

連線追蹤超出核心上限,並且不能建立新的連線,這可能會導致封包遺失。

ExcessiveZombieProcesses

事件

若程序不能完全回收,則會大量累積,這表明存在應用程式問題,並且可能會導致達到系統程序限制。

ForkFailedOutOfPIDs

條件

系統缺少程序 ID 或記憶體導致分支或執行呼叫失敗,這可能是由於殭屍程序或實體記憶體耗盡所致。

取代

KernelBug

事件

Linux 核心本身偵測並報告了核心錯誤,但此錯誤有時可能是由於節點具有高 CPU 或記憶體而導致事件處理延遲所致。

LargeEnvironment

事件

此程序的環境變數數量大於預期,可能是由許多將 enableServiceLinks設為 true 的服務所造成,這可能會導致效能問題。

RapidCron

事件

此節點上每五分鐘的 Cron 任務執行速度更快,若任務取用大量資源,則可能會影響效能。

SoftLockup

事件

CPU 在一定時間內停滯。

聯網節點運作狀態問題

針對下表中所列嚴重性為「條件」的問題,監控條件為 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

事件

在 中找到非預期的 REJECTDROP規則iptables,可能封鎖預期的流量。

儲存節點運作狀態問題

針對下表中所列嚴重性為「條件」的問題,監控條件為 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 平均叢集大小很小,表示可用空間分段過多。這可以防止在可用節點或可用空間的情況下建立檔案。

設定節點監控代理程式

EKS 節點監控代理程式會部署為 DaemonSet。當您將其部署為 EKS 附加元件時,您可以使用下列組態值來自訂安裝。如需預設組態,請參閱 EKS 節點監控代理程式 Helm Chart

組態選項 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 安裝verbositymonitoringAgent.additionalArgs來設定 hostname-override和 。您目前無法使用 EKS 附加元件8002或 Helm 安裝,透過其他 args 自訂節點監控代理程式的 probe-address() 或 metrics-address(8003)。

節點監控代理程式包含用於監控 NVIDIA GPUs 的 NVIDIA DCGM (資料中心 GPU Manager) 伺服器元件 (nv-hostengine)。此元件只會在屬於 NVIDIA GPU 執行個體類型的節點上執行,如代理程式 Helm Chart nodeAffinity中的 所示。您無法搭配 EKS 節點監控代理程式使用現有的 NVIDIA DCGM 安裝,如果您需要此功能,請針對 EKS 藍圖 GitHub 問題 #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