Как использовать команду docker swarm leave для удаления узлов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь управлять узлами в кластере Docker Swarm с помощью команды docker swarm leave. Вы начнете с инициализации кластера Docker Swarm и присоединения рабочего узла к нему. Затем вы попрактикуетесь в удалении рабочего узла из кластера. Наконец, вы изучите процесс удаления управляющего узла, включая необходимость использования опции принудительного удаления (force option).


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/ls -.-> lab-555243{{"Как использовать команду docker swarm leave для удаления узлов"}} docker/ps -.-> lab-555243{{"Как использовать команду docker swarm leave для удаления узлов"}} docker/info -.-> lab-555243{{"Как использовать команду docker swarm leave для удаления узлов"}} docker/version -.-> lab-555243{{"Как использовать команду docker swarm leave для удаления узлов"}} end

Инициализация кластера Docker Swarm

На этом этапе вы научитесь инициализировать кластер Docker Swarm. Кластер Docker Swarm представляет собой группу (кластер) узлов Docker, работающих в режиме кластера (swarm mode). Режим кластера позволяет управлять группой узлов Docker как единым виртуальным системой.

Перед инициализацией кластера проверим текущую версию Docker, установленную на виртуальной машине LabEx.

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:        baedd2a
 Built:             Tue Oct 25 17:58:10 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:       305620d
  Built:            Tue Oct 25 17:56:51 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        b4bd567ea6c98e7b5d78a23676a0a79559d930d5
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Для инициализации кластера Docker Swarm используйте команду docker swarm init. Эта команда превращает текущий узел Docker в управляющий узел (manager) кластера.

docker swarm init

После выполнения команды вы увидите вывод, который указывает, что кластер был инициализирован, и предоставит команду для присоединения других узлов в качестве рабочих узлов (workers). Вывод будет похож на следующий:

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-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Вывод показывает, что текущий узел теперь является управляющим узлом кластера. Он также предоставляет команду для присоединения рабочего узла к этому кластеру. Мы будем использовать эту команду на следующем этапе.

Вы можете проверить статус кластера с помощью команды docker info.

docker info

Найдите раздел "Swarm" в выводе. Он должен показывать, что кластер находится в статусе "active" (активен).

...
 Swarm: active
  NodeID: xxxxxxxxxxxx
  Is Manager: true
  ClusterID: xxxxxxxxxxxx
  Managers: 1
  Nodes: 1
  Orchestration:
   TaskHistoryRetentionLimit: 5
  Raft:
   HeartbeatInterval: 100ms
   ElectionTimeout: 3s
   SnapshotInterval: 500ms
  Dispatcher:
   HeartbeatPeriod: 5s
  CA configuration:
   Expiry duration: 3 months
   Force rotate at: 7 weeks
  Root Rotation: false
  Local Node State: active
  Error: none
  Remote Manager:
   ID: xxxxxxxxxxxx
   Addr: 172.17.0.2:2377
   Addr: 172.17.0.2:2377
  Node Address: 172.17.0.2
  Manager Status:
   Cluster Address: 172.17.0.2:2377
   Leader: Yes
   Reachability: Reachable
...

Это подтверждает, что кластер Docker Swarm был успешно инициализирован на этом узле.

Присоединение рабочего узла к кластеру

На предыдущем этапе мы инициализировали кластер Docker Swarm, и в выводе была предоставлена команда для присоединения рабочего узла. В реальной ситуации вы бы выполнили эту команду на отдельной машине, которую хотите добавить в кластер как рабочий узел. Однако, так как мы используем одну виртуальную машину LabEx, мы будем симулировать присоединение рабочего узла, выполнив команду присоединения на той же машине.

Сначала получим команду присоединения для рабочего узла. Вы можете получить токен присоединения и команду, запустив 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-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

Скопируйте полную команду docker swarm join --token ... из вывода. Эта команда содержит уникальный токен, а также IP - адрес и порт управляющего узла кластера.

Теперь выполните скопированную команду, чтобы присоединить текущий узел к кластеру как рабочий узел.

docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

Замените токен и IP - адрес значениями, полученными из команды docker swarm join-token worker.

Вы должны увидеть вывод, указывающий, что узел присоединился к кластеру как рабочий узел:

This node joined a swarm as a worker.

Чтобы убедиться, что узел присоединился к кластеру, вы можете вывести список узлов в кластере с точки зрения управляющего узла. Поскольку наша единственная виртуальная машина выступает как управляющий и рабочий узел одновременно, мы можем использовать команду docker node ls.

docker node ls

Вывод покажет узлы в кластере. Вы должны увидеть две записи для одного и того же идентификатора узла, одна с статусом "Ready" и ролью "Manager", а другая с статусом "Ready" и ролью "Worker".

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xxxxxxxxxxxx *                labex-vm            Ready               Active              Leader              20.10.21
xxxxxxxxxxxx                  labex-vm            Ready               Active                              20.10.21

Это подтверждает, что узел успешно присоединился к кластеру как рабочий узел.

Выход рабочего узла из кластера

На предыдущем этапе мы успешно присоединили узел к кластеру как рабочий узел. Теперь мы узнаем, как удалить узел из кластера. Чтобы выйти из кластера с рабочего узла, используйте команду docker swarm leave.

Выполните следующую команду, чтобы текущий узел вышел из кластера как рабочий узел:

docker swarm leave

Вы должны увидеть вывод, указывающий, что узел вышел из кластера:

Node left the swarm.

Теперь убедимся, что узел вышел из кластера. Мы можем снова использовать команду docker node ls. Однако, так как узел вышел из кластера, выполнение docker node ls на этом узле вызовет ошибку, так как он больше не является частью кластера.

docker node ls

Вы увидите сообщение об ошибке, похожее на следующее:

Error: This node is not a swarm manager. Use "docker swarm join" to join the swarm and try again.

Эта ошибка подтверждает, что узел больше не является частью кластера.

Для дальнейшей проверки проверим статус кластера с помощью команды docker info.

docker info

Раздел "Swarm" в выводе теперь должен показывать, что кластер находится в статусе "inactive" (неактивен).

...
 Swarm: inactive
...

Это подтверждает, что узел успешно вышел из кластера Docker Swarm.

Попытка выхода из кластера с управляющего узла без принудительного режима

На предыдущем этапе мы успешно удалили рабочий узел из кластера. Теперь посмотрим, что произойдет, если мы попытаемся удалить управляющий узел, используя ту же команду docker swarm leave без дополнительных параметров.

Выполните следующую команду, чтобы попытаться выйти из кластера с управляющего узла:

docker swarm leave

Вы получите сообщение об ошибке, похожее на следующее:

Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Use the --force flag to force the node to leave the swarm. Note that this may disrupt the swarm, so use this option with caution.

Это сообщение об ошибке показывает, что нельзя просто выйти из кластера с управляющего узла без явного принудительного выхода. Это механизм безопасности, чтобы предотвратить случайное нарушение работы кластера, особенно в конфигурации с несколькими управляющими узлами.

Чтобы убедиться, что узел по-прежнему является управляющим и остается частью кластера, вы можете использовать команду docker info.

docker info

Раздел "Swarm" должен по-прежнему показывать "active" (активен) и "Is Manager: true" (является управляющим).

...
 Swarm: active
  NodeID: xxxxxxxxxxxx
  Is Manager: true
...

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

Принудительный выход управляющего узла из кластера

На предыдущем этапе мы узнали, что управляющий узел не может выйти из кластера без использования флага --force. Это сделано для предотвращения случайного нарушения работы кластера. На этом этапе мы используем флаг --force, чтобы заставить управляющий узел выйти из кластера.

Важное примечание: Принудительный выход управляющего узла из кластера может нарушить работу кластера, особенно если это последний управляющий узел. Используйте эту команду с осторожностью в производственной среде.

Выполните следующую команду, чтобы принудительно заставить управляющий узел выйти из кластера:

docker swarm leave --force

Вы должны увидеть вывод, указывающий, что узел вышел из кластера:

Node left the swarm.

Теперь убедимся, что узел успешно вышел из кластера. Мы можем использовать команду docker info.

docker info

Раздел "Swarm" в выводе теперь должен показывать, что кластер находится в статусе "inactive" (неактивен).

...
 Swarm: inactive
...

Это подтверждает, что управляющий узел успешно вышел из кластера Docker Swarm с использованием флага --force. Кластер больше не существует на этом узле.

Резюме

В этом практическом занятии (лабораторной работе) мы научились инициализировать кластер Docker Swarm с помощью команды docker swarm init, которая назначает текущий узел управляющим и предоставляет команду для присоединения других узлов. Затем мы практиковали присоединение рабочего узла к только что созданному кластеру.

Затем мы изучили, как удалять узлы из кластера с помощью команды docker swarm leave, сначала показав, как рабочий узел может выйти из кластера. Затем мы попытались использовать ту же команду на управляющем узле без опции принудительного выхода и обнаружили, что это по умолчанию не разрешено. Наконец, мы успешно заставили управляющий узел выйти из кластера с использованием флага --force.