你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Kubernetes 服务 (AKS) 中的垂直 Pod 自动缩放

适用于: ✔️ AKS 自动 ✔️ AKS 标准

本文概述如何使用 Azure Kubernetes 服务 (AKS) 中基于开源 Kubernetes 版本的垂直 Pod 自动缩放程序 (VPA)。

对于大多数生产工作负荷,AKS 自动是推荐的默认 AKS 体验。 默认情况下,AKS 自动已准备就绪,并包含 VPA 作为预配置的群集功能。 在 AKS Standard 中,显式配置和管理 VPA。

配置该程序后,VPA 将根据过去的使用量自动设置每个工作负载中容器的资源请求和限制。 VPA 释放 CPU 和内存供其他 Pod 使用,并帮助确保有效利用 AKS 群集。 垂直 Pod 自动缩放提供一段时间内的资源使用情况建议。 若要管理资源使用量的突然增加,请使用水平 Pod 自动缩放程序,它可以根据需要缩放 Pod 副本数。

若要了解有关 AKS 自动的详细信息,请参阅什么是Azure Kubernetes 服务 (AKS)自动?

AKS Automatic 和 AKS Standard 中的 VPA

VPA 在 AKS 群集模式下都可用,但设置不同:

  • AKS 自动:VPA 已预配置。
  • AKS 标准:VPA 是可选的,并显式配置。

对于大多数生产方案,从 AKS 自动开始,使用生产就绪的默认值并减少运营开销。

好处

垂直 Pod 自动缩放程序提供以下优势:

  • 分析应用程序所需的处理器和内存资源并将其调整为合适的大小。 VPA 不仅负责根据一段时间内的资源使用量来扩展规模,还负责缩减规模。
  • 如果需要更改其资源请求,将逐出缩放模式设置为“自动”或“重新创建”的 Pod。
  • 可以通过指定资源策略为单个容器设置 CPU 和内存限制。
  • 确保节点中有适当的资源用于 Pod 调度。
  • 提供对处理器或内存资源所做调整的可配置日志记录。
  • 提高群集资源利用率,并为其他 Pod 释放 CPU 和内存。

限制和注意事项

使用垂直 Pod 自动缩放程序时,请考虑以下限制和注意事项:

  • VPA 可为与 VerticalPodAutoscaler 对象关联的每个集群最多 1,000 个 Pod 提供最佳支持。 随着被跟踪的 Pod 数量增加,所有 VPA 组件的内存消耗都会增加,其中推荐器尤为明显,这可能会影响可扩展性。
  • VPA 可能建议的资源比群集中的可用资源多,这可以防止 Pod 分配到节点并因资源不足而运行。 可以通过将 LimitRange 设置为每个命名空间的最大可用资源来克服此限制,这可确保 Pod 请求的资源不会超过指定。 还可以设置 VerticalPodAutoscaler 对象中每个 Pod 允许的最大资源建议数。 VPA 无法完全克服节点资源不足的问题。 限制范围是固定的,但节点资源使用情况会动态更改。
  • 不建议将 VPA 与水平 Pod 自动缩放程序配合使用,后者根据相同的 CPU 和内存使用情况指标进行缩放。
  • VPA 推荐器最多只存储 8 天的历史数据。
  • VPA 不支持基于 JVM 的工作负载,因为对工作负载的实际内存使用情况的可见性有限。
  • VPA 不支持同时运行自己的 VPA 实现。 支持使用额外的或自定义的推荐器。
  • 不支持 AKS Windows 容器。

VPA 概述

VPA 对象由三个组件组成:

  • 推荐器:推荐器监视当前和过去的资源消耗量,包括指标历史记录、内存不足 (OOM) 事件和 VPA 部署规范,并使用收集的信息为容器 CPU 和内存请求/限制提供建议的值。
  • 更新程序:更新程序监视托管 Pod 以确保正确设置其资源请求。 否则,它会删除这些 Pod,以便其控制器可以使用更新的请求重新创建它们。
  • VPA 许可控制器:VPA 许可控制器根据更新程序的活动。为新 Pod 设置正确的资源请求(由其控制器创建或重新创建)。

VPA 许可控制器

VPA 许可控制器是一个二进制文件,用于将自身注册为可变许可 Webhook。 创建新 Pod 后,VPA 许可控制器会从 API 服务器获取请求,并评估是否存在匹配的 VPA 配置,或者查找相应的配置,并使用当前建议在 Pod 中设置资源请求。

独立作业 overlay-vpa-cert-webhook-check 在 VPA 许可控制器外运行。 overlay-vpa-cert-webhook-check 作业创建和续订证书,并将 VPA 许可控制器注册为 MutatingWebhookConfiguration

VPA 对象操作模式

垂直 Pod 自动缩放程序资源(通常为部署)为希望自动计算资源要求的每个控制器插入。

有四种运行 VPA 的模式:

  • Recreate:VPA 在 Pod 创建期间分配资源请求,并通过在请求的资源与遵循 Pod 中断预算的新建议(如果定义,则采用 PodDisruptionBudget)明显不同时逐出现有 Pod 来更新这些请求。 仅当每当资源请求更改时需要确保重启 Pod 时,才应使用此模式。 否则,我们建议使用 InPlaceOrRecreate 模式,以在可能的情况下充分利用无重启更新。
  • InPlaceOrRecreate:在 InPlaceOrRecreate 模式下,VPA 会尝试更新 Pod 资源请求和限制,而无需尽可能重启 Pod。 但是,如果无法对特定资源更改执行就地更新,VPA 会回退到逐出 Pod(类似于重新创建模式)并允许工作负荷控制器使用更新的资源创建替换 Pod。 此模式在 AKS 1.34+ 上可用。
  • Initial:VPA 仅在 Pod 创建期间分配资源请求。 它不更新现有 Pod。 此模式可用于测试和了解 VPA 行为,而不会影响正在运行的 Pod。
  • Off:VPA 不会自动更改 Pod 的资源要求。 建议经过计算,可以在 VPA 对象中检查。

警告

Auto VPA 版本 1.4.0(AKS 1.34+)起,更新模式已弃用。 自动模式目前是 Recreate 模式的别名,行为与其相同。 引入了此功能,以便将来扩展自动更新策略。

应用程序开发的部署模式

如果不熟悉 VPA,请使用以下部署模式在应用程序开发期间识别每个应用程序的唯一资源利用率特征,测试 VPA 以验证其是否正常运行,并与其他 Kubernetes 组件一起进行测试以优化群集的资源利用率:

  1. 在生产群集中设置 UpdateMode = "Off",并在建议模式下运行 VPA,以便测试并熟悉 VPA。 UpdateMode = "Off" 可以避免引入可能导致中断的错误配置。
  2. 首先通过收集给定时间段内的实际资源利用率遥测来建立可观测性。 此遥测数据帮助你了解受这些容器和 Pod 上运行的工作负荷影响的容器和 Pod 资源的行为及任何问题迹象。
  3. 熟悉监视数据以了解性能特征。 根据此见解,相应地设置所需的请求/限制,然后在下一次部署或升级中设置。
  4. 根据你的要求将 updateMode 值设为 RecreateInPlaceOrRecreateInitial

在 AKS 自动中,VPA 已作为预配置功能提供,因此专注于策略和模式优化。 在 AKS 标准版中,在应用推出模式之前完成 VPA 设置。