Введение
В этом лабораторном занятии мы рассмотрим, как управлять ролями узлов в Docker Swarm. В частности, мы сосредоточимся на использовании команды docker node demote для изменения роли узла-менеджера на роль рабочего узла.
В рамках лабораторного занятия вы пройдете по процессу инициализации Docker Swarm, определения текущих узлов-менеджеров, выполнения команды по понижению статуса и, наконец, проверки обновленной роли узла, чтобы убедиться в успешном понижении статуса. Этот практический опыт предоставит вам полезные знания по управлению узлами Docker Swarm.
Инициализация Docker Swarm
На этом шаге мы инициализируем Docker Swarm. Docker Swarm представляет собой группу машин, на которых запущен Docker и которые объединены в кластер. После присоединения к Swarm вы можете продолжать использовать знакомые вам команды Docker, но теперь они будут выполняться менеджером Swarm. Машины в Swarm могут быть как менеджерами, так и рабочими узлами. Менеджеры выполняют задачи по управлению кластером, в то время как рабочие узлы выполняют сервисы.
Перед инициализацией Swarm проверим текущую версию Docker.
docker version
Вы должны увидеть вывод, похожий на следующий, который указывает на версию Docker, установленную на виртуальной машине LabEx:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.16.20
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.16.20
Git commit: 363bd3c
Built: Tue Oct 25 17:59:50 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2b3d85c5e9b15588d67616e19a2a3a495d
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Теперь инициализируем Docker Swarm на этой машине. Поскольку это первый узел в Swarm, он автоматически станет узлом-менеджером. Мы будем использовать команду docker swarm init.
docker swarm init
Вы должны увидеть вывод, который указывает на то, что Swarm был инициализирован и предоставляет команду для присоединения других узлов в качестве рабочих. Вывод будет похож на следующий:
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Вывод подтверждает, что Swarm инициализирован и текущий узел является менеджером. Символы xxxxxxxxxxxx будут заменены на фактический идентификатор узла.
Вывести список узлов кластера (swarm) для определения менеджеров
На этом шаге мы выведем список узлов в Docker Swarm, чтобы определить, какие узлы являются менеджерами, а какие - рабочими. Поскольку мы только что инициализировали Swarm с одним узлом, мы ожидаем увидеть только один узел в списке, и его роль должна быть "Менеджер".
Для вывода списка узлов в Swarm мы используем команду docker node ls.
docker node ls
Вы должны увидеть вывод, похожий на следующий:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
Разберем вывод:
ID: Уникальный идентификатор узла. Звездочка (*) рядом с идентификатором указывает на текущий узел, на котором вы выполняете команду.HOSTNAME: Имя узла. В данном случае этоlabex-vm.STATUS: Статус узла.Readyозначает, что узел работает исправно и готов принимать задачи.AVAILABILITY: Указывает, доступен ли узел для планирования задач.Activeозначает, что он доступен.MANAGER STATUS: Показывает роль узла в Swarm.Leaderуказывает, что этот узел является основным менеджером в Swarm. Если бы были другие менеджеры, они отображались бы какReachable. У рабочих узлов это поле было бы пустым.ENGINE VERSION: Версия Docker Engine, запущенной на узле.
Как и ожидалось, мы видим один узел в списке, и его MANAGER STATUS равен Leader, что подтверждает, что это узел-менеджер.
Понизить узел-менеджер
На этом шаге мы понизим статус текущего узла-менеджера до статуса рабочего узла. Понижение статуса узла-менеджера означает изменение его роли с управления Swarm до простого выполнения задач как рабочего узла. Это полезно в сценариях, когда необходимо уменьшить количество менеджеров или изменить роль определенного узла.
Для понижения статуса узла-менеджера мы используем команду docker node demote, за которой следует идентификатор узла или его имя. Из предыдущего шага мы знаем, что имя узла - labex-vm.
docker node demote labex-vm
Вы должны увидеть вывод, подтверждающий понижение статуса:
Node labex-vm was demoted from a manager to a worker.
Этот вывод показывает, что узел labex-vm успешно был понижен в статусе с менеджера до рабочего узла в рамках Swarm.
Проверить роль узла после понижения
На этом последнем шаге мы проверим, что роль узла успешно изменилась с менеджера на рабочего узла после операции понижения статуса. Мы снова используем команду docker node ls для вывода списка узлов в Swarm и проверки столбца MANAGER STATUS для нашего узла.
docker node ls
После выполнения команды вы должны увидеть вывод, похожий на следующий:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
Обратите внимание, что столбец MANAGER STATUS для узла labex-vm теперь пуст. Это означает, что узел больше не является менеджером и теперь действует как рабочий узел в Swarm. Звездочка (*) по-прежнему стоит рядом с идентификатором, потому что это узел, на котором вы выполняете команду, но его роль изменилась.
Это подтверждает, что понижение статуса прошло успешно.
Резюме
В этом практическом занятии (лабораторной работе) мы научились управлять узлами Docker Swarm, инициализируя кластер (swarm) и определяя узлы-менеджеры. Затем мы практиковались в использовании команды docker node demote для изменения роли узла-менеджера на роль рабочего узла. В конце мы проверили успешность понижения статуса, выведя список узлов кластера и убедившись в обновленной роли.



