版本说明
本组件基于 Kubernetes 社区 node-problem-detector v0.8.2 版本继续演进,并非直接跟随社区后续版本或 master 分支迭代,GPU/DCU 相关能力由 TKE 团队自研并独立演进。与社区版本的主要差异见下表。
差异点 | 社区 v0.8.2 / master 分支 | 本组件(TKE 版) |
GPU 检测 | 无 NVML 主动轮询能力(master 分支同样未引入) | 新增 gpuMonitor(NVML 主动轮询温度/功率/ECC/NVLink/PCIe 等)及 xidMonitor(解析 NVIDIA XID 日志) |
海光 DCU 检测 | 不支持 | 新增 dcuMonitor(hy-smi 主动轮询)及 dcuXidMonitor/dcuSxidMonitor(解析海光 XID/SXID 日志) |
僵尸进程检测 | 不支持 | 新增 zombieprocessmonitor |
卡死/挂起进程检测 | 不支持 | 新增 stuck_process_monitor(D/T 状态检测,含自身豁免与二次确认过滤瞬时抖动) |
磁盘只读检测 | 不支持 | 新增 diskromonitor 及 disk-ro-check 检测项 |
kubelet root-dir 漂移检测 | 不支持 | 新增 kubelet_rootdir_check |
Docker/Containerd/Kubelet 组件健康检查 | 仅支持 kubelet、docker | 扩展支持 containerd、CRI 独立健康检查 |
日志计数类检测(频繁重启/连接异常等) | 不支持 | 新增 log-counter 系列检测项(FrequentKubeletRestart、ConnectApiServer、PLEGNotHealthy 等) |
Windows 支持 | 支持 | 不支持(本组件仅面向 Linux 节点,已移除 Windows 相关适配代码) |
简介
组件介绍
Node-Problem-Detector-Plus 是 Kubernetes 集群节点的健康监测组件。在容器服务 TKE 环境中以 DaemonSet 方式运行,帮助用户实时检测节点上的各种异常情况,并将检测结果报告给上游的 kube-apiserver。
支持检测的异常类型包括:操作系统级异常(内核死锁、文件系统只读、OOM 等)、容器运行时异常(Docker/Containerd 频繁重启)、NVIDIA GPU 硬件故障,以及海光 DCU 设备故障(掉卡、高温、ECC 错误、HySwitch 异常等)。
部署在集群内的 Kubernetes 对象
Kubernetes 对象名称 | 类型 | 资源量 | Namespaces |
node-problem-detector | DaemonSet | 0.5C512M | kube-system |
node-problem-detector | ServiceAccount | - | kube-system |
node-problem-detector | ClusterRole | - | - |
node-problem-detector | ClusterRoleBinding | - | - |
使用场景
使用 Node-Problem-Detector-Plus 组件可以监控节点的工作状态,包括内核死锁、OOM、系统线程数压力、系统文件描述符压力等指标,通过 Node Condition 和 Event 的形式上报给 apiserver。
您可以通过检测相应的指标,提前预知节点的资源压力,可以在节点开始驱逐 Pod 之前手动释放或扩容节点资源压力,防止 Kubernetes 进行资源回收或节点不可用可能带来的损失。
对于 GPU/DCU 异构计算节点,NPD 还能主动检测硬件故障(如设备丢失、温度过高、ECC 错误等),并通过 Node Condition 上报,方便运维侧及时发现并处理故障设备。
限制条件
在集群中使用 NPD,需要在集群内安装该扩展组件。NPD 容器资源限制(Limits)为 0.5 核 CPU、512M 内存,资源请求(Requests)为 0.1 核 CPU、200M 内存。
组件权限说明
权限说明
该组件权限是当前功能实现的最小权限依赖。
权限场景
功能 | 涉及对象 | 涉及操作权限 |
需要监听节点列表变化,在节点遇到故障时上报故障信息,需要修改 node 的 condition | nodes、nodes/status | get/list/watch、patch |
需要发送 event 通知集群 | event | create/patch/update |
检测幽灵容器等场景需要获取节点上的 Pod 列表 | pods | list |
权限定义
rules:- apiGroups:- ""resources:- nodesverbs:- get- list- watch- apiGroups:- ""resources:- nodes/statusverbs:- patch- apiGroups:- ""resources:- eventsverbs:- create- patch- update- apiGroups:- ""resources:- podsverbs:- list
使用方法
1. 登录 容器服务控制台,在左侧导航栏中选择集群。
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建。
4. 在新建组件管理页面中勾选 Node-Problem-Detector-Plus。
5. 单击完成即可创建组件。组件安装成功后,您的集群中会有对应的 node-problem-detector 资源,在 Node 的 Condition 中也会增加相应的条目。
检测项说明
NPD 内置多种检测器,按检测对象分为 6 大类。每类检测器均可在组件的高级配置中单独开启或关闭。
系统内核检测
检测项 | 检测对象 | 检测方式 | 触发条件 | 对应 Condition |
内核死锁检测 | Docker/AUFS 相关内核任务是否阻塞 | 解析内核日志(/dev/kmsg)中的任务阻塞信息 | 检测到任务被阻塞超过设定时长 | KernelDeadlock |
文件系统只读检测 | 根文件系统是否被动重新挂载为只读 | 解析内核日志中的重新挂载事件 | 检测到内核主动将文件系统重新挂载为只读 | ReadonlyFilesystem |
磁盘只读检测 | 指定挂载点(/、/data)是否变为只读 | 主动尝试写入测试文件 | 连续多次写入失败 | DiskReadOnly |
XFS 元数据错误检测 | XFS 文件系统是否发生元数据 I/O 错误 | 解析内核日志中的 XFS 错误信息 | 检测到 XFS 元数据 I/O 错误日志 | XFSError |
OOM 事件检测 | 进程或 Pod 是否被系统 OOM Killer 杀死 | 解析内核日志中的 OOM Killer 记录 | 检测到进程/Pod 被杀死的日志 | 无(仅产生 Event,不生成 Condition) |
D 状态进程检测 | 是否存在长时间处于不可中断睡眠(D 状态)的进程 | 周期扫描系统进程状态,排除 NPD 自身进程及其派生的插件子进程,候选进程需连续 2 次采样(间隔 500ms)仍处于目标状态才计入,避免磁盘瞬时抖动导致的误报 | 检测到进程处于 D 状态超过 120 秒 | StuckProcess |
挂起进程检测 | 是否存在被 SIGSTOP 挂起(T 状态)的进程 | 周期扫描系统进程状态,排除规则与 D 状态进程检测一致 | 检测到进程处于 T 状态超过 120 秒 | StoppedProcess |
Ext4/IO 错误检测 | 文件系统是否发生 Ext4 错误或 Buffer I/O 错误 | 解析内核日志 | 检测到相应错误日志 | 无(仅产生 Event,不生成 Condition) |
容器运行时与 Kubelet 检测
检测项 | 检测对象 | 检测方式 | 触发条件 | 对应 Condition |
Docker Overlay2 损坏检测 | Docker overlay2 存储层是否损坏 | 解析 dockerd 日志中的 readlink 错误 | 检测到存储层读取异常日志 | CorruptDockerOverlay2 |
服务运行状态检测 | kubelet/Docker/Containerd 系统服务是否处于运行状态 | 通过 systemd 查询服务状态 | 服务处于非运行状态 | KubeletProblem、DockerdProblem、ContainerdProblem |
服务健康检查 | kubelet/Docker/Containerd/CRI 是否能正常响应健康检查请求 | 定期调用组件的健康检查接口 | 健康检查连续失败 | KubeletUnhealthy、ContainerRuntimeUnhealthy、ContainerdRuntimeUnhealthy、ContainerRuntimeInterfaceUnhealthy |
服务频繁重启检测 | kubelet/Docker/Containerd 是否频繁重启 | 统计一段时间窗口内服务启动日志出现的次数 | 20 分钟内重启次数达到 5 次 | FrequentKubeletRestart、FrequentDockerRestart、FrequentContainerdRestart |
幽灵容器检测 | 是否存在容器运行时记录中已不存在对应进程的幽灵容器 | 周期扫描容器运行时状态并与实际进程比对 | 检测到幽灵容器 | HasGhostContainer |
API Server 连接检测 | kubelet 与 API Server 的连接是否正常 | 统计 kubelet 日志中连接异常的出现次数 | 一段时间窗口内连接异常次数达到阈值 | ConnectApiServer |
PLEG 健康检测 | kubelet 的 Pod 生命周期事件生成器(PLEG)是否健康 | 统计 kubelet 日志中 PLEG 异常的出现次数 | 一段时间窗口内异常次数达到阈值 | PLEGNotHealthy |
kubelet 根目录漂移检测 | kubelet 修改 root-dir 配置后,存量运行中的 Pod 是否仍挂载旧路径的卷 | 周期扫描节点上容器的卷挂载路径,判断是否存在多个不同的 root-dir 前缀 | 检测到 2 个及以上不同的 root-dir 前缀 | KubeletRootDirMismatch |
系统资源检测
检测项 | 检测对象 | 检测方式 | 默认阈值 | 对应 Condition |
文件描述符压力检测 | 主机文件描述符使用率 | 读取系统文件描述符使用情况 | 使用率达到最大值的 80% | FDPressure、FDProblem |
PID 压力检测 | 节点进程号(PID)资源使用率 | 读取系统 PID 使用情况 | 使用率达到最大值的 90% | CustomPIDPressure |
线程数压力检测 | 系统线程数使用率 | 读取系统线程数使用情况 | 使用率达到最大值的 90% | ThreadPressure |
Conntrack 表压力检测 | conntrack 连接跟踪表使用率 | 读取系统 conntrack 表使用情况 | 使用率达到 90% | ConntrackProblem |
磁盘使用率检测(Overlay) | 容器存储盘(/data)使用率 | 读取磁盘使用情况 | 使用率达到 80% | OverlayDiskPressure |
持续 D 态进程数量检测 | 全机持续处于不可中断睡眠(D 状态)的进程数量 | 周期扫描全机进程状态,统计连续两次采样均处于 D 状态的进程数,排除 NPD 自身进程及其派生的插件子进程 | 数量超过 10 个 | ProcessProblem |
系统负载检测 | 系统 5 分钟平均负载 | 读取系统 load average | 超过设定阈值 | SystemLoadProblem |
网络设备检测 | 网络设备是否处于 down 状态、是否频繁注销 | 读取网络设备状态、解析内核日志中的网卡注销记录 | 检测到设备异常或频繁注销 | NetDeviceProblem、FrequentUnregisterNetDevice |
MTU 缓存检测 | 路由 MTU 缓存是否过期 | 读取路由缓存信息 | 缓存过期 | MtuCacheProblem |
TCP 时间戳检测 | net.ipv4.tcp_timestamps 内核参数是否被禁用 | 读取系统内核参数 | 参数被禁用 | NetIpv4TcpTimeStampProblem |
服务健康检查
检测项 | 检测对象 | 检测方式 | 默认周期 | 对应 Condition |
NTP 时间同步检测 | ntpd/chronyd/systemd-timesyncd 时间同步服务是否运行 | 通过 systemd 查询服务状态 | 1 分钟 | NTPProblem |
GPU(NVIDIA)硬件检测
NPD 通过 NVIDIA 官方 NVML 库主动轮询 GPU 硬件计数器,并解析系统日志中的 NVIDIA XID 错误码,双通道检测 GPU 硬件问题。
主动轮询检测:
检测项 | 检测方式 | 默认阈值 | 默认检测周期 | 对应 Condition |
GPU 温度检测 | 读取 GPU 温度计数器 | 超过 85℃ | 15 秒 | GPUTempError |
GPU 功率检测 | 读取 GPU 功率使用率 | 超过 120% | 15 秒 | GPUPowerError |
NVLink 检测 | 读取 NVLink CRC 错误增量 | 检测周期内新增超过 10 个 | 60 秒 | GPUNvlinkError |
ECC 模式检测 | 比对当前 ECC 模式与待生效 ECC 模式是否一致 | 不一致 | 30 秒 | GPUEccModeError |
GPU 设备丢失检测 | 统计健康 GPU 数量与初始数量的差异 | 设备数量减少 | 5 秒 | GPUDeviceLost |
InfoROM 完整性检测 | 读取 InfoROM 校验和 | 校验异常 | 60 秒 | GPUInfoROMCorrupted |
行重映射检测 | 读取显存行重映射计数 | 可纠正行超过 10 或不可纠正行新增 | 30 秒 | GPURemappingRowsError |
退役页检测 | 读取待生效的显存退役页信息 | 存在待生效退役页 | 30 秒 | GPUPendingRetiredPages |
双比特 ECC 错误检测 | 读取显存双比特(不可纠正)ECC 错误计数增量 | 检测到任意新增 | 30 秒 | GPUDoubleBitEccError |
单比特 ECC 错误率检测 | 统计检测周期内单比特(可纠正)ECC 错误增量 | 检测周期内新增超过 30 个 | 30 秒 | GPUHighSingleBitEccError |
PCIe 链路检测 | 读取 GPU 与主机间的 PCIe 链路状态 | 链路异常 | 30 秒 | GPUPCIeError |
说明:
GPUDeviceLost、GPUInfoROMCorrupted、GPURemappingRowsError、GPUPendingRetiredPages、GPUDoubleBitEccError、GPUHighSingleBitEccError、GPUPCIeError 属于永久性告警,一旦触发不会自动恢复为 False,需要人工确认硬件状态后重启 NPD 组件才能清除;其余检测项在故障消失后会自动恢复。
NVIDIA XID 日志检测:
xidMonitor 解析 GPU 系统日志(/var/log/messages)中形如
NVRM: Xid (PCI:xxx): <错误码>, <描述> 的记录,按错误码所属集合匹配为致命、警告、应用级、忽略、兜底五类,同一 Condition/Event 可能对应多个错误码:检测项 | 检测对象 | 检测方式 | 触发条件 | 对应 Condition |
GPU 致命 XID 检测 | GPU 硬件级致命故障 | 解析 GPU 系统日志中的 XID 错误码,匹配致命错误码集合 | 检测到 XID 74(NVLink 错误)或 79(GPU 从 PCIe 总线掉线)中任一 | GPUXIDFatalError |
GPU 警告 XID 检测 | GPU 硬件级警告故障(ECC 错误、上下文切换超时、固件通信异常等) | 解析 GPU 系统日志中的 XID 错误码,匹配警告错误码集合 | 检测到 XID 48(显存双比特不可纠正 ECC 错误)、92(单比特 ECC 错误率过高)、95(不可控 ECC 错误)、63(ECC 页面退役/行重映射记录事件)、94(行重映射失败后的可控 ECC 错误隔离)、137(不可纠正的 NVLink 错误)、140(未恢复的 ECC 错误)、13(图形引擎异常)、31(显存缺页错误)、43(GPU 停止处理)、45(前序错误触发的抢占式清理)、62(内部微控制器停止运行)、68(视频解码引擎异常)、109(上下文切换超时)、110(安全故障)、119(GSP RPC 调用超时)、120(GSP 固件内部错误)、122/123/124(固件 SPI 总线读取/写入/擦除失败)中任一 | GPUXIDWarningError |
GPU 应用级 XID 检测 | 应用程序触发的 GPU 异常(越界访问显存、ECC 记录失败等) | 解析 GPU 系统日志中的 XID 错误码,匹配应用级错误码集合 | 检测到 XID 13、31、43、45、63、68、94(同时属于警告类,触发时会同时产生 Event 并将 GPUXIDWarningError 置为 True)或 64(仅属于应用级,只产生 Event,不影响节点 Condition)中任一 | 无(仅产生 Event:DeviceHasApplicationXidError) |
GPU 忽略 XID 检测 | 已知良性事件 | 命中忽略错误码集合后直接丢弃,不产生日志解析结果 | 检测到 XID 141 | 无(不产生任何告警或事件) |
GPU 其他 XID 检测 | 未归入以上任何分类的新增错误码 | 解析 GPU 系统日志中的 XID 错误码,未命中以上错误码集合时兜底捕获 | 检测到上述以外的任意 XID 错误码 | 无(仅产生 Event:DeviceHasOtherXidError) |
说明:
致命、警告两类为 permanent 规则,触发后对应 Condition 置为 True 且长期保留,需要重启 NPD 组件才能清除;应用级、兜底两类为 temporary 规则,仅产生一次性 Event,不会体现在节点 Condition 中;忽略类命中后直接丢弃,不产生任何告警或事件。
海光 DCU 硬件检测
NPD 通过海光官方管理工具 hy-smi 主动轮询 DCU 硬件计数器,并解析系统日志中的海光 XID/SXID 错误码,双通道检测 DCU 硬件问题。使用该能力需要节点已安装海光 DCU 驱动及 hy-smi 管理工具。
主动轮询检测:
检测项 | 检测方式 | 默认阈值 | 默认检测周期 | 对应 Condition |
DCU 温度检测 | 读取 DCU 温度传感器(取最高温度点) | 超过 90℃ | 15 秒 | HygonDCUHighTemp |
DCU ECC 错误检测 | 读取 DCU 各硬件模块的 ECC 错误计数 | 不可纠正错误任意新增,或可纠正错误检测周期内新增超过 30、或单比特错误率超过阈值 | 30 秒 | HygonDCUUncorrectableErr、HygonDCUHighSBERate |
HSL 互联检测 | 读取 DCU 间高速互联(HSL)链路状态 | CRC 错误检测周期内新增超过 10 | 60 秒 | HygonHySwitchError |
PCIe 链路检测 | 读取 DCU 与主机间的 PCIe 链路状态 | 链路降级或丢失 | 30 秒 | HygonDCUPCIeLinkLost |
海光 DCU XID 日志检测:
dcuXidMonitor 解析海光 DCU 日志中形如
hycu<设备地址> hycu: (serial:xxx) XID: <错误码>, info: <描述> 的记录,覆盖 DCU 硬件 RAS(可靠性、可用性、可服务性)模块、温度、驱动、固件等各类故障,同一 Condition/Event 可能对应多个错误码:检测项 | 检测对象 | 检测方式 | 触发条件 | 对应 Condition |
DCU 不可纠正 RAS 错误检测 | DCU 各硬件模块(显存控制器、图形引擎、DMA 控制器、内存集线器、互联总线等)的不可纠正错误 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 2、4、6、8、10、12、14、16、18、30、82 中任一 | HygonDCUUncorrectableErr |
DCU 高温检测(日志) | DCU 温度过高 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 50 或 301 中任一 | HygonDCUHighTemp |
DCU 隔离检测 | DCU 因连续不可恢复错误被驱动主动隔离 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 51 | HygonDCUIsolation |
DCU 设备丢失检测(日志) | DCU 驱动初始化失败 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 190 | HygonDCUDeviceLost |
DCU PCIe 链路丢失检测(日志) | DCU 与主机间 PCIe 链路丢失 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 160 | HygonDCUPCIeLinkLost |
DCU 驱动错误检测 | DCU 内部控制器超时、驱动加载失败、微引擎控制器错误、图形计算单元 Harvest 事件 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 76、77、87、112、124 中任一 | HygonDCUDriverError |
DCU ECC 页面退役检测 | DCU 显存 ECC 页面修复事件、行重映射记录失败 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 120 或 122 中任一 | HygonDCUEccPageRetire |
DCU 高 SBE 错误率检测 | DCU 单比特 ECC 错误率过高(不可纠正错误的早期预警) | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 130 | HygonDCUHighSBERate |
DCU 虚拟机故障检测 | 用户态应用非法访问 DCU 显存 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 81 | HygonDCUVMFault |
DCU 固件错误检测 | DCU 板卡 VBIOS 启动/加载失败、SMU 固件初始化异常 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 200、201、300 中任一 | HygonDCUFirmwareError |
DCU 可纠正 RAS 错误检测 | DCU 各硬件模块的可纠正错误 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 1、3、5、7、9、11、13、15、17、19 中任一 | 无(仅产生 Event:DCUHasCorrectableRASError) |
DCU MEC 警告检测 | DCU 微引擎控制器警告,严重程度低于驱动错误 | 解析 DCU 日志中的 XID 错误码 | 检测到 XID 111 | 无(仅产生 Event:DCUMECWarning) |
DCU 其他 XID 检测 | 未归入以上任何分类的新增错误码 | 解析 DCU 日志中的 XID 错误码,未命中以上错误码集合时兜底捕获 | 检测到上述以外的任意 DCU XID 错误码 | 无(仅产生 Event:DCUHasOtherXidError) |
说明:
前 10 项为 permanent 规则,触发后对应 Condition 置为 True 且长期保留,需要重启 NPD 组件才能清除;后 3 项为 temporary 规则,仅产生一次性 Event,不会体现在节点 Condition 中。
海光 HySwitch SXID 日志检测:
dcuSxidMonitor 解析海光日志中形如
hyfm: SXID: <错误码> <描述>(HFM 管理任务上报)或 hsw<设备地址>: SXID: <错误码> <描述>(HySwitch 硬件直接上报)的记录,用于检测多 DCU 互联架构中 HySwitch 互联芯片及 HFM(HySwitch Fabric Manager)管理任务的故障,故障会导致整节点的 DCU 资源不可用:检测项 | 检测对象 | 检测方式 | 触发条件 | 对应 Condition |
HySwitch 致命错误检测 | HySwitch 驱动加载失败、寄存器读取超时、HSL 链路不可纠正错误、内部控制核心故障、PCIe 链路丢失,以及 HFM 任务检测到的驱动加载失败、数量不匹配、建链失败、复位失败、寄存器读取失败、DCU 数量不符、VBIOS 不支持 HSL 等故障 | 解析 HySwitch/HFM 日志中的 SXID 错误码 | 检测到 SXID 20、200、201、204、206、207、251、253、255、257、259、261、262、263、264、265 中任一 | HygonHySwitchError |
HySwitch 警告检测 | HySwitch 固件更新结果通知、固件与驱动版本匹配校验结果、HSL 链路可纠正错误 | 解析 HySwitch/HFM 日志中的 SXID 错误码 | 检测到 SXID 202、203、205 中任一 | HygonHySwitchWarning |
HySwitch 其他 SXID 检测 | 未归入以上任何分类的新增错误码 | 解析 HySwitch/HFM 日志中的 SXID 错误码,未命中以上错误码集合时兜底捕获 | 检测到上述以外的任意 SXID 错误码 | 无(仅产生 Event:HySwitchOtherSXidError) |
说明:
致命、警告两类均为 permanent 规则,触发后对应 Condition 置为 True 且长期保留,需要重启 NPD 组件才能清除;兜底类为 temporary 规则,仅产生一次性 Event。SXID 200~207 由 HySwitch 硬件直接上报,SXID 20、251~265 由 HFM 管理任务上报,两者共用同一套 Condition。
附录
Node Conditions
安装 NPD 插件后,会在节点中增加以下特定的 Conditions:
系统与运行时 Conditions
Condition Type | 默认值 | 描述 |
KernelDeadlock | False | 内核是否存在死锁 |
ReadonlyFilesystem | False | 文件系统是否只读 |
DiskReadOnly | False | 磁盘挂载是否变为只读 |
XFSError | False | 是否存在 XFS 元数据 I/O 错误 |
FDPressure | False | 主机文件描述符数量是否达到最大值的80% |
FDProblem | False | 文件描述符是否异常 |
CustomPIDPressure | False | 当前节点 PID 数是否达到最大值的90% |
ThreadPressure | False | 系统线程数是否达到最大值的90% |
ConntrackProblem | False | conntrack 表用量是否异常 |
ProcessProblem | False | 全机持续处于 D 状态的进程数量是否超过阈值 |
SystemLoadProblem | False | 系统负载是否异常 |
MtuCacheProblem | False | MTU 缓存是否异常 |
NetDeviceProblem | False | 网络设备是否异常 |
NetIpv4TcpTimeStampProblem | False | TCP 时间戳设置是否异常 |
FrequentUnregisterNetDevice | False | 网络设备是否频繁注销 |
NTPProblem | False | NTP 时间同步服务是否正常运行 |
OverlayDiskPressure | False | Overlay 磁盘空间是否不足 |
StuckProcess | False | 是否存在 D 状态进程超过 120s |
StoppedProcess | False | 是否存在被 SIGSTOP 挂起(T 状态)的进程超过 120s |
CorruptDockerOverlay2 | False | Docker Overlay2 是否存在问题 |
ConnectApiServer | False | 是否能正常连接 API Server |
PLEGNotHealthy | False | PLEG 是否健康 |
KubeletRootDirMismatch | False | kubelet root-dir 配置变更后是否存在存量 Pod 挂载旧路径卷 |
容器运行时与 Kubelet Conditions
Condition Type | 默认值 | 描述 |
FrequentKubeletRestart | False | Kubelet 是否在20min 内重启超过5次 |
FrequentDockerRestart | False | Docker 是否在20min 内重启超过5次 |
FrequentContainerdRestart | False | Containerd 是否在20min 内重启超过5次 |
KubeletProblem | False | Kubelet service 是否 Running |
KubeletUnhealthy | False | Kubelet 健康检查是否通过 |
DockerdProblem | False | Docker service 是否 Running(若节点运行时为 Containerd,则一直为 False) |
ContainerdProblem | False | Containerd service 是否 Running(若节点运行时为 Docker,则一直为 False) |
ContainerRuntimeUnhealthy | False | 容器运行时是否健康 |
ContainerRuntimeInterfaceUnhealthy | False | CRI 接口是否健康 |
ContainerdRuntimeUnhealthy | False | Containerd 运行时是否健康 |
HasGhostContainer | False | 是否存在幽灵容器进程 |
NVIDIA GPU Conditions
在装有 NVIDIA GPU 的节点上,NPD 会注册以下 Conditions:
Condition Type | 默认值 | 描述 |
GPUXIDFatalError | False | GPU 是否存在致命 XID 错误 |
GPUXIDWarningError | False | GPU 是否存在警告级 XID 错误 |
GPUDeviceLost | False | GPU 设备是否丢失/不可访问 |
GPUDoubleBitEccError | False | GPU 是否存在双比特 ECC 错误 |
GPUHighSingleBitEccError | False | GPU 单比特 ECC 错误率是否超阈值 |
GPUEccModeError | False | GPU ECC 模式是否异常(已禁用或需重启启用) |
GPUTempError | False | GPU 温度是否超阈值 |
GPUPowerError | False | GPU 电源线缆是否接触不良 |
GPUPCIeError | False | GPU PCIe 链路是否异常 |
GPUNvlinkError | False | GPU NVLink 是否异常 |
GPUInfoROMCorrupted | False | GPU InfoROM 是否损坏 |
GPUPendingRetiredPages | False | GPU 是否存在待退役页面 |
GPURemappingRowsError | False | GPU 行重映射是否存在错误 |
海光 DCU Conditions
在装有海光 DCU 设备的节点上,NPD 会注册以下 Conditions(需节点安装海光管理工具 hy-smi):
Condition Type | 默认值 | 描述 |
HygonDCUDeviceLost | False | DCU 设备丢失或初始化失败 |
HygonDCUHighTemp | False | DCU 温度过高 |
HygonDCUUncorrectableErr | False | DCU 不可纠正 RAS 错误 |
HygonDCUIsolation | False | DCU 设备被隔离 |
HygonDCUPCIeLinkLost | False | DCU PCIe 链路丢失 |
HygonDCUDriverError | False | DCU 驱动或固件错误 |
HygonDCUHighSBERate | False | DCU 单比特 ECC 错误率过高 |
HygonDCUEccPageRetire | False | DCU ECC 页面退役 |
HygonDCUVMFault | False | DCU 虚拟机故障 |
HygonDCUFirmwareError | False | DCU 固件错误(通过 XID 检测) |
HygonHySwitchError | False | HySwitch 交换芯片严重错误(通过 SXID 检测) |
HygonHySwitchWarning | False | HySwitch 交换芯片警告(通过 SXID 检测) |
NVIDIA GPU XID 错误码含义
以下为 xidMonitor 检测到的各 NVIDIA GPU XID 错误码具体含义,检测规则与对应 Condition/Event 详见「检测项说明 - GPU(NVIDIA)硬件检测」。
XID | 分类 | 含义 |
13 | 警告 / 应用级 | 图形引擎异常(Graphics Engine Exception),常见于应用越界访问显存 |
31 | 警告 / 应用级 | GPU 显存缺页错误(GPU memory page fault),通常是应用越界访问导致 |
43 | 警告 / 应用级 | GPU 停止处理(GPU stopped processing),常伴随驱动或应用崩溃 |
45 | 警告 / 应用级 | 因前序错误触发的抢占式清理,通常是其他错误码的伴生现象 |
48 | 警告 | 显存双比特不可纠正 ECC 错误,属于硬件级严重问题 |
62 | 警告 | GPU 内部微控制器停止运行 |
63 | 警告 / 应用级 | ECC 页面退役或行重映射记录事件(尚未失败) |
64 | 应用级 | ECC 页面退役或行重映射记录失败,严重程度高于错误码 63 |
68 | 警告 / 应用级 | 视频解码引擎(NVDEC)异常 |
74 | 致命 | NVLink 错误,常见于多卡高速互联训练场景 |
79 | 致命 | GPU 从 PCIe 总线上掉线,属于硬件级严重故障 |
92 | 警告 | 单比特 ECC 错误率过高,属于早期预警信号 |
94 | 警告 / 应用级 | 行重映射失败后触发的可控 ECC 错误隔离 |
95 | 警告 | 不可控 ECC 错误,故障可能已扩散影响计算结果正确性 |
109 | 警告 | 上下文切换超时(Context Switch Timeout) |
110 | 警告 | 安全故障,如显存加密或信任区异常 |
119 | 警告 | GPU 系统处理器(GSP)RPC 调用超时,通常是驱动或固件通信异常 |
120 | 警告 | GSP 固件内部错误 |
122 | 警告 | 固件 SPI 总线读取失败 |
123 | 警告 | 固件 SPI 总线写入失败 |
124 | 警告 | 固件 SPI 总线擦除失败 |
137 | 警告 | 不可纠正的 NVLink 错误 |
140 | 警告 | 未恢复的 ECC 错误 |
141 | 忽略 | 已知良性事件,不产生任何告警 |
说明:
错误码 13、31、43、45、63、68、94 同时属于警告类和应用级;触发时会同时产生一次性 Event,并将对应的警告类 Condition 置为 True。错误码 64 仅属于应用级,只产生 Event,不会影响节点 Condition。未列出的其他错误码统一归为兜底分类,仅产生一次性 Event,用于发现新出现的未分类故障码。
海光 DCU XID 错误码含义
以下为 dcuXidMonitor 检测到的各海光 DCU XID 错误码具体含义,检测规则与对应 Condition/Event 详见「检测项说明 - 海光 DCU 硬件检测」。
XID | 严重程度 | 含义 |
1、3、5、7、9、11、13、15、17、19 | 仅监控 | DCU 各硬件模块(显存控制器、图形引擎、DMA 控制器、内存集线器、互联总线等)的可纠正错误 |
2、4、6、8、10、12、14、16、18、30、82 | 致命 | DCU 各硬件模块的不可纠正错误,计算结果可能已受影响 |
50 | 致命 | DCU 温度过高 |
51 | 致命 | DCU 因连续不可恢复错误被驱动主动隔离 |
160 | 致命 | DCU 与主机间 PCIe 链路丢失 |
190 | 致命 | DCU 驱动初始化失败 |
200、201 | 致命 | DCU 板卡 VBIOS 启动或加载失败 |
300 | 致命 | DCU SMU 固件初始化异常 |
76、77 | 严重 | DCU 内部控制器(QCM/HDP)操作超时 |
87 | 严重 | DCU 驱动加载失败 |
112 | 严重 | DCU 微引擎控制器(MEC)错误 |
124 | 严重 | DCU 图形计算单元 Harvest 事件 |
81 | 严重 | DCU 虚拟机故障,通常由用户态应用非法访问显存导致,重启相关业务即可清除 |
111 | 预警 | DCU 微引擎控制器(MEC)警告,严重程度低于错误码 112 |
120 | 预警 | DCU 显存 ECC 页面修复事件(自愈机制生效) |
122 | 预警 | DCU 显存行重映射记录失败,严重程度高于错误码 120 |
130 | 预警 | DCU 单比特 ECC 错误率过高,属于不可纠正错误的早期预警 |
301 | 预警 | DCU 温度临界警告 |
说明:
未列出的其他 DCU XID 错误码统一归为兜底分类,仅产生一次性 Event,用于发现新出现的未分类故障码。
海光 HySwitch SXID 错误码含义
以下为 dcuSxidMonitor 检测到的各海光 HySwitch SXID 错误码具体含义,检测规则与对应 Condition/Event 详见「检测项说明 - 海光 DCU 硬件检测」。
SXID | 严重程度 | 含义 |
20、200 | 致命 | HySwitch 驱动加载失败 |
201 | 致命 | 读取 HySwitch 寄存器超时 |
204 | 致命 | HSL 互联链路发生不可纠正错误 |
206 | 致命 | HySwitch 内部控制核心故障 |
207 | 致命 | HySwitch 芯片 PCIe 链路丢失 |
202 | 预警 | HySwitch 固件更新结果通知 |
203 | 预警 | HySwitch 固件与驱动版本匹配校验结果 |
205 | 预警 | HSL 互联链路发生可纠正错误 |
251 | 致命 | HFM 任务检测到 HySwitch 驱动加载失败 |
253 | 致命 | HFM 任务检测到 HySwitch 数量与配置不匹配 |
255 | 致命 | HFM 任务检测到 HySwitch 建链失败 |
257 | 致命 | HFM 任务检测到 HySwitch 复位失败 |
259 | 致命 | HFM 任务在无 DCU 驱动情况下尝试复位 DCU 出错 |
261 | 致命 | HFM 任务检测到整机复位次数达到上限 |
262 | 致命 | HFM 任务读取 DCU 寄存器失败,可能存在掉卡风险 |
263 | 致命 | HFM 任务读取 DCU 或 HySwitch 数量失败 |
264 | 致命 | HFM 任务检测到 DCU 数量与预期不符 |
265 | 致命 | HFM 任务检测到部分 DCU 的 VBIOS 不支持 HSL 互联 |
说明:
SXID 200~207 由 HySwitch 硬件直接上报,SXID 20、251~265 由 HFM 管理任务上报,两者共用同一套 Condition。未列出的其他 SXID 错误码统一归为兜底分类,仅产生一次性 Event。