Автоматическое масштабирование
Автоматическое масштабирование — это изменение размера группы узлов, количества подов или количества выделяемых каждому поду ресурсов на основе запросов ресурсов для подов, запущенных на узлах этой группы.
В кластере Managed Service for Kubernetes доступны следующие виды автоматического масштабирования:
- Автоматическое масштабирование кластера (Cluster Autoscaler). Managed Service for Kubernetes отслеживает нагрузку на узлы и при необходимости изменяет их количество в указанных пределах.
- Автоматическое масштабирование мастера (Master Autoscaler). Managed Service for Kubernetes отслеживает нагрузку на мастер и при необходимости изменяет его конфигурацию.
- Горизонтальное масштабирование подов (Horizontal Pod Autoscaler). Kubernetes динамически изменяет количество подов, запущенных на каждом узле группы.
- Вертикальное масштабирование подов (Vertical Pod Autoscaler). При повышении нагрузки Kubernetes выделяет каждому поду дополнительные ресурсы в установленных пределах.
Вы можете использовать несколько видов автоматического масштабирования в одном кластере. При этом не рекомендуется использовать Horizontal Pod Autoscaler и Vertical Pod Autoscaler одновременно.
Автоматическое масштабирование кластера
Cluster Autoscaler автоматически изменяет количество узлов в группе в зависимости от нагрузки. Включение Cluster Autoscaler доступно только при создании группы узлов.
Важно
Размещение узлов автомасштабируемой группы возможно только в одной зоне доступности.
При создании группы узлов выберите автоматический тип масштабирования и задайте минимальное, максимальное и начальное количество узлов. Kubernetes периодически проверяет состояние подов, нагрузку на узлы и при необходимости меняет размер группы:
- Увеличивает количество узлов, если на существующих узлах не хватает vCPU или RAM для размещения подов. Количество узлов не превышает заданного максимума.
- Уменьшает количество узлов, если нагрузка низкая и все поды можно разместить на меньшем числе узлов. Количество узлов не опускается ниже заданного минимума.
Перед удалением узла поды с него расселяются на другие узлы. Если перенос не завершится за 5 минут, узел принудительно остановится. Изменить время ожидания нельзя.
Примечание
При подсчете текущих лимитов и квот
Примечание
Информацию о пользовательских метках узлов Cluster Autoscaler получает только после создания первого узла в группе. Поэтому если начальное и минимальное количество узлов равны 0, автоскейлер будет знать только служебные метки.
Если в nodeSelector пода указана пользовательская метка, автоскейлер будет считать, что создание нового узла в группе не позволит разместить под. В результате появление такого пода не запустит создание узла, и под останется в статусе Pending.
Чтобы избежать этой ситуации, выберите один из способов:
- Задайте начальное количество узлов
1, а минимальное —0. Автоскейлер сохранит информацию о пользовательских метках и позже удалит единственный узел, если нагрузки не будет. - Используйте в
nodeSelectorтолько служебные метки, заранее известные автоскейлеру:yandex.cloud/node-group-id: "<идентификатор_группы_узлов>"для выбора группы узлов,yandex.cloud/preemptible: "<true_или_false>"для выбора прерываемых или непрерываемых узлов.
Подробнее читайте в документации Kubernetes:
Смотрите также раздел Вопросы и ответы про автоматическое масштабирование группы узлов в Managed Service for Kubernetes.
Автоматическое масштабирование мастера
Master Autoscaler автоматически меняет конфигурацию высокодоступного мастера под текущую нагрузку. Такой подход позволяет поддерживать стабильную работу кластера без ручного подбора конфигурации.
Для масштабирования Master Autoscaler периодически собирает метрики утилизации мастера — количество vCPU и объем RAM. На основе метрик могут быть приняты следующие решения:
- Увеличить ресурсы, если мастер близок к перегрузке.
- Уменьшить ресурсы, если мастер устойчиво недозагружен.
- Оставить без изменений, если утилизация в пределах нормы.
Чтобы исключить реакцию на кратковременные скачки нагрузки, решения принимаются на основе агрегированных метрик за несколько минут. Масштабирование запускается только в случаях, когда критическое значение сохраняется на протяжении некоторого времени.
Конфигурация мастера, выбранная при создании или изменении кластера, используется как минимальная — Master Autoscaler не уменьшает объем RAM и количество vCPU ниже указанных в ней значений.
После принятия решения скейлер подбирает ближайшую подходящую конфигурацию мастера так, чтобы после изменения утилизация оставалась в пределах нормы.
Даже при использовании Master Autoscaler выбирайте конфигурацию мастера, соответствующую реальной нагрузке на кластер. Ориентируйтесь на рекомендуемые конфигурации — конфигурация с избытком vCPU и RAM не позволит высвобождать лишние ресурсы, а недостаточная может привести к слишком частому масштабированию.
Операции автоматического масштабирования мастера отображаются в разделе операций кластера. Пока выполняется масштабирование, запустить другие операции с кластером невозможно — необходимо дождаться его завершения.
Горизонтальное автомасштабирование подов
При использовании горизонтального масштабирования подов Kubernetes изменяет их количество в зависимости от степени нагрузки на vCPU.
При создании Horizontal Pod Autoscaler укажите в параметрах:
- Желаемую среднюю нагрузку на vCPU для каждого пода в процентах.
- Минимальное и максимальное количество реплик подов.
Горизонтальное автомасштабирование подов доступно для контроллеров:
Подробнее о Horizontal Pod Autoscaler в документации Kubernetes
Вертикальное автомасштабирование подов
Kubernetes ограничивает выделение ресурсов для каждого приложения с помощью параметров limits. Для пода, превысившего лимит vCPU, включается режим пропуска тактов процессора. Под, превысивший лимит RAM, будет остановлен.
Vertical Pod Autoscaler при необходимости выделяет дополнительные ресурсы vCPU и RAM для подов.
При создании Vertical Pod Autoscaler укажите в спецификации режим автоматического масштабирования:
updateMode: "Off", чтобы Vertical Pod Autoscaler предоставлял рекомендации по управлению ресурсами подов, но не изменял их.updateMode: "Initial", чтобы Vertical Pod Autoscaler применял рекомендации только при создании подов.updateMode: "Recreate", чтобы Vertical Pod Autoscaler пересоздавал поды с обновленными значениями ресурсов при значительном расхождении между текущими запросами и рекомендациями.updateMode: "InPlaceOrRecreate", чтобы Vertical Pod Autoscaler сперва пытался обновить запросы и лимиты ресурсов без перезапуска пода. Если такое обновление недоступно, под будет пересоздан аналогично режимуRecreate. Подробнее на странице Resize CPU and Memory Resources assigned to Containers .
Подробнее о Vertical Pod Autoscaler в документации Kubernetes