среда, 10 февраля 2021 г.

docker swarm leave vs docker node rm

Обе эти команды по имеют очень похожее описание.  Вот описания этих команд из документации

$ docker node rm --hel

Usage:  docker node rm [OPTIONS] NODE [NODE...]

Remove one or more nodes from the swarm

 

$ docker swarm leave --help

Usage:  docker swarm leave [OPTIONS]

Leave the swarm


И действительно, по факту обе эти команды делают очень похожие вещи - удаляют нод из swarm, но тем не менее отличия менее отличия все же есть. Давайте их разберем.

  1. Команда docker swarm leave выполняется именно с той ноды, которая должна покинуть swarm. Причем, нод-менеджер не может покинуть swarm, его вначале надо перевести на позицию "рабочего" (worker). После выполнения команды swarm leave у нода все еще есть ID и он виден в списке нодов. 
  2. Команда docker node rm выполнятся только из ноды с ролью менеджера. Причем, при попытке выполнить эту команду над активным нодом, мы получаем сообщение, что нод вначале должен покинуть (leave) swarm. 

Error response from daemon: rpc error: code = FailedPrecondition desc = node ijcmw84ypkt9dx9j9wmk9zi1h is not down and can't be removed

Тем не менее активный нод, все же можно удалить, применив ключ force но таски которые исполняются на этом ноде не успеют  корректно завершиться.

По итогу "православный" алгоритм выглядит так (рассмотрим на примере кластера из 5 нодов, будем удалять нод с именем manager3)


1. Так как нод который должен покинуть swarm - имеет роль  manager, его надо вначале перевести в разряд рабочих ( worker node)



2. Затем на  ноде, который должен покинуть swarm выполняется команда docker swarm leave


3. Нод уже не в swarm и сервисы не будут его использовать для запуска задач. При этом у него все еще есть ID и он виден в списке нодов. 


4. И в конце, нод удаляется из списка нодов командой docker node rm


Вернуть нод в  swarm можно как обычно, командой docker swarm join.


Комментариев нет: