节点池开启托管能力后,支持启用节点自愈功能,即由ACK自动监控节点状态,并在节点发生异常时自动执行自愈任务,以简化节点运维工作。但由于故障的复杂性,自愈任务无法修复所有的故障场景,部分复杂故障可能仍需人工修复。
灵骏节点池的节点自愈,请参见开启节点自愈。
自愈机制说明
节点自愈的完整运作过程可从以下维度理解:
执行流程:从故障发现到自愈完成的端到端流程概览,包含每个步骤的触发条件与执行细节。
触发自愈的Node Condition:ACK支持自动修复的故障类型、风险等级、触发阈值及对应的自愈行为。
自愈过程中的节点状态:自愈任务执行过程中及完成后,节点的状态流转情况。
执行流程
一个完整的故障发现、故障通知与节点自愈流程如下。
| ACK通过NPD组件检查节点的异常情况。节点运行状态发生变化并持续一段时间后,ACK判定该节点存在故障。 |
| 发现故障后,ACK会产生Node Condition和Kubernetes Event。可通过事件中心告警配置接收通知。 |
| 检测到GPU异常后,ACK对故障GPU卡进行隔离。 关于GPU卡故障检测和自动隔离的详细信息请参见GPU异常检测与自动隔离。 |
| ACK会根据节点的运行状态 检测到系统与K8s组件异常,且异常持续时间超过阈值时间(即故障发生多长时间后会触发节点自愈)时,ACK将自动执行自愈任务。一个完整的节点自愈流程如下。
|
自愈任务执行说明:
如果集群中存在多个节点池,各节点池的自愈任务将串行执行。
如果一个节点池存在多个异常节点,自愈任务会以串行的方式逐个恢复。一旦某个节点自愈失败,ACK会停止对该节点池中其他故障节点的自愈。
触发自愈的Node Condition
Node Condition | 描述 | 风险等级 | 阈值时间 | 自愈行为 |
KubeletNotReady(KubeletHung) | kubelet意外停止工作,导致节点NotReady。 | 高 | 180s |
|
KubeletNotReady(PLEG) | PLEG健康检查失败,导致节点NotReady。 | 中 | 180s |
|
KubeletNotReady(SandboxError) | PodSandbox not found,导致kubelet无法正常启动。 | 高 | 180s |
|
RuntimeOffline | containerd或Docker停止工作,节点不可用。 | 高 | 90s |
|
NTPProblem | 时间同步服务(ntpd或chronyd)异常。 | 高 | 10s | 重启ntpd或chronyd。 |
SystemdOffline | Systemd状态异常,无法启动、销毁容器。 | 高 | 90s | 如果选择仅开启系统与节点组件自愈(允许异常时重启节点),则重启ECS实例。 |
ReadonlyFilesystem | 节点文件系统变为只读。 | 高 | 90s | 如果选择仅开启系统与节点组件自愈(允许异常时重启节点),则重启ECS实例。 |
自愈过程中的节点状态
自愈任务执行中,节点状态为修复中。
自愈任务完成后,故障状态解除,节点恢复正常状态。
自愈任务完成后,故障状态依然存在,节点会被置为恢复失败状态。
节点处于自愈失败状态时,不会再触发自愈操作。相应的故障解除后,该节点才能再次进行自愈操作。
使用说明
本功能需搭配事件中心使用,以接收节点池的告警事件,并安装ack-node-problem-detector(NPD),以检测节点的异常情况。详情请参见事件监控。
仅支持在ACK托管集群中使用,支持开启了托管配置的节点池。
以下处于灰度发布中的功能,灰度进度可能不同。如需使用,请提交工单一并申请。
启用节点自愈
支持在新增或存量节点池中通过托管配置开启节点自愈功能并定义其行为。
创建节点池时开启
存量节点池中开启
查看节点自愈事件
常见问题
节点自愈失败怎么办?
由于故障的复杂性,自愈任务无法修复所有的故障场景。当节点自愈任务执行失败,或者自愈执行完毕后故障并未解除,ACK会将节点标记为自愈失败状态。
如果某个节点自愈失败,在故障修复前,该节点池不会再触发自愈操作。可提交工单联系技术支持。
相关文档
推荐启用NPD,基于事件中心监控集群事件,请参见事件监控。
关于GPU故障检测的更多信息,请参见GPU异常检测与自动隔离、自助诊断GPU节点问题。
如需通过移除故障节点并重新添加的方式解决节点问题,请在容器服务管理控制台执行标准化流程,避免出现预期外行为,详见移除节点、添加已有节点。

> 开启托管(节点池)或托管配置(托管节点池),选择托管配置模式为托管节点池,按照页面提示开启节点自愈功能。