Kubernetes VPA - 每周在特定日期运行一次更新程序

问题描述 投票:0回答:1

我们的团队运行着一组生产集群,其中包含许多过度配置大量资源的

Deployment
。我们希望使用 VPA 自动降低这些部署中容器的资源请求,但我们希望以破坏性最小的方式做到这一点,并且每周仅在流量较大的特定日期(例如星期日)应用一次更新很低。

我注意到 VPA-updater 组件有一个

updater-interval
flag,但这不允许一周中的特定一天,所以我很好奇是否有任何替代方案。

如何将 VPA 配置为每周仅在特定日期运行一次更新?

文档链接

kubernetes azure-aks
1个回答
0
投票

你是对的。 连续运行 VPA 可能会导致中断,尤其是在 HPA 已经到位的情况下。如果您发现每周更新具有破坏性,请将其更改为每月或调整部署的PodDisruptionBudget,以最大程度地减少 VPA 触发的重启的影响

DazWilkin 的想法很好。

在集群上启用 VPA

az aks update --name ingress-demo-cluster --resource-group arkorg --enable-vpa

enter image description here

部署示例 nginx 应用程序

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"

enter image description here

为关闭模式下的部署配置 VPA

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: nginx-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  updatePolicy:
    updateMode: "Off"

创建一个 Cron 作业,在周日将 VPA 修补为

Auto
模式,或者如果每周感觉太具有破坏性,则每月进行一次,并在一小时后将其恢复为
Off
模式

apiVersion: batch/v1
kind: CronJob
metadata:
  name: vpa-weekly-updater
spec:
  schedule: "0 0 * * 0" # Every Sunday at midnight
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: vpa-patcher
            image: bitnami/kubectl:latest
            command:
            - /bin/sh
            - -c
            - |
              kubectl patch vpa nginx-vpa --type=json -p='[{"op": "replace", "path": "/spec/updatePolicy/updateMode", "value": "Auto"}]'
              echo "Waiting for VPA updates to complete..."
              sleep 3600 # Wait for 1 hour
              kubectl patch vpa nginx-vpa --type=json -p='[{"op": "replace", "path": "/spec/updatePolicy/updateMode", "value": "Off"}]'
          restartPolicy: OnFailure

enter image description here

完成。

kubectl get pods -l app=nginx
kubectl get vpa
kubectl create job --from=cronjob/vpa-weekly-updater vpa-test-job

enter image description here

enter image description here

enter image description here

enter image description here

类似话题

© www.soinside.com 2019 - 2024. All rights reserved.