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.



