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 不会自动执行指定少于两个副本的工作负载对象。如果 pod 由 VPA 外部的一些进程重启,VPA 会从这些工作负载对象更新的新 pod。您可以通过修改 VerticalPodAutoscalerController
自定义资源(CR)中的 minReplicas
参数来更改此集群范围的最小值。
例如,如果您将 minReplicas
设置为 3
,则 VPA 不会为指定少于三个副本的工作负载对象删除和更新 pod。
如果将 minReplicas
设置为 1
,则 VPA 可以为只指定一个副本的工作负载对象删除唯一的 pod。只有在 VPA 删除 pod 以调整其资源时,您的工作负载可以允许停机时,才应使用此设置来使用一个副本对象。为了避免使用一个副本的对象出现不必要的停机时间,将带有 podUpdatePolicy
设置的 VPA CR 配置为 Initial
,这只有在 VPA 外部的一些进程重启时,或状态为 Off
时才重启。这可让您在适合的时间手动更新 pod。
VerticalPodAutoscalerController
对象示例
apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
creationTimestamp: "2021-04-21T19:29:49Z"
generation: 2
name: default
namespace: openshift-vertical-pod-autoscaler
resourceVersion: "142172"
uid: 180e17e9-03cc-427f-9955-3b4d7aeb2d59
spec:
minReplicas: 3 1
podMinCPUMillicores: 25
podMinMemoryMb: 250
recommendationOnly: false
safetyMarginFraction: 0.15