Налаштування Kubernetes Autoscaling (VPA — Vertical Pod Autoscaler)
У вас є застосунок, який стабільно споживає більше пам'яті, ніж виділено в requests? Або навпаки — ви закладаєте ресурси із запасом 2x і переплачуєте за хмару? VPA (Vertical Pod Autoscaler) вирішує це завдання: він автоматично коригує requests/limits контейнера на основі реальної утилізації, без ручних правок маніфестів. На відміну від HPA, який збільшує кількість подів, VPA змінює розмір одного пода. Це критично для монолітів, stateful-навантажень та batch-завдань, де горизонтальне масштабування неможливе або неефективне. Згідно з офіційною документацією VPA, коректне налаштування дозволяє скоротити ручні коригування на 80% та знизити витрати на хмарні ресурси на 30–40%.
Ми допоможемо налаштувати VPA під ваш продакшн, щоб виключити ручне регулювання ресурсів та переплату за неефективну утилізацію. Оцінимо поточне споживання, встановимо компоненти та налаштуємо границі для безпечного автоскейлінгу.
Головний біль VPA: рестарт подів
VPA в режимі Auto або Recreate змінює resources контейнера шляхом перезапуску пода. По-іншому Kubernetes не вміє — ресурси не можна змінити у працюючого контейнера. Це означає: при кожному вертикальному скейлінгу под вмирає та піднімається заново з новими requests/limits. Для production-сервісу з однією реплікою це downtime в середньому 5–10 секунд.
Для workloads з кількома репліками (де рестарт одного пода некритичний) або для batch Jobs режим Auto безпечний. Режим Off — найбезпечніший спосіб почати: VPA тільки рекомендує, не застосовує. Дивитесь на рекомендації через kubectl describe vpa app-vpa, порівнюєте з маніфестом, коригуєте вручну. За 7–14 днів VPA збере гістограми та видасть точні рекомендації.
Як встановити VPA в кластер?
VPA не входить до стандартного Kubernetes — ставиться окремо. Два основні способи:
| Метод | Команда | Додатково |
|---|---|---|
| Офіційний репозиторій VPA | git clone https://github.com/kubernetes/autoscaler.git && cd autoscaler/vertical-pod-autoscaler && ./hack/vpa-up.sh |
Швидке розгортання трьох компонентів |
| Через Helm | helm repo add fairwinds-stable https://charts.fairwinds.com/stable && helm upgrade --install vpa fairwinds-stable/vpa --namespace vpa --create-namespace |
Гнучке налаштування через values.yaml |
Обидва варіанти перевірені роками практики — наш досвід показує, що Helm-підхід зручніший для повторюваних інсталяцій та автоматизації через GitOps, наприклад з ArgoCD або Flux. VPA розгортає три компоненти: recommender (аналізує метрики), updater (перезапускає поди), admission-controller (підставляє ресурси при створенні пода).
Режими VPA: Off, Auto, Recreate
| Режим | Застосування | Даунтайм | Коли використовувати |
|---|---|---|---|
| Off | Тільки рекомендації | Немає | Первинний збір даних, аудит |
| Auto | Автоматична зміна з перезапуском | Є | Workload’и з кількома репліками |
| Recreate | Те саме, що Auto, але без додаткових перевірок | Є | Контрольовані середовища, тести |
Режим Auto рекомендується для production тільки після збору даних в Off та перевірки границь.
Конфігурація об'єкта VPA: що важливо вказати
---
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: app-vpa
namespace: production
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: app
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: app
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: "4"
memory: 4Gi
controlledResources: ["cpu", "memory"]
minAllowed та maxAllowed — обов'язкові обмеження для рекомендера. Без них VPA може запропонувати cpu: 50m (занадто мало для прогріву JVM) або memory: 8Gi (занадто багато). Границі завжди потрібні, інакше ризикуєте отримати неадекватні значення.
Як recommender обчислює рекомендації?
Recommender використовує гістограми споживання за останні 7 днів (168 зрізів), аналізуючи перцентилі 50-й, 90-й та 95-й. Рекомендація по пам'яті, як правило, відповідає 95-му перцентилю, а по CPU — 50-му, оскільки CPU можна використовувати повторно за рахунок компресії. Це гарантує, що под отримає достатньо ресурсів для піків, але не буде їх блокувати.Що робити, якщо VPA та HPA конфліктують?
Не можна використовувати VPA в режимі Auto та HPA по CPU/Memory на одному деплойменті одночасно. Вони будуть боротися: VPA змінює requests, HPA рахує утилізацію відносно requests — результат непередбачуваний. Правильна комбінація: VPA на requests/limits, HPA по кастомних метриках (RPS, queue depth) — тоді вони не конкурують. Або VPA в режимі Off як радник + ручне коригування маніфестів. У будь-якому випадку ми налаштовуємо обидва так, щоб вони працювали узгоджено.
Розберемо приклад: при використанні HPA по RPS та VPA в режимі Auto на одному deployment, VPA зменшить requests при зниженні навантаження, scheduler розмістить більше подів на ноду, а HPA при зростанні RPS збільшить репліки. Так вони працюють синергічно.
Як налаштувати VPA для Java-застосунку?
У нашій практиці був випадок: Java-застосунок запущено з requests.memory: 512Mi, але JVM після прогріву стабільно споживає 1.2GB. Контейнер не вбивається (ліміт вищий), але нода відчуває memory pressure через неправильні requests — scheduler думає, що поду потрібно 512MB, а реально зайнято 1.2GB.
VPA в режимі Off за тиждень зібрав гістограми споживання та рекомендував requests.memory: 1280Mi. Після застосування вручну scheduler став правильно враховувати под при розміщенні на нодах. Memory pressure зник, кластер стабілізувався. Результат — на 30% знизилась кількість перерозподілів подів та на 25% зросла щільність розміщення.
Загальні рекомендації: для Java вказуйте minAllowed не менше 512MB пам'яті (прогрів JVM), maxAllowed — із запасом 20% від очікуваного піку. Увімкніть Prometheus-метрики для відстеження споживання.
Що входить в роботу з налаштування VPA?
- Аудит поточного споживання ресурсів та специфіки workloads.
- Встановлення VPA в кластер з урахуванням вашої інфраструктури (bare-metal, хмара, on-prem).
- Створення об'єктів VPA для цільових workload'ів з коректними границями.
- Налаштування режиму Off для збору даних або Auto для автоматичного застосування.
- Вирішення конфліктів з HPA, якщо вони є.
- Документація з експлуатації та рекомендації щодо регулярного моніторингу.
- Навчання вашої команди: як аналізувати рекомендації VPA та вносити зміни.
Терміни та вартість
Орієнтовні терміни:
- Встановлення VPA та налаштування об'єктів в режимі
Offдля аудиту — від 1 дня. - Повна конфігурація з
Autoрежимом, границями, тестуванням на staging та документацією — від 1 до 3 днів.
Вартість розраховується індивідуально після аналізу обсягу робіт. Оцінюємо проєкт — просто напишіть нам, і ми підберемо оптимальний варіант. Гарантуємо якість та надаємо підтримку після впровадження.
Чому варто довірити налаштування VPA професіоналам?
Ми маємо 5+ років досвіду в продакшн-адмініструванні Kubernetes, провели десятки успішних впроваджень. Наші інженери — сертифіковані спеціалісти (CKA, CKAD). Ми не просто ставимо VPA, а налаштовуємо його в зв'язці з observability (Prometheus, Grafana) та процесами GitOps, щоб ви бачили прозору картину споживання та могли швидко реагувати на зміни.
Отримайте консультацію з налаштування VPA — ми оцінимо ваш кластер. Зв'яжіться з нами, щоб обговорити деталі.







