Kubernetes
October 12, 2023

Обновление нод группы с противоречивыми настройками масштабирования и развёртывания. Эксперимент

Иногда для нод группы задают противоречивые настройки в секциях Масштабирование и Развёртывание в автомасштабируемой группе. Как будет проходить процесс обновления в такой группе?

Приведу пример настроек противоречащих друг другу.

scale_policy:
  auto_scale:
    min_size: "2"
    max_size: "3"
    initial_size: "2"
deploy_policy:
  max_unavailable: "1"
  max_expansion: "2"

При создании нод группы создалось две ноды, максимальное количество нод может быть три. Но при этом настройка max_expansion = 2, что предполагает, что нод может быть четыре. Как поведёт себя k8s при обновлении нод группы в данной ситуации?

При обновлении создаётся только одна нода. Таким образом у настройки max_size приоритет перед настройкой max_expansion.

Рассмотрим ещё один пример. Здесь создаётся нод группа с одними характеристиками, потом у неё они меняются. Как поведёт себя обновление в этой ситуации?

Изначально у нод группы были следующие настройки:

scale_policy:
  auto_scale:
    min_size: "1"
    max_size: "3"
    initial_size: "1"
deploy_policy:
  max_unavailable: "1"
  max_expansion: "2"

Затем мы их изменили:

scale_policy:
  auto_scale:
    min_size: "2"
    max_size: "3"
    initial_size: "2"
deploy_policy:
  max_unavailable: "1"
  max_expansion: "2"

Если на нодах нет нагрузки, то автоматически она не поскейлится. Для скейла нод, необходимо подать нагрузку. Например, создав деплоймент с большим количеством реплик.

Если оставить одну ноду, то при обновлении ревизии новая нода может не добавиться, а начнёт обновляться текущая, что может привести к потере связи с сервисами.