2.5.3.4. 阻止容器特定容器应用 VPA 建议

如果您的工作负载对象有多个容器,且您不希望 VPA 对所有容器进行评估并进行操作,请为特定工作负载对象创建一个 VPA CR,添加一个 resourcePolicy 已使特定容器不受 VPA 的影响。

当 VPA 使用推荐的资源更新 pod 时,任何带有 resourcePolicy 的容器都不会被更新,且 VPA 不会对这些 pod 中的容器提供建议。

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
  resourcePolicy: 4
    containerPolicies:
    - containerName: my-opt-sidecar
      mode: "Off"
1
您希望此 VPA CR 管理的工作负载对象类型。
2
您希望此 VPA CR 管理的工作负载对象名称。
3
将模式设置为 AutoRecreateOffRecreate 模式应该很少使用,只有在需要确保每当资源请求改变时 pod 就需要重启时才使用。
4
指定不受 VPA 影响的容器,将 mode 设置为 Off

例如,一个 pod 有两个容器,它们有相同的资源请求和限值:

# ...
spec:
  containers:
  - name: frontend
    resources:
      limits:
        cpu: 1
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
  - name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
# ...

在启用一个带有 backend 排除容器设置的 VPA CR 后,VPA 终止并使用推荐的资源重新创建 pod 的行为只适用于 frontend 容器。

...
spec:
  containers:
    name: frontend
    resources:
      limits:
        cpu: 50m
        memory: 1250Mi
      requests:
        cpu: 25m
        memory: 262144k
...
    name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
...