排查 AKS 群集中的内存饱和问题

本文讨论排查内存饱和问题的方法。 如果至少有一个应用程序或进程需要的内存超过容器主机可以提供的内存,或者主机耗尽其可用内存,则会出现内存饱和。

先决条件

症状

下表概述了内存饱和的常见症状。

症状 说明
不可计划 Pod 如果节点接近其设置的内存限制,则无法计划其他 Pod。
Pod 逐出 如果节点内存不足,则 kubelet 可以逐出 Pod。 尽管控制平面尝试在具有资源的其他节点上重新计划已逐出的 Pod,但不能保证其他节点有足够的内存来运行这些 Pod。
节点未就绪 内存饱和可能会导致 kubeletcontainerd 变得无响应,最终导致节点就绪性问题。
内存不足 (OOM) 终止 如果 Pod 逐出无法阻止节点问题,则会出现 OOM 问题。

故障排除清单

若要减少内存饱和度,请使用有效的监视工具并应用最佳做法。

步骤 1:识别内存饱和的节点

使用以下方法之一来标识内存饱和的节点:

  • 在 Web 浏览器中,在 Azure 门户中使用 AKS 的容器见解功能。

  • 在控制台中,使用 kubernetes 命令行工具 (kubectl) 。

容器见解是 AKS 中的一项功能,用于监视容器工作负载性能。 有关详细信息,请参阅为 Azure Kubernetes 服务 (AKS) 群集启用容器见解

  1. Azure 门户搜索并选择“Kubernetes 服务”。

  2. 在 Kubernetes 服务列表中,选择群集的名称。

  3. 在群集的导航窗格中,找到 “监视 ”标题,然后选择“ 见解”。

  4. 设置适当的 时间范围 值。

  5. 选择“ 节点 ”选项卡。

  6. “指标 ”列表中,选择“ 内存工作集 (从 Allocatable) 计算

  7. 在百分位选择器中,将样本设置为 “最大”,然后选择 “最大百分比 ”列标签两次。 此操作按所用内存的最大百分比(从最高到最低)对表节点进行排序。

    Azure 门户 Azure Kubernetes 服务 (AKS) 群集中容器见解中的节点视图的屏幕截图。

  8. 由于第一个节点的内存使用率最高,因此选择该节点以调查节点上运行的 Pod 的内存使用情况。

    Azure 门户Azure Kubernetes 服务 (AKS) 群集中容器见解中节点视图下的节点容器的屏幕截图。

    注意

    Pod 的 CPU 或内存使用率百分比基于为容器指定的 CPU 请求。 它不表示节点的 CPU 或内存使用率的百分比。 因此,请查看实际 CPU 或内存使用率,而不是 Pod 的 CPU 或内存使用率百分比。

现在,你已确定使用高内存的 Pod,可以识别 Pod 上运行的应用程序。

步骤 2:查看避免内存饱和的最佳做法

请查看下表,了解如何实现避免内存饱和的最佳做法。

最佳做法 说明
使用内存 请求和限制 Kubernetes 提供了用于指定 ) 请求 (最小内存大小的选项,以及容器的最大内存大小 (限制) 。 通过在 Pod 上配置限制,可以避免节点上的内存压力。 请确保运行的所有 Pod 的聚合限制不超过节点的可用内存。 这种情况称为 过度使用。 Kubernetes 计划程序通过 服务质量 (QoS) 根据设置的请求和限制分配资源。 如果没有适当的限制,计划程序可能会在单个节点上计划过多的 Pod。 这最终可能会关闭节点。 此外,当 kubelet 逐出 Pod 时,它会优先考虑内存使用量超过其定义请求的 Pod。 建议将内存请求设置为接近实际使用情况。
启用 水平 Pod 自动缩放程序 通过缩放群集,可以平衡多个 Pod 的请求,以防止内存饱和。 此方法可以减少特定节点上的内存占用量。
使用 反关联标记 对于内存不受设计限制的方案,可以使用节点选择器和相关性或反关联标记,这些标记可将工作负荷隔离到特定节点。 通过使用反关联标记,可以阻止其他工作负载在这些节点上计划 Pod。 这可以减少内存饱和问题。
选择 更高的 SKU VM 具有更多随机访问内存 (RAM) 的虚拟机 (VM) 更适合处理内存使用率过高的情况。 若要使用此选项,必须创建新的节点池,隔离节点 (使其不可计划) ,并清空现有节点池。
隔离 系统和用户工作负载 建议在用户节点池上运行应用程序。 此配置可确保可以将特定于 Kubernetes 的 Pod 隔离到系统节点池,并维护群集性能。

更多信息

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

第三方联系人免责声明

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

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。