托管节点池节点自动恢复

托管节点池自动监控节点状态,确保节点正常运行。当节点发生异常时,ACK会自动执行恢复操作。将节点池设置为托管模式会为所有节点同时开启自动恢复功能。本文介绍节点自动恢复的应用场景和处理流程。

前提条件

触发条件

重要

当您打开了必要时重启节点以修复CVE漏洞开关,节点自动恢复的过程中则可能涉及节点的排水、替盘等操作,建议将数据保存在数据盘中。

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

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

检测项目

描述

风险等级

阈值时间

自动恢复行为

KubeletNotReady(KubeletHung)

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

180s

  1. 重启kubelet。

  2. 如果打开了必要时重启节点以修复CVE漏洞开关,则重启ECS实例。

KubeletNotReady(PLEG)

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

180s

  1. 重启containerd或Docker。

  2. 重启kubelet。

  3. 如果打开了必要时重启节点以修复CVE漏洞开关,则重启ECS实例。

KubeletNotReady(SandboxError)

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

180s

  1. 删除对应的Sandbox容器。

  2. 重启kubelet。

RuntimeOffline

containerd或Docker停止工作,节点不可用。

90s

  1. 重启containerd或Docker。

  2. 如果打开了必要时重启节点以修复CVE漏洞开关,则重启ECS实例。

NTPProblem

时间同步服务(ntpd或chronyd)异常。

10s

重启ntpd或chronyd。

SystemdOffline

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

90s

如果打开了必要时重启节点以修复CVE漏洞开关,则重启ECS实例。

ReadonlyFilesystem

节点文件系统变为只读。

90s

如果打开了必要时重启节点以修复CVE漏洞开关,则重启ECS实例。

恢复流程

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

重要

节点诊断依赖NPD组件和事件中心。使用自愈功能前,请确保已正确安装NPD和事件中心。具体操作,请参见事件监控

一个完整的恢复流程中,节点会在以下状态流转。

  • 正常:当前节点不存在可被发现的故障。

  • 故障:当前节点发现故障。

  • 恢复失败:当前节点无法恢复。

节点自动恢复.png

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

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

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

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

说明
  • 如果集群中存在多个节点池,节点池之间的节点自动恢复可以并行执行。

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

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

自动恢复事件

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

内容

级别

详细描述

NodeRepairStart

Normal

节点开始恢复。

NodeRepairAction

Normal

节点恢复操作,例如重启kubelet。

NodeRepairSucceed

Normal

节点恢复成功。

NodeRepairFailed

Warning

节点恢复失败。

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

NodeRepairIgnore

Normal

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

常见问题

自动恢复失败怎么办?

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

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

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

如果托管节点池中的某个节点需要暂时忽略自动恢复,您可以为该节点添加以下Label。

alibabacloud.com/repair.policy=disable

相关文档

如果您想通过移除故障节点并重新添加的方式解决问题,请在容器服务管理控制台的节点池页面操作。详细信息,请参见移除节点添加已有节点

请勿执行以下操作:

  • 通过kubectl delete node方式移除节点。

  • 通过ECS控制台、ESS控制台移除和添加节点。