开启节点自愈

节点池开启托管能力后,支持启用节点自愈功能,即由ACK自动监控节点状态,并在节点发生异常时自动执行自愈任务,以简化节点运维工作。但由于故障的复杂性,自愈任务无法修复所有的故障场景,部分复杂故障可能仍需人工修复。

前提条件

已开启事件中心,以接收节点池的告警事件,并安装ack-node-problem-detector,以检测节点的异常情况,请参见事件监控

操作步骤

您可以在新增或存量节点池中开启托管节点池配置。如果同时打开了当节点故障时重启节点开关,节点自愈过程中可能涉及节点的排水、替盘等操作。建议将业务数据保存在数据盘中。

创建节点池时开启

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面,单击创建节点池,然后勾选开启托管节点池,按需打开当节点故障时重启节点开关,并按照页面提示完成节点池的创建。

    image

    关于配置项的完整说明,请参见创建和管理节点池

存量节点池中开启

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 在节点池列表的操作列,单击目标节点池对应的更多 > 托管配置,按照页面提示勾选开启托管节点池,并选择是否打开当节点故障时重启节点开关。

    image

触发条件

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

重要

节点池会监控节点的运行状态。如果节点超过10分钟未上报节点状态,或者状态为NotReady,ACK会尝试通过重启故障节点来自愈潜在的故障。因此,节点上的Pod会被重启。

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

检测项目

描述

风险等级

阈值时间

自愈行为

KubeletNotReady(KubeletHung)

kubelet意外停止工作,导致节点NotReady。

180s

  1. 重启kubelet。

  2. 如果打开了当节点故障时重启节点开关,则重启ECS实例。

KubeletNotReady(PLEG)

PLEG健康检查失败,导致节点NotReady。

180s

  1. 重启containerdDocker。

  2. 重启kubelet。

  3. 如果打开了当节点故障时重启节点开关,则重启ECS实例。

KubeletNotReady(SandboxError)

PodSandbox not found,导致kubelet无法正常启动。

180s

  1. 删除对应的Sandbox容器。

  2. 重启kubelet。

RuntimeOffline

containerdDocker停止工作,节点不可用。

90s

  1. 重启containerdDocker。

  2. 如果打开了当节点故障时重启节点开关,则重启ECS实例。

NTPProblem

时间同步服务(ntpdchronyd)异常。

10s

重启ntpdchronyd。

SystemdOffline

Systemd状态异常,无法启动、销毁容器。

90s

如果打开了当节点故障时重启节点开关,则重启ECS实例。

ReadonlyFilesystem

节点文件系统变为只读。

90s

如果打开了当节点故障时重启节点开关,则重启ECS实例。

节点自愈事件

ACK触发节点自愈时,会将相关事件写入事件中心。您可以在集群信息页面选择运维管理 > 事件中心,查看自动恢复的记录和具体操作。您可以参见事件监控订阅相关事件。

内容

级别

详细描述

NodeRepairStart

Normal

节点开始自愈。

NodeRepairAction

Normal

节点自愈操作,例如重启kubelet。

NodeRepairSucceed

Normal

节点自愈成功。

NodeRepairFailed

Warning

节点自愈失败。请参见下文的常见问题解决。

NodeRepairIgnore

Normal

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

执行规则与流程

一个完整的节点自愈流程如下:

  1. 节点的运行状态发生变化并持续一段时间后,ACK判定该状态符合故障状态,存在节点故障。

  2. 发现节点故障时,ACK会根据故障原因触发对应的自愈任务,并记录相应的事件。

    • 自愈任务执行中,节点状态为修复中。

    • 自愈任务完成后,故障状态解除,节点恢复正常状态。

    • 自愈任务完成后,故障状态依然存在,节点会被置为恢复失败状态。

      节点处于自愈失败状态时,不会再触发自愈操作。相应的故障解除后,该节点才能再次进行自愈操作。

  • 如果集群中存在多个节点池,各节点池内的节点的自愈任务可以并行执行。

  • 如果一个节点池存在多个异常节点,自愈任务会以串行的方式逐个恢复。一旦某个节点自愈失败,ACK将停止对该节点池中其他故障节点的自愈。

常见问题

节点自愈失败怎么办?

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

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

相关文档