Azure Kubernetes 服务 (AKS) 会持续监视工作器节点的运行状况,在节点运行不正常的情况下对其进行自动修复。 Azure 虚拟机 (VM) 平台对出现问题的 VM 执行维护。 AKS 和 Azure VM 协同工作,以最大程度地减少群集的服务中断次数。
本文介绍了自动节点修复功能在 Windows 和 Linux 节点上的行为方式。
AKS 如何检测未就绪的节点
AKS 使用以下规则来确定节点是否运行不正常以及是否需要修复:
可使用 kubectl get nodes
命令手动检查节点的运行状况状态。
自动修复的工作原理
注释
AKS 使用用户帐户“aks-remediator”启动修复操作。
如果 AKS 检测到一个节点持续不健康至少 五 分钟,AKS 将执行以下操作:
- AKS 重启节点。
- 如果重启后节点仍不正常,AKS 会对节点进行重镜像。
- 如果节点在重映像后仍不正常,并且它是一个 Linux 节点,AKS 会重新部署节点。
如果节点仍不正常,AKS 会重试重启、重映像并重新部署序列最多三次。 整个自动修复过程可能需要长达一个小时才能完成。
局限性
AKS 节点自动修复是一项尽力型服务,我们不保证节点恢复为正常状态。 如果持续处于不正常状态,我们强烈建议你对节点执行手动调查。 详细了解如何排查节点 NotReady 状态。
在某些情况下,AKS 不执行自动修复。 无法自动修复节点这一情况的发生可能是由于设计原因,也可能是 Azure 无法检测到问题的存在。 未执行自动修复的示例包括:
- 由于网络配置错误,未报告节点状态。
- 节点最初未能注册为健康节点。
- 如果节点上存在以下任一污点:
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 会从 aks-auto-repair 源发出 Kubernetes 事件以获取可见性。 自动修复发生时,对节点对象显示以下事件。
若要详细了解如何访问、存储 Kubernetes 事件并对其配置警报,请参阅在 Azure Kubernetes 服务中使用 Kubernetes 事件进行故障排除。
原因 | 事件消息 | DESCRIPTION |
---|---|---|
NodeRebootStart | 由于 NotReady 状态持续超过 5 分钟,因此节点自动修复正在启动重启操作。 | 即将对节点上执行重启时,发出此事件以通知你。 此操作是整个节点自动修复序列中的第一个操作。 |
NodeRebootEnd | 节点自动修复的重新启动操作已完成。 | 在节点上完成重启后发出。 此事件不指示执行重启后节点的运行状况(正常或不正常)。 |
NodeReimageStart | 由于 NotReady 状态持续超过 5 分钟,因此节点自动修复正在启动重镜像操作。 | 此事件会在即将对节点进行重镜像时发出,以通知你。 |
NodeReimageEnd | 节点自动修复的重置映像操作已完成。 | 在节点上完成重置映像后发出。 此事件不指示执行重镜像后节点的运行状况(正常或不正常)。 |
节点重新部署开始 | 由于 NotReady 状态持续超过 5 分钟,因此节点自动修复正在启动重新部署操作。 | 当即将在你的节点上执行重新部署时,将发出此事件以通知你。 重新部署是节点自动修复序列中的最后一个操作。 |
节点重新部署结束 | 节点自动修复的重新部署操作已完成。 | 在节点上完成重新部署后发出。 此事件不指示执行重新部署后节点的运行状况(正常或不正常)。 |
如果在节点自动修复过程中发生任何错误,则发出以下事件,并显示逐字错误消息。 详细了解如何排查常见节点自动修复错误。
注释
以下事件消息中的错误代码因报告的错误而异。
原因 | 事件消息 | DESCRIPTION |
---|---|---|
NodeRebootError | 节点自动修复重启操作由于操作失败而失败。 请参阅此处的错误详细信息:错误代码 | 重启操作出错时发出。 |
NodeReimageError | 节点自动修复重镜像操作因运行失败而未能完成。 请参阅此处的错误详细信息:错误代码 | 重镜像操作出错时发出。 |
节点重新部署错误 | 节点自动修复重新部署操作由于操作失败而失败。 请参阅此处的错误详细信息:错误代码 | 重新部署操作出错时发出。 |
后续步骤
默认情况下,可访问针对 AKS 群集过去 1 小时的 Kubernetes 事件和日志。 若要存储和查询过去 90 天的事件和日志,请启用容器见解,以对 AKS 群集进行更深入的故障排除。