你当前正在访问 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 将执行以下操作:
- 尝试重启节点。
- 如果节点重启失败,AKS 会对该节点重置映像。
- 如果重置映像失败,并且它是 Linux 节点,AKS 将重新部署该节点。
如果自动修复失败,AKS 工程师会调查备选修正措施。
注意
如果节点上存在以下排斥,则不会触发自动修复: node.cloudprovider.kubernetes.io/shutdown
、ToBeDeletedByClusterAutoscaler
。
整个自动修复过程可能需要长达一个小时才能完成。 对于每个步骤,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 群集工作负载的高可用性。