middle
Что такое Horizontal Pod Autoscaler (HPA)?
HPA (Horizontal Pod Autoscaler) — контроллер, который автоматически масштабирует количество Pod’ов в Deployment в зависимости от наблюдаемых метрик.
Принцип работы
- HPA периодически (по умолчанию каждые 15 секунд) проверяет текущие метрики
- Сравнивает текущее значение с целевым
- Вычисляет необходимое количество реплик по формуле:
desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue)) - Масштабирует 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.