Menu Close
Settings Close

Language and Page Formatting Options

2.5.3. 关于使用 Vertical Pod Autoscaler Operator

要使用 Vertical Pod Autoscaler Operator(vpa),您需要为集群中的工作负载对象创建 VPA 自定义资源(CR)。VPA 学习并应用与该工作负载对象关联的 pod 的最佳 CPU 和内存资源。您可以使用 VPA 与部署、有状态集、作业、守护进程集、副本集或复制控制器工作负载对象一起使用。VPA CR 必须与您要监控的 pod 位于同一个项目中。

您可以使用 VPA CR 关联一个工作负载对象,并指定 VPA 使用什么模式运行:

  • AutoRecreate 模式会在 pod 生命周期内自动应用 VPA 对 CPU 和内存建议。VPA 会删除项目中任何与建议不兼容的 pod。当由工作负载对象重新部署时,VPA 会在其建议中更新新 pod。
  • Initial 模式仅在创建 pod 时自动应用 VPA 建议。
  • Off 模式只提供推荐的资源限制和请求信息,用户可以手动应用其中的建议。off 模式不会更新 pod。

您还可以使用 CR 使特定容器不受 VPA 评估和更新的影响。

例如,pod 具有以下限制和请求:

resources:
  limits:
    cpu: 1
    memory: 500Mi
  requests:
    cpu: 500m
    memory: 100Mi

在创建了一个设置为 auto 的 VPA 后,VPA 会了解资源使用情况并删除 pod。重新部署时,pod 会使用新的资源限值和请求:

resources:
  limits:
    cpu: 50m
    memory: 1250Mi
  requests:
    cpu: 25m
    memory: 262144k

您可以使用以下命令查看 VPA 建议:

$ oc get vpa <vpa-name> --output yaml

几分钟后,输出显示 CPU 和内存请求的建议,如下所示:

输出示例

...
status:
...
  recommendation:
    containerRecommendations:
    - containerName: frontend
      lowerBound:
        cpu: 25m
        memory: 262144k
      target:
        cpu: 25m
        memory: 262144k
      uncappedTarget:
        cpu: 25m
        memory: 262144k
      upperBound:
        cpu: 262m
        memory: "274357142"
    - containerName: backend
      lowerBound:
        cpu: 12m
        memory: 131072k
      target:
        cpu: 12m
        memory: 131072k
      uncappedTarget:
        cpu: 12m
        memory: 131072k
      upperBound:
        cpu: 476m
        memory: "498558823"
...

输出显示推荐的资源、目标、最低推荐资源、lowerBound、最高推荐资源、upperBound、以及最新资源建议和 uncappedTarget

VPA 使用 lessBoundupperBound 值来确定一个 pod 是否需要更新。如果 pod 的资源请求低于 lowerBound 值,或高于 upperBound 值,则 VPA 会终止 pod,并使用 target 值重新创建 pod。

2.5.3.1. 自动应用 VPA 建议

要使用 VPA 来自动更新 pod,为特定工作负载对象创建一个 VPA CR,并将 updateMode 设置为 AutoRecreate

当为工作复杂对象创建 pod 时,VPA 会持续监控容器以分析其 CPU 和内存需求。VPA 会删除任何不满足 VPA 对 CPU 和内存的建议的 pod。重新部署后,pod 根据 VPA 建议使用新的资源限值和请求,并遵循您的应用程序的 pod 中断预算。建议被添加到 VPA CR 的 status 字段中以进行引用。

注意

工作负载对象必须至少指定两个副本,以便 VPA 监控和更新 pod。如果工作负载对象指定一个副本,VPA 不会删除 pod 来防止应用程序停机。您可以手动删除 pod 以使用推荐的资源。

Auto 模式的 VPA CR 示例

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 1
    name:       frontend 2
  updatePolicy:
    updateMode: "Auto" 3

1 1
您希望此 VPA CR 管理的工作负载对象类型。
2
您希望此 VPA CR 管理的工作负载对象名称。
3
将模式设置为 AutoRecreate:
  • Auto.VPA 分配创建 pod 的资源请求,并在请求的资源与新建议有很大不同时终止这些 Pod 来更新现存的 pod。
  • Recreate。VPA 分配创建 pod 的资源请求,并在请求的资源与新建议有很大不同时终止这些 Pod 来更新现存的 pod。这个模式应该很少使用,只有在需要确保每当资源请求改变时 pod 就需要重启时才使用。
注意

在 VPA 可以决定推荐的资源并对新 pod 应用推荐前,pod 必须已在运行。