Настроить автомасштабирование группы нод
Автоматическое масштабирование кластера недоступно:
- в группах нод с GPU без драйверов;
- группах нод на выделенных серверах.
В кластере Managed Kubernetes на облачном сервере можно настроить автоматическое масштабирование групп нод с помощью Cluster Autoscaler. Он помогает оптимально использовать ресурсы кластера — в зависимости от нагрузки на кластер количество нод в группе будет автоматически уменьшаться или увеличиваться.
Включить автомасшабирование группы нод можно в панели управления, через Managed Kubernetes API или Terraform — устанавливать в кластере Cluster Autoscaler не требуется.
Для автомасштабирования подов в Managed Kubernetes используется Metrics Server.
Принцип работы
Минимальное и максимальное количество нод в группе можно задать при включении автомасштабирования — Cluster Autoscaler будет менять количество нод только в этих пределах.
Cluster Autoscaler проверяет наличие подов (Pod) в статусе PENDING
(в ожидании) каждые 10 секунд и анализирует нагрузку — запросы на ресурсы (vCPU и RAM) от подов. В зависимости от результатов проверки ноды добавляются или удаляются.
Добавление ноды
Если есть под в статусе PENDING
и в кластере не хватает свободных ресурсов для размещения пода, в кластер добавляется нода.
Если после создания одной ноды остались поды в статусе PENDING
, то добавляются еще ноды — по одной за цикл проверки.
Удаление ноды
Если нет подов в статусе 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"
Если ограничений нет, поды будут перенесены, а малонагруженная нода удалится. Ноды удаляются по одной за цикл проверки.
Рекомендации
Для оптимальной работы Cluster Autoscaler мы рекомендуем:
- убедиться, что в проекте есть квоты на vCPU, RAM и объем диска для создания максимального количества нод в группе;
- указать в манифестах для подов запросы на ресурсы;
- проверить, что ноды в группе имеют одинаковую конфигурацию и лейблы;
- настроить для подов, для которых не допустимы остановки, PodDisruptionBudget. Это поможет избежать даунтайма при переносе между нодами;
- не использовать другие Cluster Autoscaler;
- не изменять ресурсы ноды вручную через панель управления. Cluster Autoscaler не будет учитывать эти изменения, и все новые ноды будут созданы с первоначальной конфигурацией.
Включить автомасштабирование
Когда вы создали группу нод в кластере, вы можете включить для неё автомасштабирование.
Автомасштабирование происходит, только если кластер находится в статусе ACTIVE
.
Если установить минимальное количество нод в группе больше, чем текущее количество, оно не увеличится до нижней границы сразу. Группа нод будет масштабироваться только после появления подов в статусе PENDING
. Так же и с верхней границей нод в группе — если текущее количество нод больше верхней границы, удаление начнется только после проверки подов.
- В панели управления перейдите в раздел Облачная платформа → Kubernetes.
- Откройте страницу кластера → вкладка Состав кластера.
- В меню группы нод выберите Управление автомасштабированием.
- Отметьте чекбокс Включить автомасштабирование. Установите минимальное и максимальное количество нод в группе — значение нод будет меняться только в этом диапазоне.
- Нажмите Сохранить.