Введение
В этом практическом занятии вы узнаете, как повысить статус рабочего узла до статуса управляющего узла в кластере Docker Swarm. Вы начнете с инициализации кластера Docker Swarm на виртуальной машине LabEx и присоединения рабочего узла к нему.
После настройки вы определите рабочий узел в кластере, а затем используете команду docker node promote, чтобы изменить его роль на управляющую. Наконец, вы проверите новую роль узла, чтобы убедиться, что повышение статуса прошло успешно. Это практическое упражнение продемонстрирует важный аспект управления кластером Docker Swarm.
Инициализация Docker Swarm
На этом шаге вы инициализируете кластер Docker Swarm на виртуальной машине LabEx. Кластер Docker Swarm представляет собой группу (кластер) узлов Docker, работающих в режиме swarm. Режим swarm позволяет управлять кластером узлов Docker как единым виртуальным системой.
Перед инициализацией кластера проверим текущую версию Docker, установленную на виртуальной машине.
docker version
Вы должны увидеть вывод, похожий на следующий, который указывает на то, что версия Docker - 20.10.21:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.9
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.18.9
Git commit: 363bd3a
Built: Tue Oct 25 17:59:35 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2bb63a5d10182b7e90689158e7c7b9b06b
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Теперь инициализируем кластер Docker Swarm. При инициализации кластера текущий узел становится первым управляющим узлом. Управляющие узлы выполняют задачи управления кластером, такие как сохранение состояния кластера, планирование сервисов и предоставление API режима swarm.
Используйте команду docker swarm init для инициализации кластера. Мы укажем адрес для объявления (advertise address), чтобы другие узлы могли присоединиться к кластеру с использованием IP - адреса виртуальной машины. Замените YOUR_VM_IP_ADDRESS на фактический IP - адрес вашей виртуальной машины LabEx. Вы можете найти этот IP - адрес в деталях среды LabEx.
docker swarm init --advertise-addr YOUR_VM_IP_ADDRESS
После выполнения команды вы увидите вывод, который указывает, что кластер был инициализирован, и предоставляет команду для присоединения других узлов к кластеру в качестве рабочих узлов. Сохраните эту команду для присоединения, так как вам понадобится в следующем шаге.
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Присоединение рабочего узла к кластеру Swarm
На предыдущем шаге вы инициализировали кластер Docker Swarm, и текущий узел стал управляющим. Теперь вы имитируете присоединение рабочего узла к этому кластеру. В реальной ситуации вы бы выполнили этот шаг на отдельной машине, которую хотите присоединить как рабочий узел. Однако в этом практическом занятии мы используем ту же виртуальную машину для имитации присоединения рабочего узла к кластеру.
Для присоединения узла в качестве рабочего вам нужна команда присоединения, предоставленная после инициализации кластера. Эта команда включает токен присоединения к кластеру (swarm join token), а также IP - адрес и порт управляющего узла.
Если у вас нет команды присоединения из предыдущего шага, вы можете получить ее на управляющем узле с помощью команды docker swarm join-token worker.
docker swarm join-token worker
Эта команда выведет команду присоединения для рабочего узла:
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
Теперь выполните полученную команду присоединения. Поскольку мы имитируем рабочий узел на той же виртуальной машине, вы запустите эту команду в том же терминале.
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
Вы должны увидеть вывод, указывающий, что узел присоединился к кластеру в качестве рабочего:
This node joined a swarm as a worker.
Это означает, что ваша единственная виртуальная машина теперь действует как управляющий и рабочий узел в рамках кластера.
Просмотр списка узлов кластера Swarm и определение рабочего узла
На предыдущих шагах вы инициализировали кластер Docker Swarm, а затем присоединили тот же узел к кластеру в качестве рабочего. Теперь выведем список узлов в кластере, чтобы увидеть текущее состояние и определить роли каждого узла.
Для вывода списка узлов в кластере используйте команду docker node ls. Эта команда предоставляет информацию о каждом узле в кластере, включая его идентификатор (ID), имя узла (hostname), статус, доступность, статус управляющего узла и версию Docker Engine.
docker node ls
Вы должны увидеть вывод, похожий на следующий:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active Leader 20.10.21
yyyyyyyyyyyy labex-vm Ready Active 20.10.21
В этом выводе вы увидите две записи, обе с именем узла labex-vm. Это происходит потому, что ваша единственная виртуальная машина действует как два узла в кластере: один управляющий и один рабочий.
- Узел с
MANAGER STATUSравнымLeader- это управляющий узел, который вы инициализировали на первом шаге. - Узел без указанного
MANAGER STATUS- это рабочий узел, который вы присоединили на втором шаге.
Запишите идентификатор (ID) рабочего узла. Вам понадобится этот идентификатор на следующем шаге, чтобы повысить его до статуса управляющего узла. Идентификатор - это уникальный идентификатор каждого узла в кластере.
Повышение статуса рабочего узла до менеджера
На предыдущем шаге вы вывели список узлов в кластере и идентифицировали рабочий узел по его идентификатору (ID) и отсутствию статуса MANAGER STATUS. Теперь вы повышаете этот рабочий узел до статуса управляющего узла. Повышение статуса рабочего узла до управляющего увеличивает количество управляющих узлов в вашем кластере, что важно для обеспечения высокой доступности и отказоустойчивости в производственной среде.
Для повышения статуса узла используйте команду docker node promote, за которой следует идентификатор (ID) узла, который вы хотите повысить. Вы получили идентификатор рабочего узла на предыдущем шаге.
Замените WORKER_NODE_ID на фактический идентификатор вашего рабочего узла.
docker node promote WORKER_NODE_ID
После выполнения команды вы должны увидеть вывод, подтверждающий, что узел был повышен в статусе:
Node WORKER_NODE_ID was promoted to a manager.
Это означает, что узел, который ранее был рабочим, теперь также является управляющим узлом в вашем кластере. Теперь в вашем кластере есть два управляющих узла (хотя они оба работают на одной физической виртуальной машине в этой имитационной среде).
Проверка новой роли узла
На предыдущем шаге вы повысили рабочий узел до статуса управляющего. Теперь проверим, что роль узла была успешно обновлена, выведя список узлов в кластере еще раз.
Используйте команду docker node ls для вывода списка узлов.
docker node ls
На этот раз вы должны увидеть вывод, похожий на следующий:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active Leader 20.10.21
yyyyyyyyyyyy labex-vm Ready Active Reachable 20.10.21
Обратите внимание, что узел, который ранее был перечислен без статуса MANAGER STATUS, теперь показывает Reachable в столбце MANAGER STATUS. Это подтверждает, что узел был успешно повышен в статусе и теперь кластер распознает его как управляющий узел. Узел со статусом Leader - это основной управляющий узел, в то время как узел со статусом Reachable - это вторичный управляющий узел.
Наличие нескольких управляющих узлов в кластере обеспечивает избыточность. Если основной управляющий узел становится недоступным, другой управляющий узел может взять на себя его роль, обеспечивая непрерывную работу кластера.
Резюме
В этом практическом занятии вы научились инициализировать Docker Swarm на одном узле, делая его первым управляющим узлом. Затем вы попрактиковались в присоединении рабочего узла к этому кластеру, расширяя его. В рамках практического занятия вас научили выводить список узлов кластера для идентификации только что добавленного рабочего узла. Наконец, вы выполнили ключевое действие - повысили статус рабочего узла до управляющего с помощью команды docker node promote и проверили успешное изменение роли.



