配置垂直 Pod 自动伸缩器 (VPA)

无论是无状态应用还是有状态应用,垂直 Pod 自动伸缩器 (VPA) 会根据您的业务需求,自动推荐并可选地应用更合适的 CPU 和内存资源限制,确保 Pods 拥有足够的资源,同时提高集群资源的利用率。

目录

理解垂直 Pod 自动伸缩器

您可以创建一个垂直 Pod 自动伸缩器,以根据 Pods 的历史使用模式推荐或自动更新 CPU 和内存资源请求及限制。

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

VPA 通过分析 Pods 随时间的资源使用情况并基于此分析提供建议。它可以帮助确保 Pods 拥有所需的资源,而不会过度配置,从而在整个集群中实现更高效的资源利用。

VPA 如何工作?

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

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

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

重要:弹性伸缩可以实现 Pods 的水平或垂直伸缩。当有足够的资源可用时,弹性伸缩可以带来良好的效果,但当集群资源不足时,可能会导致 Pods 处于待处理状态。因此,请确保集群有足够的资源或合理的配额,或者您可以配置告警以监控伸缩条件。

支持的功能

垂直 Pod 自动伸缩器根据历史使用模式提供资源建议,使您能够优化 Pods 的 CPU 和内存配置。

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

前提条件

  • 请确保当前集群已部署监控组件,并且监控组件运行正常。您可以通过单击平台右上角 expand > 平台健康状态,查看监控组件的部署和健康状况。
  • Alauda 容器平台的垂直 Pod 自动伸缩集群插件必须已安装在您的集群中。

安装垂直 Pod 自动伸缩插件

在使用 VPA 之前,您需要安装垂直 Pod 自动伸缩集群插件:

  1. 登录并导航到 管理员 页面。

  2. 单击 市场 > 集群插件 以访问 集群插件 列表页面。

  3. 找到 Alauda 容器平台的垂直 Pod 自动伸缩集群插件,单击安装,然后继续到安装页面。

创建垂直 Pod 自动伸缩器

使用 CLI

您可以通过定义 YAML 文件并使用 kubectl create 命令来创建垂直 Pod 自动伸缩器。以下示例展示了一个 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 使用工作负载的选择器查找需要资源调整的 Pods。支持的工作负载类型包括 DaemonSet、Deployment、ReplicaSet、StatefulSet、ReplicationController、Job 和 CronJob。
  4. 指定要缩放的对象的 API 版本。
  5. 指定对象的类型。
  6. VPA 应用的目标资源。
  7. 定义 VPA 如何应用建议的更新策略。updateMode 可以是:
    • Auto:在创建 Pods 时自动设置资源请求,并将当前 Pods 更新为推荐的资源请求。目前等同于 "Recreate"。此模式可能导致应用程序停机。一旦支持就地 Pod 资源更新,"Auto" 模式将采用此更新机制。
    • Recreate:在创建 Pods 时自动设置资源请求,并驱逐当前 Pods 以更新为推荐的资源请求。将不使用就地更新。
    • Initial:仅在创建 Pods 时设置资源请求,之后不进行修改。
    • Off:不自动修改 Pod 资源请求,仅在 VPA 对象中提供建议。
  8. 资源策略,可以为不同容器设置特定策略。例如,将容器的模式设置为 "Auto" 意味着它将计算该容器的建议,而 "Off" 意味着它不会计算建议。
  9. 将策略应用于 Pod 中的所有容器。
  10. 将模式设置为 Auto 或 Off。Auto 意味着将为该容器生成建议,Off 意味着不会生成建议。
  1. 应用 YAML 文件以创建 VPA:
$ kubectl create -f vpa.yaml

示例输出:

verticalpodautoscaler.autoscaling.k8s.io/my-deployment-vpa created
  1. 创建 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. 进入 容器平台

  2. 在左侧导航栏中,单击 工作负载 > 部署

  3. 单击 部署名称

  4. 向下滚动至 弹性伸缩 区域,单击右侧的 更新

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

    参数说明
    伸缩模式当前支持 手动伸缩 模式,通过分析过往资源用量给出推荐的资源配置。您可以根据推荐值手动进行调整。调整将导致 Pods 被重建和重启,因此请选择合适的时间以避免对正在运行的应用程序产生影响。
    通常在 Pods 运行超过 8 天后,推荐值会趋于精准。
    请注意,当集群资源不足时,伸缩可能导致 Pods 处于待处理状态。请确保集群有足够的资源或合理的配额,或配置告警以监控伸缩条件。
    目标容器默认为工作负载的第一个容器。您可以根据需要选择为一个或多个容器开启资源限额推荐。
  6. 单击 更新

高级 VPA 配置

更新策略选项

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

容器策略选项

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

注意

  • VPA 建议基于历史使用数据,因此可能需要几天的 Pod 操作才能使建议准确。
  • 在 Auto 模式下应用 VPA 建议时,将会发生 Pod 重建,这可能会导致您的应用程序暂时中断。

后续操作

配置完成后,可以在 弹性伸缩 区域查看目标容器的 CPU 和内存资源限额的推荐值。在 容器 区域,选择目标容器标签页,并单击 资源限额 右侧的图标以根据推荐值更新资源限额。