Настройка Vertical Pod Autoscalers (VPA)

1. Предварительные условия

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

  • Вы создали новое пространство имён. Например, с именем test.

2. Создание Deployment

Данный Deployment создаёт два пода, которые постепенно начинают утилизировать всё больше и больше ресурсов.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hamster
  namespace: test
spec:
  selector:
    matchLabels:
      app: hamster
  replicas: 2
  template:
    metadata:
      labels:
        app: hamster
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 65534
      containers:
        - name: hamster
          image: registry.k8s.io/ubuntu-slim:0.1
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
          command: ["/bin/sh"]
          args:
            - "-c"
            - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"

3. Создание VPA

Данный VPA начинает следить за потреблением ресурсов CPU и Memory подов Deployment, который был создан ранее.

apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
  name: hamster-vpa
  namespace: test
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: hamster
  updatePolicy:
    updateMode: "Auto"
  resourcePolicy:
    containerPolicies:
      - containerName: '*'
        minAllowed:
          cpu: 100m
          memory: 50Mi
        maxAllowed:
          cpu: 1
          memory: 500Mi
        controlledResources: ["cpu", "memory"]

4. Проверка

  1. Зайдите в Web UI консоли Nova.

  2. Перейдите на вкладку WorkloadsPods.

  3. Подождите пока один из подов не перейдёт в статус Terminating, зайдите в него и перейдите на вкладку События.

  4. Убедитесь, что VPA применился. Вы должны увидеть событие Pod was evicted by VPA Updater to apply resource recommendation.

    Применение VPA