Автомасштабирование группы нод
Автомасштабирование недоступно для групп нод с GPU без драйверов.
В кластере Managed Kubernetes на облачном сервере автомасштабирование групп нод происходит с помощью Cluster Autoscaler. Он помогает оптимально использовать ресурсы кластера — в зависимости от нагрузки на кластер количество нод в группе будет автоматически уменьшаться или увеличиваться.
Устанавливать в кластере Cluster Autoscaler не требуется.
Включить автомасшабирование группы нод можно в панели управления, через API Managed Kubernetes или через Terraform.
Для автомасштабирования подов в Managed Kubernetes используется Metrics Server.
Принцип работы
Минимальное и максимальное количество нод в группе можно задать при включении автомасштабирования — Cluster Autoscaler будет менять количество нод только в этих пределах.
Если группа нод находится в статусе ACTIVE
, Cluster Autoscaler каждые 10 секунд проверяет, есть ли поды (Pod) в статусе PENDING
, и анализирует нагрузку — запросы от подов на vCPU, RAM и GPU. В зависимости от результатов проверки ноды добавляются или удаляются. Группа нод в это время переходит в статус PENDING_SCALE_UP
или PENDING_SCALE_DOWN
. Статус кластера во время автомасштабирования — ACTIVE
.
Подробнее о статусах кластера в инструкции Посмотреть статус кластера.
Добавление ноды
Если есть поды в статусе PENDING
и в кластере не хватает свободных ресурсов для их размещения, в кластер добавляется необходимое количество нод. В кластере с версией Kubernetes 1.28 и выше Cluster Autoscaler будет работать сразу в нескольких группах и распределять ноды равном ерно.
Например, у вас две группы нод с включенным автомасштабированием. Нагрузка на кластер увеличилась и требует добавления четырех нод. В каждой группе нод будет одновременно создано по две новые ноды.
В кластере с версией Kubernetes 1.27 и ниже ноды добавляются по одной за цикл проверки.
Удаление ноды
Если нет подов в статусе PENDING
, Cluster Autoscaler проверяет количество ресурсов, которые запрашивают поды.
Если общее количество ресурсов, которые запрашивают поды на одной ноде, меньше 50% от ее ресурсов, то Cluster Autoscaler помечает н оду как ненужную. Если на ноде через 10 минут не вырастет количество запросов на ресурсы, Cluster Autoscaler проверит, можно ли перенести поды на другие ноды.
Cluster Autoscaler не перенесет поды и, соответственно, не удалит ноду, если выполняется одно из условий:
- поды используют PodDisruptionBudget;
- в Kube-system подах нет PodDisrptionBudget;
- поды созданы без контроллера — например, Deployment, ReplicaSet, StatefulSet;
- поды используют local storage;
- на других нодах нет ресурсов под запросы пода;
- есть несоответствие nodeSelector, правил affinity/anti-affinity или других параметров.
Вы можете разрешить таким подам перенос — для этого добавьте аннотацию:
cluster-autoscaler.kubernetes.io/safe-to-evict: "true"