2.5.3. 关于使用 Vertical Pod Autoscaler Operator
要使用 Vertical Pod Autoscaler Operator(vpa),您需要为集群中的工作负载对象创建 VPA 自定义资源(CR)。VPA 学习并应用与该工作负载对象关联的 pod 的最佳 CPU 和内存资源。您可以使用 VPA 与部署、有状态集、作业、守护进程集、副本集或复制控制器工作负载对象一起使用。VPA CR 必须与您要监控的 pod 位于同一个项目中。
您可以使用 VPA CR 关联一个工作负载对象,并指定 VPA 使用什么模式运行:
-
Auto
和Recreate
模式会在 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 使用 lessBound
和 upperBound
值来确定一个 pod 是否需要更新。如果 pod 的资源请求低于 lowerBound
值,或高于 upperBound
值,则 VPA 会终止 pod,并使用 target
值重新创建 pod。
2.5.3.1. 自动应用 VPA 建议
要使用 VPA 来自动更新 pod,为特定工作负载对象创建一个 VPA CR,并将 updateMode
设置为 Auto
或 Recreate
。
当为工作复杂对象创建 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
在 VPA 可以决定推荐的资源并对新 pod 应用推荐前,pod 必须已在运行。