Azure Kubernetes 服务中节点未就绪故障的基本故障排除

总结

本文提供了在发生故障后恢复 Azure Kubernetes 服务(AKS)群集节点的故障排除步骤。 它专门解决了节点未就绪故障发生时出现的最常见错误消息,并说明了如何修复 Windows 和 Linux 节点的节点。

开始之前

阅读有关 Kubernetes 群集故障排除的官方指南。 此外,请阅读 Microsoft 工程师的 Kubernetes 故障排除指南。 本指南包含用于对 Pod、节点、群集和其他功能进行故障排除的命令。

先决条件

  • Azure CLI 版本 2.31 或更高版本。 如果已安装 Azure CLI,请运行 az --version 以检查版本。

基本故障排除

AKS 持续监视工作器节点的运行状况,并在 节点运行不正常时自动修复 节点。 Azure 虚拟机(VM)平台 维护遇到问题的 VM 。 AKS 和 Azure VM 协同工作,以减少群集的服务中断次数。

节点有两种形式的心跳信号:

  • 对象的 .statusNode 的更新。

  • kube-node-lease 命名空间中的 Lease 对象。 每个 Node 对象都有一个关联的 Lease 对象。

.status 的更新相比, 是一种轻型资源。 使用 Lease 对象进行心跳可以降低这些更新对大型集群的性能影响。

kubelet 负责创建和更新对象的.status。 它还负责更新 LeaseNode 对象相关的对象。

  • kubelet 会在状态发生变化或在配置的时间间隔内没有更新时更新节点 .status。 节点更新的默认间隔 .status 为 5 分钟,这比无法访问的节点的 40 秒默认超时时间要长得多。
  • kubelet 创建并每隔 10 秒更新一次对象 Lease (默认更新间隔)。 Lease 更新独立于节点 .status的更新进行。 如果Lease更新失败,kubelet 会重试,使用从 200 毫秒开始的指数回退机制,并且最大上限为 7 秒。

不能在状态具有 NotReadyUnknown 的节点上调度 Pod。 只能将 Pod 调度到处于 Ready 状态的节点上。

如果节点处于MemoryPressureDiskPressurePIDPressure状态,则您必须管理资源以在节点上调度额外的 Pod。 如果节点处于 NetworkUnavailable 模式,则必须正确配置节点上的网络。

AKS 为你管理代理节点的生命周期和操作。 不支持修改与代理节点关联的 IaaS 资源。 例如,不支持通过 SSH 连接自定义节点、更新包或更改节点上的网络配置。 有关详细信息,请参阅 代理节点的 AKS 支持覆盖范围。

确保满足以下条件:

  • 群集处于 “成功”(正在运行) 状态。 若要检查Azure 门户上的群集状态,请搜索并选择 Kubernetes 服务,然后选择 AKS 群集的名称。 然后,在群集的“概述”页上,在“概要”查找状态。 或者,在 Azure CLI 中输入 az aks show 命令。

    Azure 门户中 Azure Kubernetes 服务(AKS)群集概述页的屏幕截图。在“概要”部分中,“状态”字段显示“成功”(正在运行)。

  • 节点池的 预配状态“成功” ,电源 状态“正在运行”。 若要检查Azure 门户上的节点池状态,请返回到 AKS 群集的页面,然后选择“节点池”。 或者,在 Azure CLI 中输入 az aks nodepool show 命令。

    Azure 门户中 Azure Kubernetes 服务(AKS)群集节点池页的屏幕截图。预配状态为“成功”,电源状态为“正在运行”。

  • 所需的出口端口在网络安全组(NSG)和防火墙中打开,以便可以访问 API 服务器的 IP 地址。 有关详细信息,请参阅 AKS 群集所需的出站网络规则和 FQDN。

  • 你的节点已部署了最新的节点映像

  • 节点处于 Running 状态,而不是 StoppedDeallocated

  • 你的群集正在运行一个 AKS 支持的 Kubernetes 版本。

详细信息

若要排查 Not Ready 节点状态的问题,请参阅 排查健康节点变更为未就绪状态的问题

第三方联系人免责声明

Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。