Cómo usar el comando docker swarm leave para eliminar nodos

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo gestionar nodos dentro de un Docker Swarm utilizando el comando docker swarm leave. Comenzarás inicializando un Docker Swarm y uniendo un nodo trabajador (worker node) a él. Posteriormente, practicarás la eliminación del nodo trabajador del swarm. Finalmente, explorarás el proceso de eliminación de un nodo administrador (manager node), incluyendo la necesidad de utilizar la opción de fuerza (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{{"Cómo usar el comando docker swarm leave para eliminar nodos"}} docker/ps -.-> lab-555243{{"Cómo usar el comando docker swarm leave para eliminar nodos"}} docker/info -.-> lab-555243{{"Cómo usar el comando docker swarm leave para eliminar nodos"}} docker/version -.-> lab-555243{{"Cómo usar el comando docker swarm leave para eliminar nodos"}} end

Inicializar un Docker Swarm

En este paso, aprenderás cómo inicializar un Docker Swarm. Un Docker Swarm es un clúster de hosts de Docker que se ejecutan en modo swarm. El modo swarm te permite gestionar un clúster de nodos de Docker como un solo sistema virtual.

Antes de inicializar el swarm, veamos la versión actual de Docker instalada en la máquina virtual (VM) de LabEx.

docker version

Deberías ver una salida similar a esta, lo que indica que la versión de Docker es 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 un Docker Swarm, se utiliza el comando docker swarm init. Este comando convierte el host de Docker actual en un administrador (manager) del swarm.

docker swarm init

Después de ejecutar el comando, verás una salida que indica que el swarm se ha inicializado y que proporciona un comando para unir otros nodos como trabajadores (workers). La salida se verá similar 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.

La salida muestra que el nodo actual es ahora un administrador del swarm. También proporciona el comando para unir un nodo trabajador a este swarm. Utilizaremos este comando en el siguiente paso.

Puedes verificar el estado del swarm utilizando el comando docker info.

docker info

Busca la sección "Swarm" en la salida. Debería indicar que el swarm está "activo".

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

Esto confirma que el Docker Swarm se ha inicializado correctamente en este nodo.

Unir un nodo trabajador (worker node) al swarm

En el paso anterior, inicializamos un Docker Swarm y la salida proporcionó un comando para unir un nodo trabajador. En un escenario del mundo real, ejecutarías este comando en una máquina separada que quieres agregar como trabajador a tu swarm. Sin embargo, dado que estamos utilizando una sola máquina virtual (VM) de LabEx, simularemos la unión de un nodo trabajador utilizando el comando de unión en la misma máquina.

Primero, recuperemos el comando de unión para un nodo trabajador. Puedes obtener el token de unión y el comando ejecutando docker swarm join-token worker en el nodo administrador (que es nuestra máquina virtual actual).

docker swarm join-token worker

La salida será similar 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

Copia el comando completo docker swarm join --token ... de la salida. Este comando contiene el token único y la dirección IP y el puerto del administrador (manager) del swarm.

Ahora, ejecuta el comando copiado para unir el nodo actual al swarm como trabajador.

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

Reemplaza el token y la dirección IP con los valores que obtuviste del comando docker swarm join-token worker.

Deberías ver una salida que indique que el nodo se ha unido al swarm como trabajador:

This node joined a swarm as a worker.

Para verificar que el nodo se ha unido al swarm, puedes listar los nodos del swarm desde la perspectiva del administrador. Dado que nuestra única máquina virtual actúa tanto como administrador como trabajador, podemos usar el comando docker node ls.

docker node ls

La salida mostrará los nodos del swarm. Deberías ver dos entradas para el mismo ID de nodo, una con el estado "Ready" y el rol "Manager", y otra con el estado "Ready" y el rol "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

Esto confirma que el nodo se ha unido exitosamente al swarm como trabajador.

Salir del swarm desde un nodo trabajador (worker node)

En el paso anterior, unimos exitosamente el nodo al swarm como trabajador. Ahora, aprenderemos cómo eliminar un nodo del swarm. Para salir de un swarm desde un nodo trabajador, se utiliza el comando docker swarm leave.

Ejecuta el siguiente comando para hacer que el nodo actual salga del swarm como trabajador:

docker swarm leave

Deberías ver una salida que indique que el nodo ha salido del swarm:

Node left the swarm.

Ahora, verifiquemos que el nodo ha salido del swarm. Podemos usar el comando docker node ls nuevamente. Sin embargo, dado que el nodo ha salido del swarm, ejecutar docker node ls en este nodo resultará en un error porque ya no forma parte del swarm.

docker node ls

Verás un mensaje de error similar a este:

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

Este error confirma que el nodo ya no forma parte del swarm.

Para verificar aún más, veamos el estado del swarm utilizando docker info.

docker info

La sección "Swarm" en la salida ahora debe indicar que el swarm está "inactivo".

...
 Swarm: inactive
...

Esto confirma que el nodo ha salido exitosamente del Docker Swarm.

Intentar salir del swarm desde un nodo administrador (manager node) sin forzar

En el paso anterior, eliminamos exitosamente un nodo trabajador (worker node) del swarm. Ahora, veamos qué sucede cuando intentamos eliminar un nodo administrador utilizando el mismo comando docker swarm leave sin opciones adicionales.

Ejecuta el siguiente comando para intentar salir del swarm desde el nodo administrador:

docker swarm leave

Recibirás un mensaje de error similar a este:

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.

Este mensaje de error indica que no se puede simplemente salir de un swarm desde un nodo administrador sin forzarlo explícitamente. Esto es un mecanismo de seguridad para evitar la interrupción accidental del swarm, especialmente en una configuración de múltiples administradores.

Para confirmar que el nodo sigue siendo un administrador y forma parte del swarm, puedes usar el comando docker info.

docker info

La sección "Swarm" aún debe mostrar "active" y "Is Manager: true".

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

Esto confirma que el intento de salir del swarm sin la bandera (flag) de forzar fue infructuoso y el nodo sigue siendo un administrador del swarm.

Forzar a un nodo administrador (manager node) a salir del swarm

En el paso anterior, aprendimos que un nodo administrador no puede salir del swarm sin usar la bandera (flag) --force. Esto es para prevenir la interrupción accidental del swarm. En este paso, usaremos la bandera --force para hacer que el nodo administrador salga del swarm.

Nota importante: Forzar a un nodo administrador a salir del swarm puede interrumpir el funcionamiento del swarm, especialmente si es el último administrador. Utilice este comando con precaución en un entorno de producción.

Ejecute el siguiente comando para forzar al nodo administrador a salir del swarm:

docker swarm leave --force

Debería ver una salida que indique que el nodo ha salido del swarm:

Node left the swarm.

Ahora, verifiquemos que el nodo ha salido exitosamente del swarm. Podemos usar el comando docker info.

docker info

La sección "Swarm" en la salida ahora debe indicar que el swarm está "inactivo".

...
 Swarm: inactive
...

Esto confirma que el nodo administrador ha salido exitosamente del Docker Swarm utilizando la bandera --force. El swarm ya no existe en este nodo.

Resumen

En este laboratorio, aprendimos cómo inicializar un Docker Swarm utilizando el comando docker swarm init, que designa el nodo actual como administrador (manager) y proporciona el comando para que otros nodos se unan. Luego, practicamos cómo unir un nodo trabajador (worker node) al swarm recién creado.

Posteriormente, exploramos cómo eliminar nodos del swarm utilizando el comando docker swarm leave, mostrando primero cómo un nodo trabajador puede salir del swarm. Luego, intentamos usar el mismo comando en un nodo administrador sin la opción de forzar, observando que no está permitido por defecto. Finalmente, logramos forzar a un nodo administrador a salir del swarm utilizando la bandera --force.