节点自愈功能
节点自愈是CCE提供的节点故障自动恢复能力。当节点发生指定类型的故障且持续时间超过阈值时,系统将自动触发自愈任务,通过重启节点等方式尝试修复故障,减少人工干预,提升集群可用性。
前提条件
高级自愈依赖以下条件:
- 已创建Kubernetes集群,且集群版本满足以下要求:
- v1.30集群:v1.30.14-r100及以上版本
- v1.31集群:v1.31.14-r60及以上版本
- v1.32集群:v1.32.13-r30及以上版本
- v1.33集群:v1.33.12-r10及以上版本
- v1.34集群:v1.34.8-r10及以上版本
- v1.35集群:v1.35.5-r10及以上版本
- v1.36集群:v1.36.2-r0及以上版本
- 其他更高版本的集群
- 安装NPD 插件(节点故障检测插件)。
注意事项
- 重启节点会导致该节点上所有Pod被驱逐或中断,请确保业务已具备高可用部署能力。
- 若自愈任务执行后故障仍未恢复,系统不会无限重试,需人工排查根因。
- 如果某个节点自愈失败,在故障修复前,该节点池不会再触发重启节点的自愈操作。
- 同一节点池内,同一时刻仅允许一个节点执行重启自愈任务。
- 节点完成重启自愈后,2小时内不再对该节点触发重启自愈。
- 裸金属节点和超节点不支持节点自愈功能。
核心原理
自愈能力由守护进程与Systemd服务管理器协同实现,整体流程如下:
- 定时健康探测:守护进程常驻后台,按预设周期向目标组件发起健康检查,探测方式包括进程存活检测和端口响应探测。
- 异常判定:当组件在连续多次探测中均未响应或返回错误状态时,守护进程判定组件异常。单次探测失败不会触发自愈,避免因网络抖动等瞬时干扰导致误重启。
- 触发自愈:判定异常后,守护进程通过调用Systemd执行服务重启,使组件自动恢复。
若开启了“系统与K8s组件异常时允许重启节点”,在组件重启未能恢复故障时,系统将进入节点级自愈流程。
自愈流程
自愈任务触发后,系统按以下步骤依次执行:
- 标记节点为修复中:将节点状态标记为“修复中”,调度器停止向该节点调度新的Pod。
- 驱逐节点Pod:为节点添加驱逐污点(Taint),触发节点上已有Pod的优雅驱逐。已配置容忍该污点的Pod不受影响。超时时间取故障节点上所有待驱逐Pod的TerminationGracePeriodSeconds最大值与10分钟中的较大值,且最长不超过30分钟。超过超时时间后,如果驱逐失败,仍会执行后续操作。
- 重启节点:对节点执行重启操作,尝试恢复故障组件。
- 确认故障是否恢复:重启完成后,系统检测故障是否已恢复。
- 恢复成功:移除驱逐污点,节点状态恢复正常,重新接受Pod调度。
- 恢复失败:节点保持异常状态,自愈任务标记为失败,需人工介入排查。
故障类型
| 故障类型 | 说明 | 阈值 | 自愈行为 |
|---|---|---|---|
| 容器网络组件异常CNIProblem | 节点网络组件异常,将影响新建Pod。 | 50s | 重启网络组件 |
| Kubelet服务异常KubeletProblem | kubelet进程不可用或运行异常,无法正常上报节点状态。 | 50s | 重启kubelet |
| 容器运行时组件异常CRIProblem | 容器运行时进程异常,导致容器无法正常创建或管理。 | 50s | 重启containerd/docker |
| KubeProxy异常KubeProxyProblem | 检测到KubeProxy运行异常。 | 50s | 重启kube-proxy |
| PodIdentityAgent异常PodIdentityAgentProblem | PodIdentityAgent状态异常,可能影响CCE插件以及依赖Pod Identity的服务运行。 | 50s | 重启pod-identity-agent |
| 故障类型 | 说明 | 阈值 | 自愈行为 |
|---|---|---|---|
| 容器网络组件异常CNIProblem | 节点网络组件异常,将影响新建Pod。 | 50s | 重启网络组件 |
| Kubelet服务异常KubeletProblem | kubelet进程不可用或运行异常,无法正常上报节点状态。 | 180s | 1. 重启kubelet(50s触发) 2. 若已开启“系统与K8s组件异常时允许重启节点”,则重启ECS实例。 |
| 容器运行时组件异常CRIProblem | 容器运行时进程异常,导致容器无法正常创建或管理。 | 180s | 1. 重启containerd/docker(50s触发) 2. 若已开启“系统与K8s组件异常时允许重启节点”,则重启ECS实例。 |
| KubeProxy异常KubeProxyProblem | 检测到KubeProxy运行异常。 | 50s | 重启kube-proxy |
| PodIdentityAgent异常PodIdentityAgentProblem | PodIdentityAgent状态异常,可能影响CCE插件以及依赖Pod Identity的服务运行。 | 50s | 重启pod-identity-agent |
| 文件系统只读ReadonlyFilesystemProblem(依赖NPD插件版本大于等于1.19.75) | 节点文件系统进入只读状态,无法执行写入操作,影响kubelet及容器运行时正常工作。 | 180s | 若已开启“系统与K8s组件异常时允许重启节点”,则重启ECS实例。 |
| systemd异常SystemdOfflineProblem (依赖NPD插件版本大于等于1.19.75) | systemd状态异常,无法启动、销毁容器。 | 180s | 若已开启“系统与K8s组件异常时允许重启节点”,则重启ECS实例。 |
| kubeletNotReady(PLEG) | PLEG健康检查失败。 | 180s | 若已开启“系统与K8s组件异常时允许重启节点”,则重启ECS实例。 |
相关文档
- 如需了解CCE节点故障检测插件的约束、安装及组件信息,请参见CCE节点故障检测。