当节点发生异常时,云容器引擎会通过异常诊断、恢复决策,进而执行恢复任务,实现节点的故障恢复。本文主要介绍故障恢复的适用场景及恢复流程。
前提条件
部分诊断项目依赖node-problem-detecto插件和事件中心,请提前正确安装NPD和事件中心。
诊断条件
云容器引擎会监控节点的健康状态,依据节点的运行状况(Condition)动态决策是否可以启动节点恢复流程。通过执行 kubectl describe node
命令,检查节点的Condition字段,可以获取详细的运行状态信息。一旦检测到节点状态异常,并且异常状态持续时间超过了预设的阈值(即故障持续达到一定时间),在云容器引擎控制台可以触发节点恢复机制,修复节点故障,确保集群的稳定性和高可用性。
检测项目 | 描述 | 检测来源 | 故障等级 | 阈值时间 | 恢复行为 |
---|---|---|---|---|---|
KubeletNotReady(PLEG is not healthy) | PLEG健康检查失败或运行时异常,导致节点NotReady。 | kubernetes | 高 | 3min | 重启containerd或Docker。 |
NodeStatusUnknown(Kubelet stopped posting node status) | kubelet意外停止工作,导致节点NotReady。 | kubernetes | 高 | 3min | 重启kubelet。 |
RuntimeOffline | containerd或Docker停止工作,节点不可用。 | node-problem-detector | 高 | 3min | 重启containerd或Docker。 |
NTPProblem | 时间同步服务异常。 | node-problem-detector | 高 | 30s | 重启ntpd或chronyd。 |
ReadonlyFilesystem | 节点文件系统变为只读。 | node-problem-detector | 高 | 90s | 用户自行重启节点实例。 |
SystemdOffline |
Systemd状态异常,无法启动、销毁容器。 | node-problem-detector | 高 | 90s | 用户自行重启节点实例。 |
恢复流程
1、当节点运行异常,并持续一段时间,云容器引擎将判断节点状态,与诊断条件进行对比。控制台会将符合诊断条件的异常节点进行展示,用户可以选择一个或多个节点进行故障恢复。
2、节点故障恢复会以任务形式执行,期间会形成任务事件,查看恢复进度:
- 当恢复任务完成,异常状态解除,节点将恢复运行状态;
- 当恢复任务完成,节点状态依旧异常,事件将体现恢复失败,可以提交工单进行手动修复。
说明
同一节点池中的多个异常节点,故障恢复将以串行方式执行。期间一个节点恢复失败,云容器引擎将停止对该节点池其余异常节点进行恢复;
多个节点池之间可以并行进行故障恢复。
恢复事件
故障恢复过程中,会将相应操作以任务事件形式记录。可以在控制台 故障恢复窗口查看恢复事件。事件类型包括:
事件 | 详细描述 |
---|---|
NODE_REPAIR_START | 故障恢复开始 |
NODE_REPAIR_DIAGNOSE_ISSUE | 故障诊断确认 |
NODE_REPAIR_IGNORE | 故障恢复跳过,比如主机示例异常、故障未达到阈值时间 |
NODE_REPAIR_ACTION | 执行故障恢复操作 |
NODE_REPAIR_FAILED | 故障恢复失败,可以提交工单进行手动修复 |
NODE_REPAIR_SUCCEED | 故障恢复成功 |