配置 VerticalPodAutoscaler (VPA)

Overview

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

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

Release Notes

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

Supported Versions

Version Version
v4.2.0v4.1, v4.2

v4.2 Release Notes

v4.2.0
  1. 安全漏洞修复。
  2. 现在可独立发布。

生命周期策略

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

VersionRelease DateEnd of Life
v4.2.02025-12-162027-12-16

理解 VerticalPodAutoscalers

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

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

通过分析一段时间内的资源使用情况,VPA 可帮助确保您的 Pod 获得所需资源而不过度分配,从而实现更高效的集群级资源利用。

VPA 如何工作?

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

VPA 通过持续监控您的 Pod 的资源使用情况,并在有新数据可用时更新其建议来工作。VPA 可以运行在以下模式:

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

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

支持的功能

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

重要:在手动应用 VPA 建议时,会发生 Pod 重建,这可能会对您的应用造成短暂中断。对于生产工作负载,请考虑在维护窗口期间应用建议。

前提条件

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

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

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

安装 Vertical Pod Autoscaler 插件

  1. 登录并进入 管理员 页面。

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

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

升级 Vertical Pod Autoscaler 插件

  1. 登录并进入 管理员 页面。

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

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

创建 VerticalPodAutoscaler

使用 CLI

您可以通过命令行界面创建 VerticalPodAutoscaler,方法是定义一个 YAML 文件并使用 kubectl create 命令。以下示例展示了针对 Deployment 对象的垂直扩缩容:

  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 使用工作负载的选择器来查找需要调整资源的 Pod。支持的工作负载类型包括 DaemonSet、Deployment、ReplicaSet、StatefulSet、ReplicationController、Job 和 CronJob。
    4. 指定要扩缩容的对象的 API 版本。
    5. 指定对象类型。
    6. VPA 适用的目标资源。
    7. 定义 VPA 如何应用建议的更新策略。updateMode 可以是:
      • Auto:在创建 Pod 时自动设置资源请求,并将当前 Pod 更新为推荐的资源请求。当前等同于 "Recreate"。此模式可能导致应用停机。一旦支持原地 Pod 资源更新,"Auto" 模式将采用该更新机制。
      • Recreate:在创建 Pod 时自动设置资源请求,并驱逐当前 Pod 以更新为推荐的资源请求。不会使用原地更新。
      • Initial:仅在创建 Pod 时设置资源请求,之后不再修改。
      • Off:不会自动修改 Pod 资源请求,仅在 VPA 对象中提供建议。
    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 控制台

  1. 登录并进入 Container Platform

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

  3. 点击 Deployment 名称

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

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

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

高级 VPA 配置

更新策略选项

  • updateMode: "Off" - VPA 仅提供建议,不会自动应用。您可以根据需要手动应用这些建议。
  • updateMode: "Auto" - 在创建 Pod 时自动设置资源请求,并将当前 Pod 更新为推荐值。当前等同于 "Recreate"。
  • updateMode: "Recreate" - 在创建 Pod 时自动设置资源请求,并驱逐当前 Pod 以更新为推荐值。
  • updateMode: "Initial" - 仅在创建 Pod 时设置资源请求,之后不再修改。
  • minReplicas: <number> - 最小副本数。当 Updater 驱逐 Pod 时,确保至少保留该数量的可用 Pod。必须大于 0。

容器策略选项

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

注意

  • VPA 建议基于历史使用数据,因此 Pod 运行数天后,建议才会变得准确。
  • 在 Auto 模式下应用 VPA 建议时,会发生 Pod 重建,这可能会对您的应用造成短暂中断。

后续操作

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