一、部署在集群内的 Kubernetes 对象
| Kubernetes 对象名称 | 类型 | 请求资源 | 所属 Namespace |
| node-healing-controller | Deployment | CPU: 100mMemory: 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. 单击完成即可创建组件。
七、配置自愈策略
安装组件后,需要创建 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-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 支持 40 种 Condition 类型的自愈策略,在配置 unhealthyConditions 时,type 字段需填写以下故障类型名称:
十、内核/系统类(7 种)
| 故障类型 | 说明 | 自愈策略 |
| KernelDeadlock | 内核死锁 | 完整流程 |
| ReadonlyFilesystem | 文件系统只读 | 隔离+排空+恢复 |
| StuckProcess | 进程卡死 | 隔离+排空+恢复 |
| ProcessProblem | 大规模 D 状态进程 | 隔离+排空+恢复 |
| XFSError | XFS 文件系统错误 | 隔离+排空+恢复 |
| DiskReadOnly | 磁盘只读 | 隔离+排空+恢复 |
| NetDeviceProblem | 网卡硬件故障 | 仅隔离+排空 |
十一、资源压力类(7 种)
| 故障类型 | 说明 | 自愈策略 |
| CustomPIDPressure | 自定义 PID 压力 | 隔离+排空+恢复 |
| FDPressure | 文件描述符压力 | 隔离+排空+恢复 |
| ThreadPressure | 线程压力 | 隔离+排空+恢复 |
| SystemLoadProblem | 系统负载问题 | 隔离+排空+恢复 |
| OverlayDiskPressure | Overlay 磁盘压力 | 隔离+排空+恢复 |
| FDProblem | FD 泄露 | 隔离+排空+恢复 |
| ConntrackProblem | Conntrack 表满 | 隔离+排空+恢复 |
十二、服务健康类(8 种)
| 故障类型 | 说明 | 自愈策略 |
| ContainerdProblem | Containerd 服务异常 | 完整流程 |
| ContainerRuntimeInterfaceUnhealthy | CRI 不健康 | 完整流程 |
| ContainerRuntimeUnhealthy | 运行时不健康 | 完整流程 |
| ContainerdRuntimeUnhealthy | Containerd 运行时不健康 | 完整流程 |
| DockerdProblem | Docker 服务异常 | 完整流程 |
| KubeletProblem | Kubelet 服务异常 | 完整流程 |
| HasGhostContainer | 存在僵尸容器 | 完整流程 |
| CorruptDockerOverlay2 | Docker Overlay2 存储损坏 | 完整流程 |
十三、K8s 组件扩展类(6 种)
| 故障类型 | 说明 | 自愈策略 |
| ConnectApiServer | 无法连接 API Server | 完整流程 |
| PLEGNotHealthy | PLEG 不健康 | 完整流程 |
| KubeletUnhealthy | Kubelet 不健康 | 完整流程 |
| FrequentKubeletRestart | Kubelet 频繁重启 | 隔离+恢复 |
| FrequentDockerRestart | Docker 频繁重启 | 隔离+恢复 |
| FrequentContainerdRestart | Containerd 频繁重启 | 隔离+恢复 |
十四、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 错误 | 完整流程 |
注意:说明:
十五、监控指标
Node-Healing 组件暴露 Prometheus 指标,用于监控自愈系统的运行状态:
| 指标名称 | 类型 | 说明 |
| component_request_duration_millisecond | Histogram | 组件请求耗时(毫秒) |
| controller_request_total | Counter | 控制器请求总数 |
| controller_request_duration_millisecond | Summary | 控制器请求耗时,提供 P25/P50/P75/P90/P99 分位数 |
十六、相关文档
·NodeProblemDetectorPlus 说明
·GPU 故障检测与自愈