Azure Kubernetes 服务 (AKS) 会持续监视工作器节点的运行状况,在节点运行不正常的情况下对其进行自动修复。 Azure 虚拟机 (VM) 平台对出现问题的 VM 执行维护。 AKS 和 Azure VM 协同工作,以最大程度地减少群集的服务中断次数。
本文介绍了节点自动修复的工作原理、修复操作触发时、应用的限制以及如何监视修复事件。
AKS 如何检测未就绪的节点
AKS 使用以下规则来确定节点是否运行不正常以及是否需要修复:
可使用 kubectl get nodes 命令手动检查节点的运行状况状态。
自动修复的工作原理
注释
AKS 使用用户帐户“aks-remediator”启动修复操作。
如果 AKS 检测到某个节点已持续至少五分钟处于不健康状态,AKS 将执行以下操作:
- AKS 重启节点。
- 如果节点在重启后仍处于不健康状态,AKS 会对该节点重新制作映像。
- 如果节点在重新映像后仍处于不正常状态,且该节点是 Linux 节点,AKS 会重新部署该节点。
如果节点仍处于异常状态,AKS 最多会重试三次重启、重装映像和重新部署这一流程。 整个自动修复过程最多可能需要一小时才能完成。
生产注意事项
节点自动修复是一种核心复原机制,但将其与工作负荷级复原做法相结合:
- 通过多个副本运行关键工作负载。
- 使用 PodDisruptionBudgets 和就绪情况探测来减少用户可见的影响。
- 监视修复活动和错误事件,以检测重复的节点问题。
- 将自动修复计时纳入 SLO/SLA 和事件响应规划。
局限性
AKS 节点自动修复是一项尽最大努力的服务。 AKS 并不保证在所有情况下节点都能恢复到健康状态。 如果节点仍处于不健康状态,请进行手动排查。 有关详细信息,请参阅 “节点 NotReady 状态疑难解答”。
在以下情况下,AKS 可能无法执行自动修复:
- 网络配置错误可防止报告节点状态。
- 节点未能注册为健康节点。
- 节点具有以下任一污点:
node.cloudprovider.kubernetes.io/shutdownToBeDeletedByClusterAutoscaler
- 某个节点正在升级,并带有以下注解:
"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 | 节点自动修复重镜像操作因运行失败而未能完成。 请参阅此处的错误详细信息:错误代码 | 重镜像操作出错时发出。 |
| 节点重新部署错误 | 节点自动修复重新部署操作由于操作失败而失败。 请参阅此处的错误详细信息:错误代码 | 重新部署操作出错时发出。 |