总结
本文提供了在发生故障后恢复 Azure Kubernetes 服务(AKS)群集节点的故障排除步骤。 它专门解决了节点未就绪故障发生时出现的最常见错误消息,并说明了如何修复 Windows 和 Linux 节点的节点。
开始之前
阅读有关 Kubernetes 群集故障排除的官方指南。 此外,请阅读 Microsoft 工程师的 Kubernetes 故障排除指南。 本指南包含用于对 Pod、节点、群集和其他功能进行故障排除的命令。
先决条件
-
Azure CLI 版本 2.31 或更高版本。 如果已安装 Azure CLI,请运行
az --version以检查版本。
基本故障排除
AKS 持续监视工作器节点的运行状况,并在 节点运行不正常时自动修复 节点。 Azure 虚拟机(VM)平台 维护遇到问题的 VM 。 AKS 和 Azure VM 协同工作,以减少群集的服务中断次数。
节点有两种形式的心跳信号:
对象的 .status
Node的更新。kube-node-lease 命名空间中的 Lease 对象。 每个
Node对象都有一个关联的Lease对象。
与 Lease 对象进行心跳可以降低这些更新对大型集群的性能影响。
kubelet 负责创建和更新对象的.status。 它还负责更新 Lease 与 Node 对象相关的对象。
- kubelet 会在状态发生变化或在配置的时间间隔内没有更新时更新节点
.status。 节点更新的默认间隔.status为 5 分钟,这比无法访问的节点的 40 秒默认超时时间要长得多。 - kubelet 创建并每隔 10 秒更新一次对象
Lease(默认更新间隔)。Lease更新独立于节点.status的更新进行。 如果Lease更新失败,kubelet 会重试,使用从 200 毫秒开始的指数回退机制,并且最大上限为 7 秒。
不能在状态具有 NotReady 或 Unknown 的节点上调度 Pod。 只能将 Pod 调度到处于 Ready 状态的节点上。
如果节点处于MemoryPressure、DiskPressure或PIDPressure状态,则您必须管理资源以在节点上调度额外的 Pod。 如果节点处于 NetworkUnavailable 模式,则必须正确配置节点上的网络。
AKS 为你管理代理节点的生命周期和操作。 不支持修改与代理节点关联的 IaaS 资源。 例如,不支持通过 SSH 连接自定义节点、更新包或更改节点上的网络配置。 有关详细信息,请参阅 代理节点的 AKS 支持覆盖范围。
确保满足以下条件:
群集处于 “成功”(正在运行) 状态。 若要检查Azure 门户上的群集状态,请搜索并选择 Kubernetes 服务,然后选择 AKS 群集的名称。 然后,在群集的“概述”页上,在“概要”中查找状态。 或者,在 Azure CLI 中输入 az aks show 命令。
节点池的 预配状态 为 “成功” ,电源 状态 为 “正在运行”。 若要检查Azure 门户上的节点池状态,请返回到 AKS 群集的页面,然后选择“节点池”。 或者,在 Azure CLI 中输入 az aks nodepool show 命令。
所需的出口端口在网络安全组(NSG)和防火墙中打开,以便可以访问 API 服务器的 IP 地址。 有关详细信息,请参阅 AKS 群集所需的出站网络规则和 FQDN。
你的节点已部署了最新的节点映像。
节点处于
Running状态,而不是Stopped或Deallocated。你的群集正在运行一个 AKS 支持的 Kubernetes 版本。
详细信息
若要排查 Not Ready 节点状态的问题,请参阅 排查健康节点变更为未就绪状态的问题。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。