Настройка HPA
HPA (Horizontal Pod Autoscaler) автоматически масштабирует количество Pod вверх или вниз на основе заданных политик и метрик, позволяя приложениям справляться с внезапными всплесками бизнес-нагрузки и при этом оптимизировать использование ресурсов в периоды низкого трафика.
Содержание
Понимание Horizontal Pod AutoscalerКак работает HPA?Поддерживаемые метрикиПредварительные требованияСоздание Horizontal Pod AutoscalerИспользование CLIИспользование Web ConsoleИспользование Custom Metrics для HPAТребованияТрадиционный HPA (Core Metrics)HPA для Custom MetricsОпределение условий срабатыванияСовместимость HPA для Custom MetricsИзменения в autoscaling/v2Правила расчетаПонимание Horizontal Pod Autoscaler
Вы можете создать horizontal pod autoscaler, чтобы задать минимальное и максимальное количество Pod, которое вы хотите запускать, а также целевое значение использования CPU или памяти для Pod.
После создания horizontal pod autoscaler платформа начинает опрашивать метрики использования ресурсов CPU и/или памяти на Pod. Когда эти метрики становятся доступны, horizontal pod autoscaler вычисляет соотношение текущего использования метрики к заданному целевому использованию и соответствующим образом масштабирует количество Pod вверх или вниз. Опрос и масштабирование выполняются через регулярные интервалы, однако появление метрик может занять одну-две минуты.
Для replication controller это масштабирование напрямую соответствует репликам replication controller. Для deployment configuration масштабирование напрямую соответствует количеству реплик deployment configuration. Обратите внимание, что autoscaling применяется только к последнему deployment в фазе Complete.
Платформа автоматически учитывает ресурсы и предотвращает ненужное autoscaling во время всплесков нагрузки на ресурсы, например при запуске. Pod в состоянии unready имеют использование CPU равным 0 при масштабировании вверх, и autoscaler игнорирует такие Pod при масштабировании вниз. Pod без известных метрик имеют использование CPU 0% при масштабировании вверх и 100% CPU при масштабировании вниз. Это обеспечивает большую стабильность при принятии решения HPA. Чтобы использовать эту функцию, необходимо настроить проверки readiness, чтобы определить, готов ли новый Pod к использованию.
Как работает HPA?
Horizontal Pod Autoscaler (HPA) расширяет концепцию автоматического масштабирования Pod. HPA позволяет создавать и управлять группой узлов, на которых распределяется нагрузка. HPA автоматически увеличивает или уменьшает количество Pod, когда достигается заданный порог CPU или памяти.
HPA работает как контур управления с периодом синхронизации по умолчанию 15 секунд. В течение этого периода controller manager запрашивает использование CPU, памяти или обоих ресурсов в соответствии с тем, что определено в конфигурации HPA. Controller manager получает метрики использования из resource metrics API для ресурсных метрик на уровне Pod, таких как CPU или память, для каждого Pod, на который нацелен HPA.
Если задана целевая величина использования, controller вычисляет значение использования как процент от эквивалентного запроса ресурса для контейнеров в каждом Pod. Затем controller берет среднее значение использования по всем целевым Pod и формирует коэффициент, который используется для масштабирования количества требуемых реплик.
Поддерживаемые метрики
Horizontal Pod Autoscaler поддерживают следующие метрики:
Важно: Для autoscaling на основе памяти использование памяти должно увеличиваться и уменьшаться пропорционально количеству реплик. В среднем:
- Увеличение количества реплик должно приводить к общему снижению использования памяти (working set) на Pod.
- Уменьшение количества реплик должно приводить к общему увеличению использования памяти на Pod.
- Используйте платформу, чтобы проверить поведение памяти вашего приложения, и убедитесь, что приложение соответствует этим требованиям, прежде чем использовать autoscaling на основе памяти.
Предварительные требования
Убедитесь, что компоненты мониторинга развернуты в текущем кластере и работают корректно. Вы можете проверить состояние развертывания и работоспособность компонентов мониторинга, нажав в правом верхнем углу платформы > Состояние работоспособности платформы..
Создание Horizontal Pod Autoscaler
Использование CLI
Вы можете создать horizontal pod autoscaler с помощью command line interface, определив YAML-файл и используя команду kubectl create. В следующем примере показано autoscaling для объекта Deployment. Исходное развертывание требует 3 Pod. Объект HPA увеличивает минимум до 5. Если использование CPU на Pod достигает 75%, количество Pod увеличивается до 7:
-
Создайте YAML-файл с именем
hpa.yamlсо следующим содержимым:- Используйте API autoscaling/v2.
- Имя ресурса HPA.
- Имя deployment, который нужно масштабировать.
- Максимальное количество реплик, до которого выполняется масштабирование вверх.
- Минимальное количество реплик, которое необходимо поддерживать.
- Укажите версию API объекта, который нужно масштабировать.
- Укажите тип объекта. Объект должен быть Deployment, ReplicaSet или StatefulSet.
- Целевой ресурс, к которому применяется HPA.
- Целевой процент использования CPU, который запускает масштабирование.
-
Примените YAML-файл для создания HPA:
Пример вывода:
-
После создания HPA вы можете просмотреть новое состояние deployment, выполнив следующую команду:
Пример вывода:
-
Вы также можете проверить состояние HPA:
Пример вывода:
Использование Web Console
-
Войдите в Container Platform.
-
В левой панели навигации нажмите Workloads > Deployments.
-
Нажмите Имя Deployment.
-
Прокрутите вниз до раздела Elastic Scaling и нажмите Update справа.
-
Выберите Horizontal Scaling и завершите настройку политики.
-
Нажмите Update.
Использование Custom Metrics для HPA
Custom metrics HPA расширяет исходный HorizontalPodAutoscaler, поддерживая дополнительные метрики помимо использования CPU и памяти.
Требования
- kube-controller-manager: horizontal-pod-autoscaler-use-rest-clients=true
- Предустановленный metrics-server
- Prometheus
- custom-metrics-api
Традиционный HPA (Core Metrics)
Традиционный HPA поддерживает использование CPU и метрики памяти для динамической корректировки количества экземпляров Pod, как показано в примере ниже:
В этом YAML scaleTargetRef указывает объект workload, который нужно масштабировать, а targetCPUUtilizationPercentage задает целевую метрику использования CPU.
HPA для Custom Metrics
Чтобы использовать custom metrics, необходимо установить prometheus-operator и custom-metrics-api. После установки custom-metrics-api предоставляет большое количество ресурсов custom metric:
Все эти ресурсы являются подресурсами MetricValueList. Вы можете создавать правила через Prometheus, чтобы создавать или поддерживать подресурсы. Формат YAML для HPA с custom metrics отличается от традиционного HPA:
В этом примере scaleTargetRef указывает workload.
Определение условий срабатывания
metrics— это массив, поддерживающий несколько метрикmetric typeможет быть: Object (описание ресурсов k8s), Pods (описание метрик для каждого Pod), Resources (встроенные метрики k8s: CPU, память) или External (обычно метрики вне кластера)- Если custom metric не предоставляется Prometheus, необходимо создать новую метрику с помощью ряда операций, таких как создание правил в Prometheus
Основная структура метрики выглядит следующим образом:
Эти данные метрики собираются и обновляются Prometheus.
Совместимость HPA для Custom Metrics
YAML для HPA с custom metrics на самом деле совместим с исходными core metrics (CPU). Вот как это записывается:
targetAverageValue— среднее значение, полученное для каждого PodtargetAverageUtilization— использование, вычисленное на основе прямого значения
Ссылка на алгоритм:
Изменения в autoscaling/v2
autoscaling/v2 поддерживает использование памяти:
Изменения: targetAverageUtilization и targetAverageValue были заменены на target и преобразованы в комбинацию xxxValue и type:
xxxValue: AverageValue (среднее значение), AverageUtilization (среднее использование), Value (прямое значение)type: Utilization (использование), AverageValue (среднее значение)
Примечания:
-
Для метрик CPU Utilization и Memory Utilization auto-scaling будет запускаться только тогда, когда фактическое значение выходит за пределы диапазона ±10% от целевого порога.
-
Масштабирование вниз может повлиять на текущие бизнес-операции; пожалуйста, действуйте с осторожностью.
Правила расчета
Когда бизнес-метрики изменяются, платформа автоматически вычисляет целевое количество Pod, соответствующее объему бизнеса, в соответствии со следующими правилами, и выполняет корректировку. Если бизнес-метрики продолжают колебаться, значение будет скорректировано до заданного Minimum Pod Count или Maximum Pod Count.
-
Целевое количество Pod для одной политики: ceil[(sum(actual metric values)/metric threshold)] . Это означает сумму фактических значений метрики всех Pod, деленную на порог метрики и округленную вверх до наименьшего целого числа, которое больше или равно результату. Например: если в данный момент есть 3 Pod с использованием CPU 80%, 80% и 90%, а заданный порог использования CPU равен 60%. Согласно формуле, количество Pod будет автоматически скорректировано до: ceil[(80%+80%+90%)/60%] = ceil 4.1 = 5 Pod.
Примечание:
-
Если рассчитанное целевое количество Pod превышает заданный Maximum Pod Count (например, 4), платформа выполнит масштабирование только до 4 Pod. Если после изменения максимального количества Pod метрики по-прежнему остаются постоянно высокими, может потребоваться использовать альтернативные методы масштабирования, например увеличить quota Pod для namespace или добавить аппаратные ресурсы.
-
Если рассчитанное целевое количество Pod (в предыдущем примере 5) меньше количества Pod, скорректированного согласно Scale-Up Step (например, 10), платформа выполнит масштабирование только до 5 Pod.
-
-
Целевое количество Pod для нескольких политик: возьмите максимальное значение среди результатов вычисления каждой политики.