Como usar o comando docker node rm para remover nós de um swarm

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar nós dentro de um Docker Swarm usando o comando docker node rm. Você começará listando os nós existentes em um swarm para identificá-los. Em seguida, tentará remover um nó em execução para entender o comportamento padrão e as limitações do comando.

Posteriormente, você explorará como remover com sucesso um nó parado do swarm. Finalmente, você aprenderá como remover à força um nó inacessível, o que é crucial para lidar com cenários em que um nó não é mais alcançável. Essa experiência prática fornecerá conhecimento prático para manter seu cluster Docker Swarm.

Listar nós existentes no swarm

Nesta etapa, você aprenderá como listar os nós que atualmente fazem parte de um Docker Swarm. Antes de listar os nós, precisamos inicializar um Docker Swarm.

Primeiro, inicialize um novo swarm na máquina atual. Esta máquina se tornará o nó gerente (manager node).

docker swarm init

Você deve ver uma saída indicando que o swarm foi inicializado e fornecendo um comando para ingressar em outros nós como trabalhadores (workers).

Agora que o swarm está inicializado, você pode listar os nós no swarm usando o comando docker node ls.

docker node ls

Este comando exibirá uma tabela mostrando os nós no swarm. Inicialmente, você verá apenas o nó gerente que acabou de inicializar. A saída incluirá informações como o ID do nó, nome do host (hostname), status, disponibilidade, status do gerente e versão do mecanismo (engine).

Por exemplo, a saída pode ser semelhante a esta:

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

O * ao lado do ID indica o nó atual em que você está. A coluna MANAGER STATUS mostra o papel do nó no swarm (por exemplo, Leader, Reachable, Unavailable).

Tentar remover um nó em execução do swarm

Nesta etapa, você tentará remover um nó que está atualmente em execução e faz parte do swarm. Isso demonstrará que você não pode simplesmente remover um nó em execução sem primeiro colocá-lo fora de serviço.

Primeiro, vamos listar os nós novamente para confirmar o ID do nó em execução.

docker node ls

Identifique o ID do nó que você deseja tentar remover. Neste caso, será o único nó listado, que é o nó gerente.

Agora, tente remover o nó usando o comando docker node rm seguido pelo ID do nó. Substitua <node_id> pelo ID real que você encontrou na etapa anterior.

docker node rm <node_id>

Você provavelmente verá uma mensagem de erro indicando que o nó é um gerente e não pode ser removido dessa forma, ou que o nó ainda está ativo. Este é o comportamento esperado. O Docker Swarm impede que você remova um nó em execução diretamente para evitar a interrupção dos serviços.

A mensagem de erro pode ser semelhante a:

Error response from daemon: node <node_id> is a swarm manager and cannot be removed without --force

Isso confirma que você não pode remover um nó gerente em execução sem usar a flag --force, que exploraremos em uma etapa posterior. Para nós trabalhadores (worker nodes), você normalmente drenaria o nó primeiro antes de removê-lo.

Remover um nó parado do swarm

Nesta etapa, você aprenderá como remover um nó do swarm que não está mais em execução ou acessível. Como temos apenas um nó (o gerente) em nosso swarm atual, primeiro simularemos um cenário em que um nó é parado, saindo do swarm no nó atual.

Primeiro, saia do swarm no nó atual. Isso impedirá que o daemon Docker participe do swarm.

docker swarm leave

Você será solicitado a confirmar que deseja sair do swarm. Digite y e pressione Enter.

Node left the swarm.

Agora, se você estivesse em um nó gerente diferente no mesmo swarm, poderia remover o nó que acabou de sair. Como estamos no único nó, vamos reinicializar o swarm para simular que estamos em um gerente diferente.

docker swarm init

Você verá a saída indicando que o swarm foi inicializado novamente.

Agora, vamos listar os nós no swarm. Você verá apenas o nó atual listado.

docker node ls

Para demonstrar a remoção de um nó parado, precisamos simular ter outro nó que saiu do swarm. Como não podemos adicionar outro nó neste ambiente, prosseguiremos para a próxima etapa, que aborda a remoção forçada de um nó inacessível, que é um cenário mais comum para remover nós que não estão mais participando do swarm.

Remover à força um nó inacessível do swarm

Nesta etapa, você aprenderá como remover à força um nó do swarm que está inacessível ou sem resposta. Isso é necessário quando um nó falhou e não pode ser removido de forma graciosa.

Primeiro, vamos listar os nós no swarm novamente para obter o ID do nó.

docker node ls

Identifique o ID do nó que você deseja remover à força. Em nossa configuração atual, este é o único nó, que é o gerente.

Para remover um nó à força, você usa o comando docker node rm com a flag --force, seguido pelo ID do nó. Substitua <node_id> pelo ID real.

docker node rm --force <node_id>

Você deve ver uma saída indicando que o nó foi removido.

Node <node_id> removed from swarm

Agora, liste os nós no swarm novamente para confirmar que o nó foi removido.

docker node ls

Você verá uma mensagem de erro porque removeu o único nó (o gerente) do swarm, e o daemon Docker atual não faz mais parte de um swarm.

Error: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to a swarm.

Isso confirma que o nó foi removido com sucesso do swarm, mesmo que fosse o nó gerente. A remoção forçada de um nó gerente deve ser feita com cautela, pois pode impactar a disponibilidade do seu swarm se não houver outros gerentes.

Resumo

Neste laboratório, você aprendeu como gerenciar nós dentro de um Docker Swarm usando o comando docker node rm. Você começou inicializando um swarm e listando os nós existentes usando docker node ls para identificar seus IDs e status.

Posteriormente, você tentou remover um nó em execução, demonstrando que um nó deve ser retirado de serviço antes que possa ser removido. Em seguida, você removeu com sucesso um nó parado e aprendeu como remover à força um nó inacessível do swarm, cobrindo diferentes cenários para a remoção de nós.