Top.Mail.Ru

Облако

Автомасштабирование кластера (Cluster Autoscaler)

Cluster Autoscaler — это компонент MKaaS, который автоматически меняет количество воркер-нод в вашем кластере в зависимости от текущей нагрузки. Он добавляет новые ноды, когда приложениям не хватает ресурсов, и удаляет лишние, когда нагрузка снижается. Это позволяет не думать о ручном масштабировании инфраструктуры и не переплачивать за простаивающие ресурсы.

Автоскейлер анализирует состояние кластера примерно раз в минуту и после каждой проверки принимает одно из решений:

- добавить ноды (Scale Up);
- удалить ноды (Scale Down);
- ничего не менять.

Важно. Решения принимаются не по фактической загрузке CPU или памяти, а по ресурсам, запрошенным в манифестах подов (Resource Requests). Если под запросил 4 CPU, но реально использует 5%, для автоскейлера эти 4 CPU всё равно считаются занятыми — освободить их сможет только удаление или изменение самого пода.

Поэтому показатели в мониторинге (Grafana, Prometheus, `kubectl top`) и логика автоскейлера могут расходиться: нода может выглядеть почти пустой по факту использования, но при этом считаться полностью занятой, если ресурсы под неё были заранее зарезервированы.

Масштабирование вверх запускается, если в кластере появляются поды, которые невозможно разместить на существующих нодах. Автоскейлер сам определяет, в какой пул нод добавить ресурсы, и сколько нод потребуется.

Расширение кластера не произойдёт, если:

- под не помещается даже на новую ноду выбранного пула;
- пул уже достиг максимального размера, заданного в настройках;
- ограничения планирования (например, правила размещения подов) не позволяют разместить под даже после добавления ноды.
Нода удаляется автоматически, если одновременно выполняются условия:

- суммарные запросы ресурсов подов на ноде занимают менее 50% её ёмкости;
- нода находится в таком состоянии продолжительное время;
- все поды с этой ноды можно безопасно перенести на другие ноды.

Удаление ноды может не произойти, даже если она почти не используется. Частые причины:

- настроен PodDisruptionBudget, запрещающий выселение подов;
- на ноде запущен под, не управляемый контроллером;
- под использует локальное хранилище на этой ноде;
- правила размещения (affinity, taints, топология) не позволяют перенести под;
- на поде или ноде стоит аннотация, запрещающая удаление.
У каждого пула нод есть минимальное и максимальное количество нод, заданное в настройках кластера. Автоскейлер никогда не выйдет за эти границы — ни вверх, ни вниз.
- Указывайте Resource Requests осознанно. Именно они определяют, как быстро и насколько сильно будет масштабироваться кластер, а не реальное потребление ресурсов.
- PodDisruptionBudget защищает доступность приложения при плановых операциях (например, при Scale Down), но не спасает от аварийного отказа ноды.
- Правила размещения подов (affinity, taints/tolerations, топологические ограничения) могут привести к тому, что под останется в состоянии Pending, даже если в кластере формально есть свободные ресурсы — просто не на той ноде.

Если у вас есть приложения с особыми требованиями к размещению (например, GPU-нагрузка или строгое распределение по зонам доступности), рекомендуем заранее продумать соответствующие настройки в манифестах, чтобы автоскейлер мог корректно на них реагировать.

Мы используем cookie, чтобы сайт стал лучше для вас