你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Kubernetes 服务 (AKS) 节点自动修复

Azure Kubernetes 服务 (AKS) 会持续监视工作器节点的运行状况,在节点运行不正常的情况下对其进行自动修复。 Azure 虚拟机 (VM) 平台对出现问题的 VM 执行维护。 AKS 和 Azure VM 协同工作,以最大程度地减少群集的服务中断次数。

本文介绍了自动节点修复功能在 Windows 和 Linux 节点上的行为方式。

AKS 如何检查未就绪的节点

AKS 使用以下规则来确定节点是否运行不正常以及是否需要修复:

  • 节点在 10 分钟的时间范围内持续检查时报告“未就绪”状态。
  • 节点在 10 分钟内未报告任何状态。

可使用 kubectl get nodes 命令手动检查节点的运行状况状态。

自动修复的工作原理

注意

AKS 使用用户帐户“aks-remediator”启动修复操作。

如果 AKS 标识出持续 5 分钟运行不正常的节点,则 AKS 将执行以下操作:

  1. 尝试重启节点。
  2. 如果节点重启失败,AKS 会对该节点重置映像。
  3. 如果重置映像失败,并且它是 Linux 节点,AKS 将重新部署该节点。

如果自动修复失败,AKS 工程师会调查备选修正措施。

注意

如果节点上存在以下排斥,则不会触发自动修复: node.cloudprovider.kubernetes.io/shutdownToBeDeletedByClusterAutoscaler

整个自动修复过程可能需要长达一个小时才能完成。 对于每个步骤,AKS 最多重试 3 次。

节点自动排出

计划事件可发生于任何节点池中的基础 VM 上。 对于现成节点池,计划事件可能会导致节点发生“抢占”节点事件。 某些节点事件(例如“抢占”)会导致 AKS 节点自动排出尝试隔离和排出受影响的节点。 此过程允许在该节点上重新安排任何受影响的工作负载。 你可能会注意到,由于 "kubernetes.azure.com/scalesetpriority: spot",节点会收到带有 "remediator.kubernetes.azure.com/unschedulable" 的污点。

下表显示了节点事件,以及这些事件导致 AKS 节点自动排出执行的操作:

事件 说明 操作
冻结 VM 计划为暂停几秒钟。 可能会暂停 CPU 和网络连接,但不会对内存或已打开的文件造成影响。 无操作。
重新启动 VM 计划为重新启动。 VM 的非持久性内存丢失。 无操作。
重新部署 VM 计划为移动到另一个节点。 VM 的临时磁盘丢失。 隔离和排空。
Preempt 正在删除现成 VM。 VM 的临时磁盘丢失。 隔离和排空
Terminate VM 计划为删除。 隔离和排空。

限制

在很多情况下,AKS 可确定节点是否正常并尝试修复问题。 但在某些情况下,AKS 要么无法修复问题,要么无法检测到存在问题。 例如,在以下示例场景中,AKS 无法检测到问题:

  • 由于网络配置错误,未报告节点状态。
  • 节点最初无法注册为正常节点。

Node Autodrain 会尽量提供优质的服务,但不能保证在所有情况下都能完美运行

后续步骤

使用可用性区域增加 AKS 群集工作负载的高可用性。