组件介绍
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/v1kind: ClusterRolemetadata:name: node-healing-rolerules:- 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/v1kind: NodeHealermetadata:name: cluster-node-healerspec:# 节点选择器nodeSelector:matchLabels:node-healing.tke.cloud.tencent.com/belong-to: cluster-node-healercloud.tencent.com/provider: tencentcloud# 引用自愈模板machineHealingTemplate:name: "default-healing-template"kind: "MachineHealingTemplate"apiVersion: "node.healing.tke.cloud.tencent.com/v1"# 监控的异常条件unhealthyConditions:- type: KernelDeadlockenableCheck: trueenableHealing: truedurationTime: "5m"priority: 100- type: KubeletProblemenableCheck: trueenableHealing: truedurationTime: "5m"priority: 85# 限流策略nodeHealingPolicy:maxHealNodesPerDay: 10maxHealNodesPerHour: 3maxHealConcurrency: 2minNodeCoolingMinutes: 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 分位数 |
相关文档