Kubernetes
December 11, 2023

Поскейлить автомасштабируемую группу узлов в 0 не выйдет

В отличие от фиксированной группы.

С даунскейлом нод группы действительно могут возникать проблемы. Это происходит в случае когда на всех нодах автомасштабируемой группы находятся системные поды, которые не могут эвакуироваться с неё. Такое поведение может наблюдаться с подами CoreDNS, которые управляются PDB. Или некоторыми компонентами CNI, у которых есть хранилище emptydir.

Если в кластере есть одна автомасштабируемая нод группа, то такую группу поскейлить в 0 не получится. Так как этому будут препятствовать системные поды. Которые будут хотеть приземлиться на ноду. А контроллер будет заботливо эту ноду создавать. Поэтому всегда будет минимум одна нода.

В тоже время, если создать фиксированную группу, то такую группу можно поскейлить в 0. Так как вы сами управляете числом нод в группе, а не контроллер.

Это можно сделать с помощью команды:

yc k8s node-group update <id_node_group> --fixed-size=0

Также стоит учесть, что самостоятельно системные поды не уедут с ноды, если её не задрейнить. Для этого поможет команда:

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data --force

Но если в кластере несколько нод групп из которых одна масштабируемая, то такую группу поскейлить в 0 можно. В этом случае системные поды можно эвакуировать на нод группу с фиксированным числом нод.

Поэтому, если необходимо иметь возможность скейлить одну или несколько масштабируемых нод групп в ноль, то при их создании необходимо выбрать минимально количество ВМ в группе - ноль. Также иметь группу, можно с минимальной конфигурацией, куда системные поды будут эвакуироваться в случае дрейна нод из масштабируемой группы.