Gymterview
middle

Что такое Horizontal Pod Autoscaler (HPA)?

HPA (Horizontal Pod Autoscaler) — контроллер, который автоматически масштабирует количество Pod’ов в Deployment в зависимости от наблюдаемых метрик.

Принцип работы

  1. HPA периодически (по умолчанию каждые 15 секунд) проверяет текущие метрики
  2. Сравнивает текущее значение с целевым
  3. Вычисляет необходимое количество реплик по формуле: desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue))
  4. Масштабирует Deployment

Типы метрик

Тип Источник Пример
Resource metrics Metrics Server (CPU, память) CPU utilization 70%
Custom metrics Prometheus Запросы в секунду, размер очереди
External metrics Внешние системы Длина очереди в RabbitMQ/Kafka
Пример манифеста HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-java-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-java-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
        - type: Percent
          value: 10
          periodSeconds: 60
    scaleUp:
      stabilizationWindowSeconds: 60
      policies:
        - type: Percent
          value: 50
          periodSeconds: 60

Команды для работы с HPA

Пример
# Создать HPA через kubectl (простой вариант)
kubectl autoscale deployment my-java-app --cpu-percent=70 --min=2 --max=10

# Посмотреть состояние HPA
kubectl get hpa

# Подробная информация
kubectl describe hpa my-java-app-hpa

Важные моменты

  • Для работы HPA необходим Metrics Server в кластере
  • Для Pod’ов обязательно должны быть заданы Requests по CPU/памяти — иначе HPA не сможет рассчитать процент утилизации
  • Stabilization window предотвращает слишком частое масштабирование (flapping)
  • HPA масштабирует горизонтально (количество Pod’ов). Для вертикального масштабирования (ресурсы Pod’а) существует VPA (Vertical Pod Autoscaler)

На собеседовании: важно знать формулу расчёта реплик и что без Requests HPA не работает. Частая ошибка — забыть про stabilization window и не знать разницу между HPA и VPA.