使用 EKS 节点监控代理检测节点运行状况问题 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

使用 EKS 节点监控代理检测节点运行状况问题

本主题详细介绍了 EKS 节点监控代理检测到的节点运行状况问题、如何将这些问题显示为节点条件或事件,以及如何配置节点监控代理。

无论是否使用 EKS 自动节点修复,均可使用 EKS 节点监控代理。有关 EKS 自动节点修复的更多信息,请参阅 自动修复 EKS 集群中的节点

EKS 节点监控代理的源代码发布在 GitHub 上的 aws/eks-node-monitoring-agent 存储库中。

节点运行状况问题

下表介绍了节点监控代理可能会检测到的节点运行状况问题。问题有两种类型:

  • 状况 – 需要采取补救措施(例如替换实例或重启实例)的终端问题。启用自动修复后,Amazon EKS 将执行修复操作,可能是替换或重启节点。有关更多信息,请参阅 节点状况

  • 事件 – 暂时性问题或节点配置不佳问题。不会执行任何自动修复操作。有关更多信息,请参阅 节点事件

AcceleratedHardware 节点运行状况问题

监控条件是下表中严重性为“状况”的问题的 AcceleratedHardwareReady。下表中的事件和条件适用于与 NVIDIA 和 Neuron 相关的节点运行状况问题。

名称 严重性 说明 修复操作

DCGMDiagnosticFailure

条件

DCGM 主动诊断测试套件中的测试用例失败。

DCGMError

条件

到 DCGM 主机进程的连接已断开或无法建立。

DCGMFieldError[Code]

事件

DCGM 通过字段标识符检测到 GPU 降级。

DCGMHealthCode[Code]

事件

DCGM 运行状况检查以非致命方式失败。

DCGMHealthCode[Code]

条件

DCGM 运行状况检查以致命方式失败。

NeuronDMAError

条件

DMA 引擎遇到不可恢复的错误。

Replace(替换)

NeuronHBMUncorrectableError

条件

HBM 遇到无法纠正的错误并产生了不正确的结果。

Replace(替换)

NeuronNCUncorrectableError

条件

检测到无法纠正的 Neuron Core 内存错误。

Replace(替换)

NeuronSRAMUncorrectableError

条件

片上 SRAM 遇到奇偶校验错误并产生了不正确的结果。

Replace(替换)

NvidiaDeviceCountMismatch

事件

通过 NVML 可见的 GPU 数量与文件系统中的 NVIDIA 设备计数不一致。

NvidiaDoubleBitError

条件

GPU 驱动程序产生了双比特错误。

Replace(替换)

NvidiaNCCLError

事件

NVIDIA Collective Communications 库中出现段错误 (libnccl)。

NvidiaNVLinkError

条件

GPU 驱动程序报告了 NVLink 错误。

Replace(替换)

NvidiaPCIeError

事件

触发 PCIe 重播是为了从传输错误中恢复过来。

NvidiaPageRetirement

事件

GPU 驱动程序已将内存页标记为停用。如果出现单个双比特错误或在同一地址遇到两个单比特错误,则可能会发生这种情况。

NvidiaPowerError

事件

GPU 的功率利用率超过了允许的阈值。

NvidiaThermalError

事件

GPU 的散热状态超过了允许的阈值。

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 Errors。有关单个 XID 消息的更多信息,请参阅《NVIDIA GPU 部署和管理文档》中的 Understanding Xid Messages

下表列出了众所周知的 XID 代码、其含义以及启用后的默认节点修复操作(如果启用)。

XID 代码 说明 修复操作

13

图形引擎异常–出现 GPU 图形引擎错误,通常由软件问题或驱动程序错误引起。

Reboot

31

GPU 内存页面错误–应用程序试图访问无法映射或无法访问的 GPU 内存。

Reboot

48

双位 ECC 错误–GPU 内存中发生无法纠正的双位错误,表示可能出现硬件性能下降。

Reboot

63

GPU 内存重新映射事件–由于检测到错误,GPU 驱动程序重新映射了部分 GPU 内存。这通常是可以恢复的。

Reboot

64

GPU 内存重新映射失败–GPU 无法重新映射有缺陷的内存,这表明存在硬件问题。

Reboot

74

NVLink 错误–GPU 之间的高速 NVLink 互连出现错误。

Replace(替换)

79

GPU 已从总线上掉线–GPU 已无法通过 PCIe 访问,这通常表示硬件故障或电源问题。

Replace(替换)

94

受控内存错误 – 发生了内存错误,但该错误已被隔离,未影响其他应用程序。

Reboot

95

未受控内存错误–发生了可能影响其他应用程序或系统内存的内存错误。

Reboot

119

GSP RPC 超时–与 GPU 系统处理器的通信超时,可能是由于固件问题导致。

Replace(替换)

120

GSP 错误–GPU 系统处理器中发生错误。

Replace(替换)

121

C2C 错误–芯片间互连(用于多芯片 GPU)发生错误。

Replace(替换)

140

ECC 未恢复错误–ECC 错误突破了隔离范围,可能导致数据损坏。

Replace(替换)

要查看与 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

名称 严重性 说明 修复操作

ContainerRuntimeFailed

事件

容器运行时创建容器失败,如果反复发生,则可能与任何报告的问题有关。

DeprecatedContainerdConfiguration

事件

使用已弃用映像清单版本 2、架构 1 的容器映像最近通过 containerd 拉取到了节点上。

KubeletFailed

事件

kubelet 处于某个失败状态。

LivenessProbeFailures

事件

检测到存活探针失败,如果反复发生,则可能指示应用程序代码问题或超时值不足。

PodStuckTerminating

条件

容器组正在或曾经过长时间停滞在正在终止状态,这可能是因 CRI 错误阻止容器组状态进展造成的。

Replace(替换)

ReadinessProbeFailures

事件

检测到就绪探针失败,如果反复发生,则可能指示应用程序代码问题或超时值不足。

[Name]RepeatedRestart

事件

systemd 单元频繁重启。

ServiceFailedToStart

事件

系统单元启动失败。

节点内核运行状况问题

监控条件是下表中严重性为“状况”的问题的 KernelReady

名称 严重性 说明 修复操作

AppBlocked

事件

任务被长时间禁止调度,这通常是由于在输入或输出时被屏蔽所致。

AppCrash

事件

节点上的应用程序已崩溃。

ApproachingKernelPidMax

事件

根据当前 kernel.pid_max 设置,进程数量已接近可用 PID 的最大数量,之后将无法启动更多进程。

ApproachingMaxOpenFiles

事件

按照当前内核设置,打开的文件数已接近可能打开的最大文件数,之后打开新文件将失败。

ConntrackExceededKernel

事件

连接跟踪超出内核的最大值且无法建立新连接可能会导致数据包丢失。

ExcessiveZombieProcesses

事件

无法完全回收的进程正在大量积累,这指示存在应用程序问题,并且可能导致达到系统进程限制。

ForkFailedOutOfPIDs

条件

由于系统进程 ID 或内存不足,fork 或 exec 调用失败,这可能是僵尸进程或物理内存耗尽造成的。

Replace(替换)

KernelBug

事件

Linux 内核本身检测到并报告了内核错误,但这有时可能是由节点的 CPU 或内存使用率过高,导致事件处理延迟造成的。

LargeEnvironment

事件

此进程的环境变量数大于预期,这可能是因许多将 enableServiceLinks 设置为 true 的服务造成的,因为这可能导致性能问题。

RapidCron

事件

cron 作业在此节点上的运行速度超过每五分钟一次,如果该作业消耗大量资源,则可能会影响性能。

SoftLockup

事件

CPU 在给定时间停滞。

节点联网运行状况问题

监控条件是下表中严重性为“状况”的问题的 NetworkingReady

名称 严重性 说明 修复操作

BandwidthInExceeded

事件

因入站总带宽超过实例的最大值,导致数据包已排队或被丢弃。

BandwidthOutExceeded

事件

因出站总带宽超过实例的最大值,导致数据包已排队或被丢弃。

ConntrackExceeded

事件

连接跟踪超出实例的最大值且无法建立新连接,这可能会导致数据包丢失。

EFAErrorMetric

事件

EFA 驱动程序指标显示存在性能下降的接口。

IPAMDInconsistentState

事件

磁盘上 IPAMD 检查点的状态不反映容器运行时中的 IP。

IPAMDNoIPs

事件

IPAMD 的 IP 地址已用完。

IPAMDNotReady

条件

IPAMD 无法连接到 API 服务器。

Replace(替换)

IPAMDNotRunning

条件

未发现 Amazon VPC CNI 进程正在运行。

Replace(替换)

IPAMDRepeatedlyRestart

事件

IPAMD 服务已多次重启。

InterfaceNotRunning

条件

此接口似乎未运行或存在网络问题。

Replace(替换)

InterfaceNotUp

条件

此接口似乎未启动或存在网络问题。

Replace(替换)

KubeProxyNotReady

事件

Kube-proxy 无法观察或列出资源。

LinkLocalExceeded

事件

由于到本地代理服务的流量 PPS 超出网络接口的最大值,数据包被丢弃。

MACAddressPolicyMisconfigured

事件

systemd-networkd 链接配置的值 MACAddressPolicy 不正确。

MissingDefaultRoutes

事件

缺少默认路由规则。

MissingIPRoutes

事件

容器组(pod)IP 缺少路由。

MissingIPRules

事件

容器组(pod)IP 缺少规则。

MissingLoopbackInterface

条件

此实例缺少环回接口,导致服务失败,具体取决于本地连接。

Replace(替换)

NetworkSysctl

事件

此节点的网络 sysctl 设置可能不正确。

PPSExceeded

事件

因双向 PPS 超过实例的最大值,数据包已排队或被丢弃。

PortConflict

事件

如果容器组(pod)使用 hostPort,则可能写入会覆盖主机已经绑定端口的 iptables 规则,这可能会阻止 API 服务器访问 kubelet

UnexpectedRejectRule

事件

iptables 中发现了可能阻止预期流量的异常 REJECTDROP 规则。

节点存储运行状况问题

监控条件是下表中严重性为“状况”的问题的 StorageReady

名称 严重性 说明 修复操作

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 图表

配置选项 说明

monitoringAgent.resources.requests.cpu

监控代理的 CPU 资源请求。

monitoringAgent.resources.requests.memory

监控代理的内存资源请求。

monitoringAgent.resources.limits.cpu

监控代理的 CPU 资源限制。

monitoringAgent.resources.limits.memory

监控代理的内存资源限制。

monitoringAgent.tolerations

在受污染节点上调度监控代理的容差。

monitoringAgent.additionalArgs

要传递给监控代理的其他命令行参数。

注意

您可以通过 EKS 插件或 Helm 安装将 hostname-overrideverbosity 配置为 monitoringAgent.additionalArgs。目前,您无法通过 EKS 插件或 Helm 安装的额外参数来自定义节点监控代理的 probe-address8002)或 metrics-address8003)。

节点监控代理包含一个用于监控 NVIDIA GPU 的 NVIDIA DCGM(数据中心 GPU 管理器)服务器组件(nv-hostengine)。此组件仅在属于 NVIDIA GPU 实例类型的节点上运行,如代理的 Helm 图表中的 nodeAffinity 所示。您无法将现有的 NVIDIA DCGM 安装与 EKS 节点监控代理配合使用,如有此功能需求,请通过 EKS 路线图 GitHub issue #2763 提供反馈。

当您将 EKS 节点监控代理作为 EKS 附加组件部署时,可以通过以下配置值自定义 NVIDIA DCGM 的安装。

配置选项 说明

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