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).
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 gestor (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 gestor (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.



