HPA (Horizontal Pod Autoscaler) автоматически масштабирует количество подов вверх или вниз на основе заданных политик и метрик, позволяя приложениям справляться с внезапными всплесками нагрузки, одновременно оптимизируя использование ресурсов в периоды низкой активности.
Вы можете создать горизонтальный автоскейлер подов, чтобы указать минимальное и максимальное количество подов, которые вы хотите запустить, а также целевое использование CPU или памяти для ваших подов.
После создания горизонтального автоскейлера платформа начинает опрашивать метрики ресурсов CPU и/или памяти на подах. Когда эти метрики становятся доступны, автоскейлер вычисляет отношение текущего использования метрики к желаемому значению и масштабирует количество подов вверх или вниз соответственно. Запрос метрик и масштабирование происходят с регулярным интервалом, но может пройти от одной до двух минут, прежде чем метрики станут доступны.
Для replication controllers такое масштабирование напрямую соответствует количеству реплик replication controller. Для deployment configurations масштабирование напрямую соответствует количеству реплик deployment configuration. Обратите внимание, что автоскейлинг применяется только к последнему деплою в фазе Complete.
Платформа автоматически учитывает ресурсы и предотвращает ненужное автоскейлинг во время всплесков ресурсов, например, при запуске. Поды в состоянии unready имеют 0 использования CPU при масштабировании вверх, а автоскейлер игнорирует такие поды при масштабировании вниз. Поды без известных метрик считаются с 0% использования CPU при масштабировании вверх и 100% при масштабировании вниз. Это обеспечивает большую стабильность при принятии решений HPA. Для использования этой функции необходимо настроить readiness проверки, чтобы определить, готов ли новый под к использованию.
Горизонтальный автоскейлер подов (HPA) расширяет концепцию автоскейлинга подов. HPA позволяет создавать и управлять группой балансируемых по нагрузке узлов. HPA автоматически увеличивает или уменьшает количество подов, когда заданный порог CPU или памяти превышается.
HPA работает как управляющий цикл с периодом синхронизации по умолчанию 15 секунд. В течение этого периода controller manager опрашивает использование CPU, памяти или обоих параметров в соответствии с конфигурацией HPA. Controller manager получает метрики использования из resource metrics API для каждого пода, на который направлен HPA.
Если задана целевая величина использования, контроллер вычисляет значение использования в процентах от соответствующего запроса ресурсов контейнеров в каждом поде. Затем контроллер берет среднее значение использования по всем целевым подам и формирует коэффициент, который используется для масштабирования желаемого количества реплик.
Горизонтальные автоскейлеры подов поддерживают следующие метрики:
Метрика | Описание |
---|---|
Использование CPU | Количество используемых ядер CPU. Может использоваться для вычисления процента от запрошенного CPU пода. |
Использование памяти | Объем используемой памяти. Может использоваться для вычисления процента от запрошенной памяти пода. |
Входящий сетевой трафик | Объем сетевого трафика, поступающего в под, измеряется в KiB/s. |
Исходящий сетевой трафик | Объем сетевого трафика, исходящего из пода, измеряется в KiB/s. |
Трафик чтения со хранилища | Объем данных, читаемых со хранилища, измеряется в KiB/s. |
Трафик записи на хранилище | Объем данных, записываемых на хранилище, измеряется в KiB/s. |
Важно: Для автоскейлинга на основе памяти использование памяти должно пропорционально увеличиваться и уменьшаться в зависимости от количества реплик. В среднем:
- Увеличение количества реплик должно приводить к общему снижению использования памяти (working set) на один под.
- Уменьшение количества реплик должно приводить к общему увеличению использования памяти на один под.
- Используйте платформу для проверки поведения памяти вашего приложения и убедитесь, что оно соответствует этим требованиям перед использованием автоскейлинга на основе памяти.
Убедитесь, что компоненты мониторинга развернуты в текущем кластере и работают корректно. Вы можете проверить статус развертывания и состояние компонентов мониторинга, нажав в правом верхнем углу платформы > Platform Health Status..
Вы можете создать горизонтальный автоскейлер подов с помощью интерфейса командной строки, определив YAML-файл и используя команду kubectl create
. Следующий пример показывает автоскейлинг для объекта Deployment. Изначально требуется 3 пода. Объект HPA увеличивает минимум до 5. Если использование CPU подов достигает 75%, количество подов увеличивается до 7:
Создайте YAML-файл с именем hpa.yaml
со следующим содержимым:
Примените YAML-файл для создания HPA:
Пример вывода:
После создания HPA вы можете просмотреть новое состояние деплоя, выполнив команду:
Пример вывода:
Также можно проверить статус вашего HPA:
Пример вывода:
Войдите в Container Platform.
В левой навигационной панели нажмите Workloads > Deployments.
Кликните по Имя Deployment.
Прокрутите вниз до области Elastic Scaling и нажмите Update справа.
Выберите Horizontal Scaling и заполните конфигурацию политики.
Параметр | Описание |
---|---|
Количество подов | После успешного создания деплоя необходимо оценить Минимальное количество подов, соответствующее известным и регулярным изменениям бизнес-объема, а также Максимальное количество подов, которое может поддерживаться квотой namespace при высокой нагрузке. Максимальное или минимальное количество подов можно изменять после настройки, рекомендуется сначала получить более точное значение через нагрузочное тестирование и постоянно корректировать в процессе эксплуатации для удовлетворения бизнес-потребностей. |
Политика триггера | Укажите Метрики, чувствительные к изменениям бизнеса, и их Целевые пороги для запуска действий масштабирования вверх или вниз. Например, если вы установите CPU Utilization = 60%, как только использование CPU отклонится от 60%, платформа начнет автоматически корректировать количество подов на основе недостаточного или избыточного распределения ресурсов текущего деплоя. Примечание: Типы метрик включают встроенные и пользовательские. Пользовательские метрики применимы только к деплоям в нативных приложениях, и их необходимо предварительно добавить custom metrics . |
Шаг масштабирования (альфа) | Для бизнесов с особыми требованиями к скорости масштабирования можно постепенно адаптироваться к изменениям объема, задавая Шаг масштабирования вверх или Шаг масштабирования вниз. Для шага масштабирования вниз можно настроить Окно стабильности, по умолчанию 300 секунд, что означает необходимость ожидания 300 секунд перед выполнением действий по уменьшению масштаба. |
Нажмите Update.
HPA с пользовательскими метриками расширяет оригинальный HorizontalPodAutoscaler, поддерживая дополнительные метрики помимо CPU и памяти.
Традиционный HPA поддерживает использование CPU и памяти для динамического изменения количества экземпляров Pod, как показано в примере ниже:
В этом YAML scaleTargetRef
указывает объект нагрузки для масштабирования, а targetCPUUtilizationPercentage
задает метрику триггера по CPU.
Для использования пользовательских метрик необходимо установить prometheus-operator и custom-metrics-api. После установки custom-metrics-api предоставляет множество ресурсов пользовательских метрик:
Эти ресурсы являются подресурсами типа MetricValueList. Вы можете создавать правила через Prometheus для создания или поддержки подресурсов. Формат YAML HPA для пользовательских метрик отличается от традиционного HPA:
В этом примере scaleTargetRef
указывает нагрузку.
metrics
— массив, поддерживающий несколько метриктип метрики
может быть: Object (описание ресурсов k8s), Pods (метрики для каждого Pod), Resources (встроенные метрики k8s: CPU, память) или External (обычно метрики вне кластера)Основная структура метрики:
Эти данные метрики собираются и обновляются Prometheus.
YAML HPA с пользовательскими метриками совместим с оригинальными core metrics (CPU). Пример записи:
targetAverageValue
— среднее значение, полученное для каждого подаtargetAverageUtilization
— использование, вычисленное из прямого значенияАлгоритм:
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 подов.
Целевое количество подов по нескольким политикам: выбирается максимальное значение из результатов расчётов каждой политики.