Тема
Настройка вертикального масштабирования подов (VPA)
Описание
Vertical Pod Autoscaler (VPA) — это компонент, который автоматически изменяет запросы ресурсов (requests) и лимитов (limits) для подов на основе их фактического потребления. VPA позволяет оптимизировать использование ресурсов кластера без ручного задания значений CPU и памяти.
INFO
Подробнее о принципах работы VPA в официальной документации Kubernetes.
В кластерах платформы Боцман можно установить и настроить любой подходящий вариант VPA. Данное руководство описывает установку и настройку VPA на базе реализации Kubernetes Autoscaler.
Когда это может пригодиться
- Нужно автоматически подбирать
requestsиlimitsдля подов, чтобы избежать как нехватки ресурсов, так и их избыточного резервирования. - Требуется проанализировать фактическое потребление ресурсов приложениями в кластере.
Предварительные требования
- Установленный и настроенный
helmна машине с доступом к кластеру. - Для установки VPA необходимо подключить репозиторий с помощью утилиты helm: helm repo autoscalers
Установка VPA
Подключите репозиторий Kubernetes Autoscaler:
bashhelm repo add autoscalers https://kubernetes.github.io/autoscalerВыполните установку VPA в кластер:
bashhelm upgrade -i vertical-pod-autoscaler autoscalers/vertical-pod-autoscalerУбедитесь, что установка завершилась успешно — все поды VPA должны перейти в статус
Running:bashkubectl get pods -n kube-system -l app.kubernetes.io/instance=vertical-pod-autoscaler
Пример
Предположим, что в кластере работает Deployment с именем vpa-demo, в рамках которого запущено несколько подов со следующими настройками ресурсов:
yaml
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 2
memory: 4GiСоздайте манифест vpa-demo.yaml:
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: InPlaceOrRecreateПримените манифест:
bash
kubectl apply -f vpa-demo.yamlВ примере описано вертикальное масштабирование подов, запущенных в рамках деплоймента vpa-demo, исключительно по параметру requests, limits остаются без изменений
Проверка работы VPA
До применения манифеста проверьте текущие ресурсы подов:
bashkubectl get pod -l app=vpa-demo -o=jsonpath='{.items[0].spec.containers[0].resources}'Ожидаемый вывод:
json{"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"100m","memory":"128Mi"}}После применения манифеста поды начнут пересоздаваться. Дождитесь завершения процедуры пересоздания и проверьте обновлённые значения:
bashkubectl get pod -l app=vpa-demo -o=jsonpath='{.items[0].spec.containers[0].resources}'Примерный ожидаемый вывод (значения могут отличаться в зависимости от фактического потребления):
json{"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"1168m","memory":"4Gi"}}Как видно, VPA автоматически определил новые параметры
requestsна основе фактического потребления ресурсов подами.
INFO
VPA может потребоваться некоторое время (до нескольких минут) для сбора метрик и применения рекомендаций.