Настройка HPA
HPA (Horizontal Pod Autoscaler) автоматически масштабирует количество подов вверх или вниз на основе заданных политик и метрик, позволяя приложениям справляться с внезапными всплесками нагрузки, одновременно оптимизируя использование ресурсов в периоды низкой активности.
Содержание
Понимание Horizontal Pod AutoscalersКак работает HPA?Поддерживаемые метрикиПредварительные требованияСоздание Horizontal Pod AutoscalerИспользование 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% при масштабировании вниз. Это обеспечивает большую стабильность при принятии решений HPA. Для использования этой функции необходимо настроить readiness проверки, чтобы определить, готов ли новый под к использованию.
Как работает HPA?
Горизонтальный автоскейлер подов (HPA) расширяет концепцию автоскейлинга подов. HPA позволяет создавать и управлять группой балансируемых по нагрузке узлов. HPA автоматически увеличивает или уменьшает количество подов, когда заданный порог CPU или памяти превышается.
HPA работает как управляющий цикл с периодом синхронизации по умолчанию 15 секунд. В течение этого периода controller manager опрашивает использование CPU, памяти или обоих параметров в соответствии с конфигурацией HPA. Controller manager получает метрики использования из resource metrics API для каждого пода, на который направлен HPA.
Если задана целевая величина использования, контроллер вычисляет значение использования в процентах от соответствующего запроса ресурсов контейнеров в каждом поде. Затем контроллер берет среднее значение использования по всем целевым подам и формирует коэффициент, который используется для масштабирования желаемого количества реплик.
Поддерживаемые метрики
Горизонтальные автоскейлеры подов поддерживают следующие метрики:
Важно: Для автоскейлинга на основе памяти использование памяти должно пропорционально увеличиваться и уменьшаться в зависимости от количества реплик. В среднем:
- Увеличение количества реплик должно приводить к общему снижению использования памяти (working set) на один под.
- Уменьшение количества реплик должно приводить к общему увеличению использования памяти на один под.
- Используйте платформу для проверки поведения памяти вашего приложения и убедитесь, что оно соответствует этим требованиям перед использованием автоскейлинга на основе памяти.
Предварительные требования
Убедитесь, что компоненты мониторинга развернуты в текущем кластере и работают корректно. Вы можете проверить статус развертывания и состояние компонентов мониторинга, нажав в правом верхнем углу платформы > Platform Health Status..
Создание Horizontal Pod Autoscaler
Использование 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 подов.
-
-
Целевое количество подов по нескольким политикам: выбирается максимальное значение из результатов расчётов каждой политики.