Как защитить узлы от автоматического перезапуска
В Комплексе предусмотрен механизм автоматического перезапуска узлов в случаях изменения конфигурации узлов и обновления кластера. При автоматическом перезапуске узла выполняются действия:
Cordon;Drain;Reboot.
При необходимости можно защитить узлы кластера от автоматического перезапуска при помощи специальных лейблов. Это применимо для случаев, когда перед Drain или перезагрузкой узла кластера необходимо выполнить какие либо операции.
Последовательность действий будет такой:
- установить запрет на
Drainузлов; - внести необходимые изменения;
- проверить, что конфигурация узла получила "condition reboot required";
- установить разрешение применять изменения без
Drainузла поверх запрета наDrain; - дождаться перезагрузки узла или применения конфигурации;
- снять разрешение применять изменения без
Drainузла.
Команды необходимо выполнять, прописывая название узла вместо "my-special-node".
Последовательность действий подразумевает следующие шаги:
- для запрета
Drainузла установить лейбл node.shturval.tech/disable-drain с помощью команды (результат — на рисунке 97):
kubectl label node my-special-node node.shturval.tech/disable-drain=

Рисунок 97 ‒ Результат команды
- для проверки установки лейбла выполнить команду (результат — на рисунке 98):
kubectl get node my-special-node -o jsonpath='{.metadata.labels}' | jq -r

Рисунок 98 ‒ Результат команды
Следует обратить внимание, что требуется выполнить необходимые действия по подготовке узла к перезапуску. После выполнения действий нужно выполнить Drain. Лейбл disable-drain блокирует только автоматический Drain узла.
- установить разрешение для применения изменений с помощью лейбла node.shturval.tech/apply-as-is. Следует обратить внимание, что лейбл apply-as-is разрешает немедленное применение изменений без проверки, был ли проведен
Drainузла (результат — на рисунке 99):
kubectl label node my-special-node node.shturval.tech/apply-as-is=

Рисунок 99 ‒ Результат команды
- проверить, что конфигурация узла (nodeconfig) применена и имеет статус
ready=true(результат — на рисунке 100):
kubectl get nodeconfig my-special-node -o jsonpath='{.status.ready}'

Рисунок 100 ‒ Результат команды
- обязательно снять лейбл node.shturval.tech/apply-as-is с узла для отключения разрешения на безусловное применение изменений на узел, выполнив команду (результат — на рисунке 101):
kubectl label node my-special-node node.shturval.tech/apply-as-is-

Рисунок 101 ‒ Результат команды
Следует обратить внимание, что на вашем узле остается установленным лейбл node.shturval.tech/disable-drain, блокирующий Drain узла.