配置 VerticalPodAutoscaler (VPA)

概述

Alauda Container Platform Vertical Pod Autoscaler 基于开源 Vertical Pod Autoscaler 组件。它会分析 Pod 的历史资源使用数据,并提供配额建议,以提高资源利用率。

对于无状态和有状态应用,VerticalPodAutoscaler (VPA) 会根据应用的需求,自动建议并可选择性地应用更合适的 CPU 和内存资源限制。这有助于确保 Pod 具备充足的资源,同时提高整体集群资源利用率。

Release Notes

本节详细介绍 Alauda Container Platform Vertical Pod Autoscaler 插件的新功能、增强功能、弃用功能和已知问题。

兼容性矩阵

VPA 版本上游 VPA 版本ACP v4.1ACP v4.2ACP v4.3ACP v4.4
v4.4.01.4.5—✓✓✓
v4.3.00.11.0✓✓✓—

v4.4 Release Notes

v4.4.0
  1. 建议持久化 — 修复 recommender 在 VerticalPodAutoscaler 资源上缺少 patch 权限的问题,该问题可能导致资源建议无法保存。附加权限仅限于 recommender ServiceAccount。
  2. 安全漏洞修复 — 相较于 v4.3.0,修复了 38 个 CVE,包括 Go 工具链和依赖项的更新。安全公告 ASA-2026:00343 的严重性为 HIGH;完整的 CVE 列表请参阅 Customer Portal 中的公告。
  3. 更新运行时镜像 — 使用 Go 1.26.9 重新构建 admission-controller、recommender 和 updater 镜像,并使用镜像标签 1.4.8 发布。上游 VPA 版本仍为 1.4.5。软件包适用于 amd64、arm64 以及两种架构(ALL)。

VPA 独立于平台发布。要应用此更新,请按照升级 Vertical Pod Autoscaler 插件升级 VPA 集群插件。如果已安装较早的 v4.4.0 软件包,请确认三个运行时组件均使用更新后的 1.4.8 镜像。

v4.3 Release Notes

v4.3.0
  1. 安全漏洞修复。

生命周期策略

下表列出了已发布 Alauda Container Platform Vertical Pod Autoscaler 插件的生命周期计划:

版本发布日期生命周期结束日期
v4.4.02026-10-142028-10-14
v4.3.02026-5-82028-5-8

了解 VerticalPodAutoscaler

VerticalPodAutoscaler(VPA)用于根据 Pod 的历史使用模式,为其推荐或自动更新 CPU 和内存资源请求与限制。

创建 VPA 后,平台会开始监控目标 Pod 的资源使用情况。收集到足够的数据后,VPA 会计算推荐的资源值。根据配置的更新模式,VPA 可以自动应用这些建议,也可以仅提供建议供手动审核和应用。

通过分析一段时间内的资源使用情况,VPA 可帮助确保为 Pod 分配其所需的资源,避免过度配置,从而更高效地利用整个集群的资源。

VPA 如何工作?

VerticalPodAutoscaler(VPA)扩展了 Pod 资源优化的概念。VPA 会监控 Pod 的资源使用情况,并根据观察到的使用模式提供 CPU 和内存请求建议。

VPA 会持续监控 Pod 的资源使用情况,并在新数据可用时更新建议。VPA 可以在以下模式下运行:

  • 关闭:VPA 仅提供建议,不会自动应用。
  • 手动调整:您可以根据 VPA 建议手动调整资源配置。

重要:当集群资源充足时,弹性伸缩(水平或垂直)的效果最佳。当资源不足时,伸缩操作可能导致 Pod 卡在 Pending 状态。请确保集群具有充足的资源、设置合理的配额,并配置告警以监控伸缩事件。

支持的功能

VPA 根据历史使用模式提供资源建议,帮助您优化 Pod 的 CPU 和内存配置。

重要:手动应用 VPA 建议时会重新创建 Pod,这可能导致应用暂时中断。对于生产工作负载,请考虑在维护窗口期间应用建议。

Info

VPA 建议和 Pod 原地调整大小解决的是资源管理的不同方面。VPA 根据观察到的使用情况推荐或应用资源值。Pod 原地调整大小是 Kubernetes 的一种机制,可通过 Pod resize 子资源更新正在运行的 Pod 的 CPU 或内存资源。某些 VPA 版本支持 InPlaceOrRecreate,在这种模式下,VPA 可以尝试通过 Pod 原地调整大小来应用建议,并在无法执行原地更新时回退到重新创建 Pod。此模式要求 Kubernetes 支持 Pod 原地调整大小、启用 InPlaceOrRecreate 功能的 VPA 组件,以及接受此 updateMode 值的 VPA CRD。有关手动运行时调整和 resizePolicy 行为,请参阅在不中断 Pod 的情况下调整 Pod 资源级别。

先决条件

使用 VPA 前,请确保满足以下条件:

  • 集群中已安装 Alauda Container Platform Vertical Pod Autoscaler 集群插件。

    • 下载与您的平台版本兼容的最新插件包。
    • 使用 violet CLI 工具将 Alauda Container Platform Vertical Pod Autoscalers 和 Alauda DevOps Pipelines 软件包上传到目标集群。有关如何使用 violet 的详细说明,请参阅 CLI。
  • 请确保当前集群中已部署监控组件且运行正常。您可以点击平台右上角的 expand > 平台健康状态。,查看监控组件的部署和健康状态。

安装 Vertical Pod Autoscaler 插件

  1. 登录并进入 Administrators 页面。

  2. 点击 Marketplace > 集群插件,进入 集群插件 列表页面。

  3. 找到 Alauda Container Platform Vertical Pod Autoscaler 集群插件,点击 安装,然后进入安装页面。

升级 Vertical Pod Autoscaler 插件

  1. 登录并进入 Administrators 页面。

  2. 点击 Marketplace > 集群插件,进入 集群插件 列表页面。

  3. 找到 Alauda Container Platform Vertical Pod Autoscaler 集群插件,点击 升级,然后进入安装页面。

创建 VerticalPodAutoscaler

使用 CLI

您可以通过定义 YAML 文件并使用 kubectl create 命令,使用命令行界面创建 VerticalPodAutoscaler。以下示例展示了如何对 Deployment 对象进行垂直 Pod 自动伸缩:

  1. 创建名为 vpa.yaml 的 YAML 文件,内容如下:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-deployment-vpa
      namespace: default
    spec:
      targetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: my-deployment
      updatePolicy:
        updateMode: 'Off'
      resourcePolicy:
        containerPolicies:
          - containerName: '*'
            mode: 'Auto'
    1. 使用 autoscaling.k8s.io/v1 API。
    2. VPA 的名称
    3. 指定目标工作负载对象。VPA 使用工作负载的 selector 查找需要调整资源的 Pod。支持的工作负载类型包括 DaemonSet、Deployment、ReplicaSet、StatefulSet、ReplicationController、Job 和 CronJob。
    4. 指定要伸缩的对象的 API 版本。
    5. 指定对象类型。
    6. VPA 应用到的目标资源
    7. 定义 VPA 如何应用建议的更新策略。updateMode 可以是:
      • Off:不自动修改 Pod 资源请求,仅在 VPA 对象中提供建议。
      • Initial:仅在创建 Pod 时设置资源请求,之后不再修改。
      • Recreate:创建 Pod 时自动设置资源请求,并驱逐当前 Pod,以更新为建议的资源请求。不使用原地更新。
      • Auto:创建 Pod 时自动设置资源请求,并将当前 Pod 更新为建议的资源请求。目前等同于“Recreate”,可能导致应用停机。
      • InPlaceOrRecreate:仅当集群支持 Pod 原地调整大小、VPA 组件启用了 InPlaceOrRecreate 功能,且 VPA CRD 接受此值时可用。VPA 会首先尝试通过 Pod 原地调整大小应用建议;无法执行原地更新时,则回退到重新创建 Pod。容器的 resizePolicy 设置可以决定调整大小期间是否重启容器。
    8. 资源策略,可为不同容器设置特定策略。例如,将某个容器的模式设为“Auto”表示为该容器计算建议,设为“Off”则表示不计算建议。
    9. 将策略应用于 Pod 中的所有容器。
    10. 将模式设为 Auto 或 Off。Auto 表示为此容器生成建议,Off 表示不生成建议。
  2. 应用 YAML 文件以创建 VPA:

    kubectl create -f vpa.yaml

    示例输出:

    verticalpodautoscaler.autoscaling.k8s.io/my-deployment-vpa created
  3. 创建 VPA 后,您可以运行以下命令查看建议:

    kubectl describe vpa my-deployment-vpa

    示例输出(部分):

    Status:
      Recommendation:
        Container Recommendations:
          Container Name:  my-container
          Lower Bound:
            Cpu:     100m
            Memory:  262144k
          Target:
            Cpu:     200m
            Memory:  524288k
          Upper Bound:
            Cpu:     300m
            Memory:  786432k

使用 Web Console

  1. 登录并进入 Container Platform。

  2. 在左侧导航栏中,点击 工作负载 > Deployments。

  3. 点击 Deployment Name。

  4. 向下滚动到 弹性伸缩 区域,然后点击右侧的 更新。

  5. 选择 垂直伸缩 并配置伸缩规则。

    参数描述
    伸缩模式目前支持 手动伸缩 模式,该模式通过分析历史资源使用情况提供建议的资源配置。您可以根据建议值手动调整。调整会导致 Pod 重新创建并重启,因此请选​​择合适的时间,以免影响正在运行的应用。
    通常,Pod 运行超过 8 天后,建议值会变得准确。
    请注意,集群资源不足时,伸缩可能导致 Pod 处于 Pending 状态。请确保集群具有充足的资源或合理的配额,或者配置告警以监控伸缩情况。
    目标容器默认为工作负载的第一个容器。您可以根据需要选择为一个或多个容器启用资源限制建议。
  6. 点击 更新。

VPA 高级配置

更新策略选项

  • updateMode: "Off" - VPA 仅提供建议,不会自动应用。您可以根据需要手动应用这些建议。
  • updateMode: "Initial" - 仅在创建 Pod 时设置资源请求,之后不再修改。
  • updateMode: "Recreate" - 创建 Pod 时自动设置资源请求,并驱逐当前 Pod,以更新为建议值。
  • updateMode: "Auto" - 创建 Pod 时自动设置资源请求,并将当前 Pod 更新为建议值。目前等同于“Recreate”。
  • updateMode: "InPlaceOrRecreate" - 仅当集群支持 Pod 原地调整大小、VPA 组件启用了 InPlaceOrRecreate 功能,且 VPA CRD 接受此值时可用。VPA 会首先尝试通过 Pod 原地调整大小应用建议;无法执行原地更新时,则回退到重新创建 Pod。容器的 resizePolicy 设置可以决定调整大小期间是否重启容器。
  • minReplicas: <number> - 副本数下限。Updater 驱逐 Pod 时,确保至少有这么多 Pod 保持可用。必须大于 0。

容器策略选项

  • containerName: "*" - 将策略应用于 Pod 中的所有容器。
  • mode: "Auto" - 自动为容器生成建议。
  • mode: "Off" - 不为容器生成建议。

注意:

  • VPA 建议基于历史使用数据,因此 Pod 可能需要运行数天,建议才会变得准确。
  • 在 Auto 或 Recreate 模式下应用 VPA 建议时,会重新创建 Pod,这可能导致应用暂时中断。如果您的 VPA 插件支持 InPlaceOrRecreate 模式,当请求的调整无法原地执行时,原地更新仍可能回退为重新创建 Pod。

后续操作

配置 VPA 后,可在 弹性伸缩 区域查看目标容器 CPU 和内存资源限制的建议值。在 容器 区域中,选择目标容器选项卡,然后单击 资源限制 右侧的图标,根据建议值更新资源限制。