Horizontal Pod Autoscaler (HPA) — это контроллер в Kubernetes, который автоматически изменяет количество реплик подов в зависимости от нагрузки. Его задача — поддерживать баланс между производительностью и эффективным использованием ресурсов.
Как работает HPA
- Сбор метрик
HPA получает данные из Metrics Server или других источников (Prometheus Adapter и т.п.): CPU, память, пользовательские метрики. - Сравнение с целевыми значениями
В манифесте указывается, какое среднее использование ресурсов считается допустимым (например, 70% CPU). - Принятие решения
Если нагрузка выше целевого уровня, HPA увеличивает количество подов. Если ниже — уменьшает. - Обновление Deployment/ReplicaSet
HPA напрямую изменяет полеу контроллера, которому подчиняются поды.replicas
Пример манифеста HPA
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: web-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web-app minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70
Здесь количество подов будет автоматически меняться от 2 до 10 в зависимости от нагрузки на CPU.
Где применяется
- Web-приложения с переменным трафиком (например, пиковая нагрузка в e-commerce во время распродаж).
- API-сервисы с непредсказуемым числом запросов.
- Обработчики очередей — масштабируются в зависимости от длины очереди сообщений (через кастомные метрики).
Ограничения
- Работает только с контроллерами, поддерживающими масштабирование (Deployment, ReplicaSet, StatefulSet).
- Требует настроенного источника метрик (обычно ).
metrics-server
- Не управляет ресурсами узлов — для этого используется Cluster Autoscaler.
Для клиента
HPA позволяет приложению выдерживать пиковые нагрузки без падений и при этом экономить ресурсы в периоды простоя. Это означает:
- меньше затрат на инфраструктуру;
- предсказуемую производительность;
- автоматизацию без ручного вмешательства админов.
Сравнение HPA, VPA и Cluster Autoscaler
Характеристика | HPA (Horizontal Pod Autoscaler) | VPA (Vertical Pod Autoscaler) | Cluster Autoscaler |
---|---|---|---|
Что масштабирует | Количество подов (реплик) | Ресурсы одного пода (CPU, память) | Количество узлов (node) в кластере |
Уровень действия | Поды внутри Deployment/ReplicaSet/StatefulSet | Отдельный под (увеличивает requests/limits | Инфраструктура (виртуальные машины, узлы) |
Примеры применения | Web-приложения, API, обработчики очередей | Базы данных, ML-задачи, ресурсоёмкие сервисы | Гибридные кластеры в облаке (AWS, GCP, Azure) |
Источник метрик | CPU, память, кастомные метрики (Prometheus, API) | История использования ресурсов пода | Утилизация кластера, pending pods |
Когда увеличивает нагрузку | При росте запросов и CPU | Когда под систематически «упирается» в лимиты | Когда подов некуда разместить (нет узлов) |
Когда снижает нагрузку | При падении трафика | При избыточном выделении ресурсов | Когда узлы простаивают, и поды можно переселить |
Подходит для | Переменного трафика, микросервисов | Stateful-приложений, тяжёлых задач | Облачных кластеров с оплатой за узлы |
Кратко:
- HPA — регулирует количество подов.
- VPA — регулирует «вес» одного пода.
- Cluster Autoscaler — регулирует количество серверов (node).
Эти инструменты часто используются вместе: HPA масштабирует поды, VPA оптимизирует их размеры, а Cluster Autoscaler добавляет или убирает узлы.