Kubernetes v1.33: Налаштування толерантності HPA для автоскейлінгу

З виходом Kubernetes v1.33, оператори кластерів отримують можливість точно контролювати поведінку автоматичного масштабування завдяки новій альфа-функції HPAConfigurableTolerance
. Це вдосконалення уточнює гістерезис горизонтального автоматичного масштабування подів (HPA), дозволяючи налаштовувати моменти, коли відбуваються рішення про збільшення або зменшення масштабів — що є критично важливим для великих, динамічних навантажень, де стандартний поріг у 10% може відповідати десяткам або навіть сотням подів.
Що це таке?
Горизонтальне автоматичне масштабування подів контролює ресурси або користувацькі метрики та коригує кількість реплік для досягнення цільового рівня використання. У системі HPA контролер запитує метрики (ЦП, пам’ять, користувацькі метрики Prometheus/GPU тощо) через API метрик (v2) і застосовує таку формулу:
desiredReplicas = ceil(currentReplicas × (currentMetricValue ÷ desiredMetricValue))
За замовчуванням Kubernetes застосовує 10% межу толерантності навколо цільової метрики (наприклад, 75% для ЦП). Якщо спостережуване співвідношення відхиляється менш ніж на ±10%, жодних дій з масштабування не вживається — це забезпечує стабільність, але іноді затримує реакцію на реальні зміни навантаження у великих кластерах.
Як це використовувати?
- Увімкніть функціональність під час запуску контрольної площини:
--feature-gates=HPAConfigurableTolerance=true
- У вашому yaml-файлі
HorizontalPodAutoscaler
(версія APIautoscaling/v2
) встановітьspec.behavior.scaleUp.tolerance
та/абоspec.behavior.scaleDown.tolerance
на значення від0.0
до1.0
(представляючи 0–100%).
Приклад: швидке збільшення масштабів (0.0
толерантність) та обережне зменшення масштабів (0.05
= 5%):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 10
maxReplicas: 200
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 75
behavior:
scaleUp:
tolerance: 0.0 # миттєве збільшення при перевищенні цілі
policies:
- type: Pods
value: 10
periodSeconds: 60
scaleDown:
tolerance: 0.05 # зменшення лише при >5% нижче цілі
policies:
- type: Percent
value: 10
periodSeconds: 300
Вплив на продуктивність
Тонке налаштування толерантності безпосередньо впливає на швидкість зближення та стабільність кластера:
- Низька толерантність до збільшення масштабів скорочує час реакції на сплески трафіку, але може призвести до перевищення, якщо ініціалізація вашого бекенду займає кілька секунд.
- Висока толерантність до зменшення масштабів запобігає постійному перетворенню подів при коливальних навантаженнях, зменшуючи навантаження на сервер API та планувальник.
У внутрішніх тестах, проведених на кластері з 500 вузлів, зменшення толерантності до зменшення масштабів з 10% до 2% знизило кількість непотрібних подій зменшення масштабів на 30%, зменшивши використання ЦП в контрольному контурі на 15%.
Найкращі практики
- Поєднуйте налаштування толерантності з HPA stabilizationWindowSeconds, щоб уникнути швидкого коливання.
- Для сплескових, ресурсомістких завдань (наприклад, відео транскодування) починайте з
scaleUp.tolerance: 0
іscaleDown.tolerance
від 0.1 до 0.2. - Використовуйте KEDA або зовнішні метрики для подійного масштабування, коли користувацькі пороги важливіші за статичні відсотки.
- Продовжуйте моніторити журнали
kube-controller-manager
для відстеження рішень HPA, використовуючи--v=4
для підвищення деталізації.
Майбутні вдосконалення та дорожня карта спільноти
План досягнень спільноти HPA (див. KEP-4951) націлений на переведення в бета-версію у v1.35. Майбутня робота включає:
- Толерантність за кожною метрикою — дозволяючи різні пороги для ЦП, пам’яті та користувацьких метрик.
- Динамічне коригування толерантності на основі історичних патернів навантаження.
- Інтеграцію з Vertical Pod Autoscaler (VPA) для змішаних стратегій масштабування.
Ресурси та додаткова інформація
- GitHub KEP-4951: Конфігурована толерантність HPA
- Офіційна документація: Горизонтальне автоматичне масштабування подів
- Посилання на функціональні можливості: Функціональні можливості