容器服务 Node-Healing 说明

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

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、部署在集群内的 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 故障检测与自愈

赞 (0)
上一篇 4天前
下一篇 4天前