Como usar o comando docker swarm leave para remover nós

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar nós dentro de um Docker Swarm usando o comando docker swarm leave. Você começará inicializando um Docker Swarm e juntando um nó de trabalho a ele. Posteriormente, você praticará a remoção do nó de trabalho do swarm. Finalmente, você explorará o processo de remoção de um nó gerente (manager node), incluindo a necessidade de usar a opção force.

Inicializar um Docker Swarm

Nesta etapa, você aprenderá como inicializar um Docker Swarm. Um Docker Swarm é um cluster de hosts Docker que estão rodando em modo swarm. O modo swarm permite que você gerencie um cluster de nós Docker como um único sistema virtual.

Antes de inicializar o swarm, vamos verificar a versão atual do Docker instalada na VM do LabEx.

docker version

Você deve ver uma saída semelhante a esta, indicando que a versão do 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

Para inicializar um Docker Swarm, você usa o comando docker swarm init. Este comando transforma o host Docker atual em um manager do swarm.

docker swarm init

Após executar o comando, você verá uma saída indicando que o swarm foi inicializado e fornecendo um comando para juntar outros nós como workers. A saída será semelhante a esta:

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.

A saída mostra que o nó atual é agora um manager do swarm. Ele também fornece o comando para juntar um nó worker a este swarm. Usaremos este comando na próxima etapa.

Você pode verificar o status do swarm usando o comando docker info.

docker info

Procure a seção "Swarm" na saída. Ela deve indicar que o swarm está "ativo".

...
 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
...

Isso confirma que o Docker Swarm foi inicializado com sucesso neste nó.

Juntar um nó worker ao swarm

Na etapa anterior, inicializamos um Docker Swarm e a saída forneceu um comando para juntar um nó worker. Em um cenário real, você executaria este comando em uma máquina separada que deseja adicionar como worker ao seu swarm. No entanto, como estamos usando uma única VM do LabEx, simularemos a junção de um nó worker usando o comando join na mesma máquina.

Primeiro, vamos recuperar o comando join para um nó worker. Você pode obter o token de join e o comando executando docker swarm join-token worker no nó manager (que é nossa VM atual).

docker swarm join-token worker

A saída será semelhante a esta:

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

Copie o comando completo docker swarm join --token ... da saída. Este comando contém o token único e o endereço IP e a porta do manager do swarm.

Agora, execute o comando copiado para juntar o nó atual ao swarm como um worker.

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

Substitua o token e o endereço IP pelos valores que você obteve do comando docker swarm join-token worker.

Você deve ver uma saída indicando que o nó se juntou ao swarm como um worker:

This node joined a swarm as a worker.

Para verificar se o nó se juntou ao swarm, você pode listar os nós no swarm da perspectiva do manager. Como nossa única VM está atuando como manager e worker, podemos usar o comando docker node ls.

docker node ls

A saída mostrará os nós no swarm. Você deve ver duas entradas para o mesmo ID do nó, uma com o status "Ready" e a função "Manager", e outra com o status "Ready" e a função "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

Isso confirma que o nó se juntou com sucesso ao swarm como um worker.

Sair do swarm de um nó worker

Na etapa anterior, juntamos com sucesso o nó ao swarm como um worker. Agora, aprenderemos como remover um nó do swarm. Para sair de um swarm de um nó worker, você usa o comando docker swarm leave.

Execute o seguinte comando para fazer com que o nó atual saia do swarm como um worker:

docker swarm leave

Você deve ver uma saída indicando que o nó saiu do swarm:

Node left the swarm.

Agora, vamos verificar se o nó saiu do swarm. Podemos usar o comando docker node ls novamente. No entanto, como o nó saiu do swarm, executar docker node ls neste nó resultará em um erro porque ele não faz mais parte do swarm.

docker node ls

Você verá uma mensagem de erro semelhante a esta:

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

Este erro confirma que o nó não faz mais parte do swarm.

Para verificar ainda mais, vamos verificar o status do swarm usando docker info.

docker info

A seção "Swarm" na saída agora deve indicar que o swarm está "inativo".

...
 Swarm: inactive
...

Isso confirma que o nó saiu com sucesso do Docker Swarm.

Tentar sair do swarm de um nó manager sem forçar

Na etapa anterior, removemos com sucesso um nó worker do swarm. Agora, vamos ver o que acontece quando tentamos remover um nó manager usando o mesmo comando docker swarm leave sem nenhuma opção adicional.

Execute o seguinte comando para tentar sair do swarm do nó manager:

docker swarm leave

Você receberá uma mensagem de erro semelhante a esta:

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.

Esta mensagem de erro indica que você não pode simplesmente sair de um swarm de um nó manager sem forçá-lo explicitamente. Este é um mecanismo de segurança para evitar a interrupção acidental do swarm, especialmente em uma configuração multi-manager.

Para confirmar que o nó ainda é um manager e faz parte do swarm, você pode usar o comando docker info.

docker info

A seção "Swarm" ainda deve mostrar "active" e "Is Manager: true".

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

Isso confirma que a tentativa de sair do swarm sem a flag force foi malsucedida, e o nó permanece um manager do swarm.

Forçar um nó manager a sair do swarm

Na etapa anterior, aprendemos que um nó manager não pode sair do swarm sem usar a flag --force. Isso serve para evitar a interrupção acidental do swarm. Nesta etapa, usaremos a flag --force para fazer com que o nó manager saia do swarm.

Nota Importante: Forçar um nó manager a sair do swarm pode interromper o swarm, especialmente se for o último manager. Use este comando com cautela em um ambiente de produção.

Execute o seguinte comando para forçar o nó manager a sair do swarm:

docker swarm leave --force

Você deve ver uma saída indicando que o nó saiu do swarm:

Node left the swarm.

Agora, vamos verificar se o nó saiu com sucesso do swarm. Podemos usar o comando docker info.

docker info

A seção "Swarm" na saída agora deve indicar que o swarm está "inativo".

...
 Swarm: inactive
...

Isso confirma que o nó manager saiu com sucesso do Docker Swarm usando a flag --force. O swarm não existe mais neste nó.

Resumo

Neste laboratório, aprendemos como inicializar um Docker Swarm usando o comando docker swarm init, que designa o nó atual como um manager e fornece o comando para que outros nós se juntem. Em seguida, praticamos a junção de um nó worker ao swarm recém-criado.

Posteriormente, exploramos como remover nós do swarm usando o comando docker swarm leave, demonstrando primeiro como um nó worker pode sair do swarm. Em seguida, tentamos usar o mesmo comando em um nó manager sem a opção force, observando que ele não é permitido por padrão. Finalmente, forçamos com sucesso um nó manager a sair do swarm usando a flag --force.