You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
检查自愈
自定义节点检查项
复制全文
下载 pdf
自定义节点检查项
使用节点自愈功能时,如果系统预置的异常状态或检查规则无法满足您的需求,您可以基于节点 NodeCondition 信息自定义检查项。本文为您介绍自定义检查项基本概念、数据结构和参数的含义。
背景信息
什么是 NodeCondition?
在 Kubernetes 集群中,NodeCondition(节点状态条件)主要用来描述节点当前运行状态,它通过一组 “键值对 + 状态 + 时间戳” 的形式,精准反映节点的可用、就绪或资源压力等属性。Kubernetes 控制器(如 kubelet、调度器等)会持续更新这些条件,调度器也会基于 NodeCondition 决定是否将 Pod 调度到该节点。
说明
更多 NodeCondition 详情,请参见 官方文档
NodeCondition 结构
NodeCondition 的结构由以下字段组成:
字段名
含义
Type
NodeCondition 类型(如 ReadyMemoryPressure),标识要检查的节点状态。
Status
NodeCondition 状态,包括:
  • True正常
  • False异常
  • Unknown未知
Reason
状态转换的简短原因(如 KubeletNotReadyMemoryPressure)。
Message
状态转换的描述信息(如 kubelet is down: postStart hook failed)。
LastHeartbeatTime
NodeCondition 状态最后一次更新的时间戳。
LastTransitionTime
NodeCondition 状态最后一次变化的时间戳。
您可以执行kubectl describe node {node-name}命令,查看节点的 NodeCondition 信息。其中,{node-name}表示节点名称。
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
Ready True 2025-12-05T10:00:00Z 2025-12-01T08:00:00Z KubeletReady kubelet is posting ready status
MemoryPressure False 2025-12-05T10:00:00Z 2025-12-01T08:00:00Z KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False 2025-12-05T10:00:00Z 2025-12-01T08:00:00Z KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False 2025-12-05T10:00:00Z 2025-12-01T08:00:00Z KubeletHasSufficientPID kubelet has sufficient PID available
NetworkUnavailable False 2025-12-05T10:00:00Z 2025-12-01T08:00:00Z RouteCreated RouteController created all required routes
常见 NodeCondition 类型
Kubernetes 定义了一组标准的 NodeCondition 类型,覆盖节点的核心状态。
Ready(就绪状态)
这是节点最重要的 NodeCondition 类型,直接决定节点是否可调度 Pod:
  • StatusTrue:表示节点健康,kubelet 正常运行,网络/存储可用,调度器可将 Pod 调度到该节点。
  • StatusFalse:表示节点不可用(如 kubelet 宕机、网络故障),已调度的 Pod 会被驱逐,新 Pod 不会调度到该节点。
  • StatusUnknown:表示 kube-apiserver 超过node-monitor-grace-period(默认 40 秒)未收到 kubelet 心跳,视为 “失联”,调度器也会避免调度 Pod 到该节点。
Pressure(资源压力状态)
这类条件触发时,节点会进入资源压力状态,调度器会限制/禁止新 Pod 调度,kubelet 可能会触发 Pod 驱逐。
条件类型
触发场景
MemoryPressure
节点内存不足。例如:可用内存低于 kubelet 配置的阈值,如memory.available < 100Mi)。
DiskPressure
节点磁盘空间不足。例如:根分区/容器运行时分区可用空间低于阈值。
PIDPressure
节点进程数(PID)耗尽(可用 PID 数低于阈值)。
NetworkUnavailable(网络失效状态)
  • StatusTrue:表示节点网络未就绪(如 CNI 插件未配置、网络路由创建失败)。
  • StatusFalse:表示节点网络正常,Pod 可正常通信。
配置自定义检查项
操作步骤
  1. 单击左侧导航栏中的 集群
  1. 在集群列表页面,单击目标集群,进入集群管理页面。
  1. 在集群管理页面的左侧导航栏中选择 检查自愈,单击 自定义检查项,使用 YAML 代码配置检查项。
  1. 单击 保存,完成配置。
数据结构
节点检查自愈功能允许使用 YAML 代码,基于 NodeCondition 配置自定义检查项。代码示例如下:
IncidentTypeDefinitions:
- Code: "GpuHealthAbnormal"
Name: "GPU健康状态异常"
Description: "GPU卡温度过高"
ResourceType: "VkeNode"
EventProvider: "NodeCondition"
DetectionConfig:
NodeCondition:
Type: "Ready"
Status: "False"
Reason: "GpuHealthAbnormal"
Message: "GPU temperature exceeds threshold (85°C), fan speed abnormal"
- Code: "NodeNotReady"
Name: "节点未就绪"
Description: "集群节点未就绪"
ResourceType: "VkeNode"
EventProvider: "NodeCondition"
DetectionConfig:
NodeCondition:
Type: "Ready"
Status: "False"
Reason: "^KubeletNotReady$"
Message: "^kubelet is not running$"
参数说明
自定义故障代码中,可以使用的变量参数和说明,如下表所示。
参数名称
参数类型
是否必填
配置示例
参数说明
Code
String
GpuHealthAbnormal
故障码,仅支持英文大小写字母和数组。
Name
String
GPU健康状态异常
故障名称。
Description
String
GPU卡温度过高
故障描述。
ResourceType
String
VkeNode
故障资源类型,当前仅支持VkeNode,表示 VKE 集群节点故障。
EventProvider
String
NodeCondition
故障事件来源,当前仅支持NodeCondition,表示故障来源于节点事件。
DetectionConfig.NodeCondition.Type
String
Ready
Condition 类型(例如 ReadyDiskPressure 等),用于标识节点的某类状态维度。
DetectionConfig.NodeCondition.Status
String
False
Condition 状态值,取值:
  • True正常
  • False异常
  • Unknown未知
DetectionConfig.NodeCondition.Reason
String
^KubeletNotReady$
状态转换的简短原因(如KubeletNotReady)。允许通过正则表达式进行匹配。匹配成功时,将该 Condition 指定为自定义故障。
DetectionConfig.NodeCondition.Message
String
^kubelet is not running$
状态转换的详细描述(如kubelet is not running)。允许通过正则表达式进行匹配。匹配成功时,将该 Condition 指定为自定义故障。
最近更新时间:2025.12.10 11:33:39
这个页面对您有帮助吗?
有用
有用
无用
无用