Перейти к содержанию

Настройка вертикального масштабирования подов (VPA)

Описание

Vertical Pod Autoscaler (VPA) — это компонент, который автоматически изменяет запросы ресурсов (requests) и лимитов (limits) для подов на основе их фактического потребления. VPA позволяет оптимизировать использование ресурсов кластера без ручного задания значений CPU и памяти.

Note

Подробнее о принципах работы VPA в официальной документации Kubernetes.

В кластерах платформы Боцман можно установить и настроить любой подходящий вариант VPA. Данное руководство описывает установку и настройку VPA на базе реализации Kubernetes Autoscaler.

Когда это может пригодиться

  • Нужно автоматически подбирать requests и limits для подов, чтобы избежать как нехватки ресурсов, так и их избыточного резервирования.
  • Требуется проанализировать фактическое потребление ресурсов приложениями в кластере.

Предварительные требования

  • Установленный и настроенный helm на машине с доступом к кластеру.
  • Для установки VPA необходимо подключить репозиторий с помощью утилиты helm: helm repo autoscalers

Установка VPA

  1. Подключите репозиторий Kubernetes Autoscaler:

    helm repo add autoscalers https://kubernetes.github.io/autoscaler
    
  2. Выполните установку VPA в кластер:

    helm upgrade -i vertical-pod-autoscaler autoscalers/vertical-pod-autoscaler
    
  3. Убедитесь, что установка завершилась успешно — все поды VPA должны перейти в статус Running:

    kubectl get pods -n kube-system -l app.kubernetes.io/instance=vertical-pod-autoscaler
    

Пример

Предположим, что в кластере работает Deployment с именем vpa-demo, в рамках которого запущено несколько подов со следующими настройками ресурсов:

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: 2
    memory: 4Gi

Создайте манифест vpa-demo.yaml:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-demo
  namespace: default
spec:
  resourcePolicy:
    containerPolicies:
      - containerName: '*'
        controlledValues: RequestsOnly
        maxAllowed:
          cpu: 2
          memory: 4Gi
        minAllowed:
          cpu: 50m
          memory: 64Mi
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: vpa-demo
  updatePolicy:
    updateMode: Recreate

Примените манифест:

kubectl apply -f vpa-demo.yaml

В примере описано вертикальное масштабирование подов, запущенных в рамках деплоймента vpa-demo, исключительно по параметру requests, limits остаются без изменений

Проверка работы VPA

  1. До применения манифеста проверьте текущие ресурсы подов:

    kubectl get pod -l app=vpa-demo -o=jsonpath='{.items[0].spec.containers[0].resources}'
    

    Ожидаемый вывод:

    {"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"100m","memory":"128Mi"}}
    
  2. После применения манифеста поды начнут пересоздаваться. Дождитесь завершения процедуры пересоздания и проверьте обновлённые значения:

    kubectl get pod -l app=vpa-demo -o=jsonpath='{.items[0].spec.containers[0].resources}'
    

    Примерный ожидаемый вывод (значения могут отличаться в зависимости от фактического потребления):

    {"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"1168m","memory":"4Gi"}}
    

    Как видно, VPA автоматически определил новые параметры requests на основе фактического потребления ресурсов подами.

    Note

    VPA может потребоваться некоторое время (до нескольких минут) для сбора метрик и применения рекомендаций.