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
- Офіційна документація: Горизонтальне автоматичне масштабування подів
- Посилання на функціональні можливості: Функціональні можливості