配置 VerticalPodAutoscaler (VPA)

对于无状态和有状态应用,VerticalPodAutoscaler (VPA) 会根据您的业务需求自动推荐并可选地应用更合适的 CPU 和内存资源限制,确保 Pod 拥有足够的资源,同时提升集群资源利用率。

目录

了解 VerticalPodAutoscalers

您可以创建一个 VerticalPodAutoscaler,根据 Pod 的历史使用模式推荐或自动更新其 CPU 和内存资源请求与限制。

创建 VerticalPodAutoscaler 后,平台开始监控 Pod 的 CPU 和内存资源使用情况。当数据足够时,VerticalPodAutoscaler 会基于观察到的使用模式计算推荐的资源值。根据配置的更新模式,VPA 可以自动应用这些推荐,或仅提供推荐供手动应用。

VPA 通过分析 Pod 的资源使用情况并基于此分析提出建议,帮助确保 Pod 拥有所需资源,避免资源过度配置,从而实现集群资源的更高效利用。

VPA 是如何工作的?

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

VPA 通过持续监控 Pod 的资源使用情况,并随着新数据的获取不断更新其推荐。VPA 可运行于以下模式:

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

重要提示:弹性伸缩可以实现 Pod 的水平或垂直伸缩。当资源充足时,弹性伸缩效果良好;但当集群资源不足时,可能导致 Pod 处于 Pending 状态。因此,请确保集群资源充足或配额合理,或者配置告警以监控伸缩情况。

支持的功能

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

重要提示:手动应用 VPA 推荐时会触发 Pod 重建,可能导致应用短暂中断。建议在生产环境的维护窗口期间应用推荐。

前提条件

  • 请确保当前集群已部署监控组件且运行正常。您可以点击平台右上角 expand > 平台健康状态,查看监控组件的部署和健康状态。
  • 集群中必须安装 Alauda Container Platform Vertical Pod Autoscaler 集群插件。

安装 Vertical Pod Autoscaler 插件

使用 VPA 之前,需先安装 Vertical Pod Autoscaler 集群插件:

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

  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 通过工作负载的选择器查找需要调整资源的 Pod。支持的工作负载类型包括 DaemonSet、Deployment、ReplicaSet、StatefulSet、ReplicationController、Job 和 CronJob。
    4. 指定要伸缩对象的 API 版本。
    5. 指定对象类型。
    6. VPA 应用的目标资源。
    7. 定义 VPA 如何应用推荐的更新策略。updateMode 可选:
      • Auto:创建 Pod 时自动设置资源请求,并更新当前 Pod 至推荐资源请求。目前等同于“Recreate”。此模式可能导致应用停机。未来支持就地更新时,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 和内存资源限制推荐值。在 容器 区域,选择目标容器标签页,点击 资源限制 右侧图标,根据推荐值更新资源限制。