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

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

本文介绍了节点自动修复的工作原理、修复操作触发时、应用的限制以及如何监视修复事件。

AKS 如何检测未就绪的节点

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

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

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

自动修复的工作原理

注释

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

如果 AKS 检测到某个节点已持续至少五分钟处于不健康状态,AKS 将执行以下操作:

  1. AKS 重启节点。
  2. 如果节点在重启后仍处于不健康状态,AKS 会对该节点重新制作映像。
  3. 如果节点在重新映像后仍处于不正常状态,且该节点是 Linux 节点,AKS 会重新部署该节点。

如果节点仍处于异常状态,AKS 最多会重试三次重启、重装映像和重新部署这一流程。 整个自动修复过程最多可能需要一小时才能完成。

生产注意事项

节点自动修复是一种核心复原机制,但将其与工作负荷级复原做法相结合:

  • 通过多个副本运行关键工作负载。
  • 使用 PodDisruptionBudgets 和就绪情况探测来减少用户可见的影响。
  • 监视修复活动和错误事件,以检测重复的节点问题。
  • 将自动修复计时纳入 SLO/SLA 和事件响应规划。

局限性

AKS 节点自动修复是一项尽最大努力的服务。 AKS 并不保证在所有情况下节点都能恢复到健康状态。 如果节点仍处于不健康状态,请进行手动排查。 有关详细信息,请参阅 “节点 NotReady 状态疑难解答”。

在以下情况下,AKS 可能无法执行自动修复:

  • 网络配置错误可防止报告节点状态。
  • 节点未能注册为健康节点。
  • 节点具有以下任一污点:
    • node.cloudprovider.kubernetes.io/shutdown
    • ToBeDeletedByClusterAutoscaler
  • 某个节点正在升级,并带有以下注解:
    • "cluster-autoscaler.kubernetes.io/scale-down-disabled": "true"
    • "kubernetes.azure.com/azure-cluster-autoscaler-scale-down-disabled-reason": "upgrade"

使用 Kubernetes 事件监视节点自动修复

AKS 执行节点自动修复时,它会从 aks-auto-repair 源发出 Kubernetes 事件。 自动修复发生时,节点对象上会显示以下事件。

若要了解有关在 Kubernetes 事件上访问、存储和警报的详细信息,请参阅 使用 Kubernetes 事件进行 AKS 故障排除

原因 事件消息 DESCRIPTION
NodeRebootStart 由于 NotReady 状态持续超过五分钟,节点自动修复正在启动重启操作。 当重启即将在节点上执行时,此事件会通知你。 此操作是整个节点自动修复序列中的第一个操作。
NodeRebootEnd 节点自动修复的重新启动操作已完成。 在节点上完成重启后发出。 此事件不指示执行重启后节点的运行状况(正常或不正常)。
NodeReimageStart 由于 NotReady 状态持续超过 5 分钟,节点自动修复正在启动重新映像操作。 当即将在你的节点上执行重新映像操作时,此事件会通知你。
NodeReimageEnd 节点自动修复的重置映像操作已完成。 在节点上完成重置映像后发出。 此事件不指示执行重镜像后节点的运行状况(正常或不正常)。
节点重新部署开始 由于 NotReady 状态持续超过 5 分钟,节点自动修复正在启动重新部署操作。 当重新部署即将在节点上执行时,此事件会通知你。 重新部署是节点自动修复序列中的最后一个操作。
节点重新部署结束 节点自动修复的重新部署操作已完成。 在节点上完成重新部署后发出。 此事件不指示执行重新部署后节点的运行状况(正常或不正常)。

如果在节点自动修复期间发生错误,AKS 会发出以下带有逐字错误消息的事件。 有关详细信息,请参阅 排查常见节点自动修复错误

注释

以下事件消息中的错误代码因报告的错误而异。

原因 事件消息 DESCRIPTION
NodeRebootError 节点自动修复重启操作由于操作失败而失败。 请参阅此处的错误详细信息:错误代码 重启操作出错时发出。
NodeReimageError 节点自动修复重镜像操作因运行失败而未能完成。 请参阅此处的错误详细信息:错误代码 重镜像操作出错时发出。
节点重新部署错误 节点自动修复重新部署操作由于操作失败而失败。 请参阅此处的错误详细信息:错误代码 重新部署操作出错时发出。