节点自动恢复是指当集群托管节点池中的节点发生异常时,ACK会自动发起节点恢复操作,使节点保持正常运行状态。节点池为托管节点池或开启托管后,节点池中的节点将同时开启自动恢复功能。ACK将持续关注托管节点池中的节点状态,并根据异常的场景发起恢复操作。本文介绍节点自动恢复的场景和流程。

索引

前提条件

触发条件

重要 节点自动恢复的过程中可能涉及节点的排水、替盘等操作,建议将数据保存在数据盘中。

ACK会根据节点的运行状态(Condition)等信息判断是否发起自动恢复任务。您可以执行kubectl describe node命令,通过condition字段查看节点的运行状态。当节点的运行状况异常,且异常持续时间超过阈值时间时,ACK会发起节点自动修复行为。

具体触发条件如下表所示。

检测项目描述风险等级阈值时间 自动修复行为
KubeletNotReady(KubeletHung)Kubelet意外停止工作,导致节点NotReady。180s
  1. 重启Kubelet。
  2. 重启ECS实例。
KubeletNotReady(PLEG)PLEG健康检查失败,导致节点NotReady。180s
  1. 重启Docker或Containerd。
  2. 重启Kubelet。
  3. 重启ECS实例。
KubeletNotReady(SandboxError)PodSandbox not found,导致Kubelet无法正常启动。180s
  1. 删除对应的Sandbox容器。
  2. 重启Kubelet。
RuntimeOfflineDocker或Containerd停止工作,节点不可用。90s
  1. 重启Docker或Containerd。
  2. 重启ECS实例。
NTPProblem时间同步服务(ntpd或chronyd)异常。10s重启ntpd或chronyd。
SystemdOfflineSystemd状态异常,无法启动、销毁容器。90s重启ECS实例。
ReadonlyFilesystem节点文件系统变为只读。90s重启ECS实例。

恢复流程

节点的自愈功能包括问题诊断、恢复决策和恢复任务。

重要 节点诊断依赖NPD组件和事件中心。使用自愈功能前,请确保已正确安装NPD和事件中心。具体操作,请参见事件监控
一个完整的恢复流程中,节点会在以下状态流转。
  • 正常:当前节点不存在可被发现的故障。
  • 故障:当前节点发现故障。
  • 修复失败:当前节点在恢复任务后无法恢复。
节点自动恢复.png
  1. 当节点的运行状态发生变化并持续一段时间后,ACK将判定该状态符合故障状态,存在节点故障。
  2. 当发现节点故障时,ACK会根据故障原因触发对应恢复任务,并记录相应的事件。
    • 当恢复任务完成后,故障状态解除,节点恢复正常状态。
    • 当恢复任务完成后,故障状态依然存在,节点会被置为修复失败状态。
说明
  • 如果集群中存在多个节点池,节点池之间的节点自动恢复可以并行执行。
  • 如果一个节点池存在多个异常节点,自动恢复会以串行的方式逐个恢复。一旦某个节点修复失败,ACK将停止对该节点池中其他故障节点的修复。
  • 当节点处于修复失败状态时,该节点不会再触发自动恢复操作。相应的故障解除后,该节点才能再次进行自动恢复操作。

自动恢复事件

ACK触发自动恢复时,会将相关的事件写入事件中心。您可以在集群信息页面选择运维管理 > 事件中心,查看自动恢复的记录和具体操作。
事件原因事件级别事件描述
NodeRepairStartNormal节点开始修复。
NodeRepairActionNormal节点修复操作,例如重启Kubelet。
NodeRepairSucceedNormal节点修复成功。
NodeRepairFailedWarning节点修复失败。

如遇相关问题,请参见常见问题

NodeRepairIgnoreNormal节点修复跳过,当ECS处于非运行状态时,不对节点进行操作。

常见问题

自动恢复失败怎么办?

由于故障的复杂性,自动恢复任务无法恢复所有的故障场景。当节点自动恢复任务执行失败,或者恢复任务执行完毕后故障并未解除,ACK会将节点标记为修复失败状态。

如果托管节点池中修复某个节点失败,在故障修复前,该节点池不会再触发自动恢复操作。您可以提交工单联系技术支持,手动修复故障。

如何忽略某节点的自动恢复?

如果托管节点池中的某个节点需要暂时忽略自动恢复,您可以为该节点添加以下Label:
alibabacloud.com/repair.policy=disable

相关文档