Node-Healing 说明

最近更新时间:2026-01-14 14:48:43

我的收藏

组件介绍

Node-Healing 是 TKE 提供的节点自愈组件,能够自动检测集群中的异常节点,并根据预定义的策略执行自动化修复操作。该组件与 Node Problem Detector(NPD)配合使用,可实现从故障检测到自动修复的完整闭环。Node-Healing 支持 33 种故障类型的自愈策略,涵盖内核/系统类、资源压力类、服务健康类、K8s 组件扩展类及 GPU 监控类故障,能够有效提升集群的稳定性和可用性。

部署在集群内的 Kubernetes 对象

Kubernetes 对象名称
类型
请求资源
所属 Namespace
node-healing-controller
Deployment
CPU: 100m
Memory: 128Mi
kube-system
node-healing
ServiceAccount
-
kube-system
node-healing-role
ClusterRole
-
-
node-healing-rolebinding
ClusterRoleBinding
-
-
machinehealingtemplates.node.healing.tke.cloud.tencent.com
CRD
-
-
nodehealers.node.healing.tke.cloud.tencent.com
CRD
-
-
healingtasks.node.healing.tke.cloud.tencent.com
CRD
-
-

限制条件

Kubernetes 版本要求 >= 1.18。
需要先安装 Node Problem Detector(NPD)组件。
仅支持原生节点,不支持超级节点、第三方节点(注册节点)、普通节点的自愈操作。

组件权限

权限说明

Node-Healing 组件需要访问节点状态、创建事件、管理 CRD 资源等权限,以实现节点故障的检测和自愈操作。

权限场景

权限对象
操作权限
用途
nodes
get, list, watch, patch, update
获取节点信息、监听节点状态变化、更新节点标签和污点。
nodes/status
patch, update
修改节点状态(Condition)。
events
create, update, patch
发送事件通知集群。
pods
get, list, watch, delete
获取 Pod 信息、驱逐 Pod。
pods/eviction
create
执行 Pod 驱逐操作。
machinehealingtemplates
get, list, watch, create, update, patch, delete
管理自愈模板。
nodehealers
get, list, watch, create, update, patch, delete
管理自愈策略。
healingtasks
get, list, watch, create, update, patch, delete
管理自愈任务。

权限定义

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-healing-role
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch", "patch", "update"]
- apiGroups: [""]
resources: ["nodes/status"]
verbs: ["patch", "update"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "delete"]
- apiGroups: [""]
resources: ["pods/eviction"]
verbs: ["create"]
- apiGroups: ["node.healing.tke.cloud.tencent.com"]
resources: ["machinehealingtemplates", "nodehealers", "healingtasks"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["node.healing.tke.cloud.tencent.com"]
resources: ["healingtasks/status", "nodehealers/status"]
verbs: ["get", "update", "patch"]

使用方法

安装组件

1. 登录 容器服务控制台,选择左侧导航栏中的集群
2. 集群管理页面单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,进入组件列表页面。
4. 组件列表页面中选择新建,并在新建组件页面中勾选 Node-Healing
5. 单击完成即可创建组件。
注意:
安装 Node-Healing 前,请确保已安装 Node Problem Detector(NPD)组件。
安装完成后,需要创建 NodeHealer 资源来定义自愈策略。

配置自愈策略

安装组件后,需要创建 NodeHealer 资源来定义自愈策略:
apiVersion: node.healing.tke.cloud.tencent.com/v1
kind: NodeHealer
metadata:
name: cluster-node-healer
spec:
# 节点选择器
nodeSelector:
matchLabels:
node-healing.tke.cloud.tencent.com/belong-to: cluster-node-healer
cloud.tencent.com/provider: tencentcloud

# 引用自愈模板
machineHealingTemplate:
name: "default-healing-template"
kind: "MachineHealingTemplate"
apiVersion: "node.healing.tke.cloud.tencent.com/v1"

# 监控的异常条件
unhealthyConditions:
- type: KernelDeadlock
enableCheck: true
enableHealing: true
durationTime: "5m"
priority: 100
- type: KubeletProblem
enableCheck: true
enableHealing: true
durationTime: "5m"
priority: 85

# 限流策略
nodeHealingPolicy:
maxHealNodesPerDay: 10
maxHealNodesPerHour: 3
maxHealConcurrency: 2
minNodeCoolingMinutes: 60

为节点添加标签

# 为所有原生节点添加 belong-to 标签
kubectl label node -l node-healing.tke.cloud.tencent.com/belong-to=cluster-node-healer

支持的故障类型

Node-Healing 支持 43 种 Condition 类型的自愈策略,在配置 unhealthyConditions 时,type 字段需填写以下故障类型名称:

内核/系统类(4 种)

故障类型
说明
自愈策略
KernelDeadlock
内核死锁
完整流程
ReadonlyFilesystem
文件系统只读
完整流程
StuckProcess
进程卡死
完整流程
XFSError
XFS 文件系统错误
完整流程

资源压力类(6 种)

故障类型
说明
自愈策略
CustomPIDPressure
自定义 PID 压力
隔离+排空+恢复
FDPressure
文件描述符压力
完整流程
ThreadPressure
线程压力
隔离+排空+恢复
SystemLoadProblem
系统负载问题
隔离+排空+恢复
MemoryPressure
内存压力
完整流程
DiskPressure
磁盘压力
完整流程

服务健康类(14 种)

故障类型
说明
自愈策略
ContainerdProblem
Containerd 服务异常
完整流程
DockerdProblem
Docker 服务异常
完整流程
KubeletProblem
Kubelet 服务异常
完整流程
HasGhostContainer
存在僵尸容器
完整流程
CNIProblem
CNI 网络插件异常
完整流程
NTPProblem
NTP 时间同步异常
完整流程
NvidiaProblem
NVIDIA 驱动异常
完整流程
NetworkUnavailable
网络不可用
完整流程
CorruptDockerOverlay2
Docker Overlay2 存储损坏
完整流程
CorruptDockerImage
Docker 镜像损坏
完整流程
RuntimeUnhealthy
容器运行时不健康
完整流程
SystemctlProblem
Systemctl 服务异常
完整流程
IptablesProblem
Iptables 规则异常
完整流程
DnsNodeProblem
DNS 节点解析异常
完整流程

K8s 组件扩展类(7 种)

故障类型
说明
自愈策略
ConnectApiServer
无法连接 API Server
完整流程
PLEGNotHealthy
PLEG 不健康
完整流程
KubeletUnhealthy
Kubelet 不健康
完整流程
FrequentKubeletRestart
Kubelet 频繁重启
完整流程
FrequentDockerRestart
Docker 频繁重启
完整流程
FrequentContainerdRestart
Containerd 频繁重启
完整流程
NodeNotReady
节点 NotReady
完整流程

GPU 监控类(12 种)

故障类型
说明
自愈策略
GPUDeviceLost
GPU 设备丢失
完整流程
GPUDoubleBitEccError
GPU 双位 ECC 错误(不可纠正)
仅隔离+排空
GPUHighSingleBitEccError
GPU 单位 ECC 错误超阈值
仅隔离+排空
GPUInfoROMCorrupted
GPU InfoROM 损坏
仅隔离+排空
GPUNvlinkError
NVLink 通信错误
完整流程
GPUPCIeError
PCIe 接口异常
完整流程
GPUPendingRetiredPages
GPU 待退役内存页
完整流程
GPUPowerError
GPU 电源问题
仅隔离+排空
GPURemappingRowsError
GPU 内存行映射错误
仅隔离+排空
GPUTempError
GPU 温度过高
仅隔离+排空
GPUXIDFatalError
GPU 致命 XID 错误
仅隔离+排空
GPUXIDWarningError
GPU 警告 XID 错误
完整流程
说明:
完整流程:Cordon → Drain → Reboot → UnCordon,适用于软件或可恢复问题。
隔离+排空+恢复:Cordon → Drain → UnCordon,适用于资源压力问题。
仅隔离+排空:Cordon → Drain,适用于硬件故障,需人工介入修复。

监控指标

Node-Healing 组件暴露 Prometheus 指标,用于监控自愈系统的运行状态:
指标名称
类型
说明
component_request_duration_millisecond
Histogram
组件请求耗时(毫秒)
controller_request_total
Counter
控制器请求总数
controller_request_duration_millisecond
Summary
控制器请求耗时,提供 P25/P50/P75/P90/P99 分位数

相关文档