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