Introducción
En este laboratorio, exploraremos cómo gestionar los roles de los nodos dentro de un Docker Swarm. En particular, nos centraremos en utilizar el comando docker node demote para cambiar el rol de un nodo manager (gestor) a uno de worker (trabajador).
El laboratorio te guiará a través del proceso de inicializar un Docker Swarm, identificar los nodos manager (gestores) actuales, ejecutar el comando de degradación y, finalmente, verificar el nuevo rol del nodo para confirmar la degradación exitosa. Esta experiencia práctica proporcionará conocimientos prácticos sobre la gestión de nodos en Docker Swarm.
Inicializar un Docker Swarm
En este paso, inicializaremos un Docker Swarm. Un Docker Swarm es un grupo de máquinas que ejecutan Docker y se unen en un clúster. Después de unirse a un Swarm, puedes continuar ejecutando los comandos de Docker a los que estás acostumbrado, pero ahora son ejecutados por un gestor (manager) de Swarm. Las máquinas en un Swarm pueden ser gestores (managers) o trabajadores (workers). Los gestores se encargan de las tareas de gestión del clúster, mientras que los trabajadores ejecutan los servicios.
Antes de inicializar el Swarm, veamos la versión actual de Docker.
docker version
Deberías ver una salida similar a esta, que indica la versión de Docker instalada en la máquina virtual (VM) de LabEx:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.16.20
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 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.16.20
Git commit: 363bd3c
Built: Tue Oct 25 17:59:50 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2b3d85c5e9b15588d67616e19a2a3a495d
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Ahora, inicialicemos el Docker Swarm en esta máquina. Dado que este es el primer nodo en el Swarm, se convertirá automáticamente en un nodo gestor (manager). Usaremos el comando docker swarm init.
docker swarm init
Deberías ver una salida que indique que el Swarm se ha inicializado y que proporcione un comando para unir otros nodos como trabajadores. 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:
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 confirma que el Swarm está inicializado y que el nodo actual es un gestor (manager). El xxxxxxxxxxxx se reemplazará por el ID real del nodo.
Listar los nodos del Swarm para identificar los gestores (managers)
En este paso, listaremos los nodos en el Docker Swarm para identificar qué nodos son gestores (managers) y cuáles son trabajadores (workers). Dado que acabamos de inicializar el Swarm con un solo nodo, esperamos ver solo un nodo en la lista y su rol debería ser "Manager" (Gestor).
Para listar los nodos en el Swarm, usamos el comando docker node ls.
docker node ls
Deberías ver una salida similar a esta:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
Desglosemos la salida:
ID: El ID único del nodo. El asterisco (*) junto al ID indica el nodo actual en el que estás ejecutando el comando.HOSTNAME: El nombre de host del nodo. En este caso, eslabex-vm.STATUS: El estado del nodo.Ready(Listo) significa que el nodo está saludable y listo para aceptar tareas.AVAILABILITY: Indica si el nodo está disponible para programar tareas.Active(Activo) significa que está disponible.MANAGER STATUS: Muestra el rol del nodo en el Swarm.Leader(Líder) indica que este nodo es el gestor principal en el Swarm. Si hubiera otros gestores, mostraríanReachable(Alcanzable). Los nodos trabajadores tendrían este campo vacío.ENGINE VERSION: La versión del motor de Docker (Docker Engine) que se ejecuta en el nodo.
Como se esperaba, vemos nuestro único nodo en la lista y su MANAGER STATUS es Leader, lo que confirma que es un nodo gestor (manager).
Degradar un nodo gestor (manager)
En este paso, degradaremos el nodo gestor (manager) actual a un nodo trabajador (worker). Degradar un nodo gestor significa cambiar su rol de gestionar el Swarm a simplemente ejecutar tareas como un trabajador. Esto es útil en escenarios donde necesitas reducir el número de gestores o cambiar el rol de un nodo específico.
Para degradar un nodo gestor, usamos el comando docker node demote seguido del ID del nodo o del nombre de host. Del paso anterior, sabemos que el nombre de host es labex-vm.
docker node demote labex-vm
Deberías ver una salida que confirme la degradación:
Node labex-vm was demoted from a manager to a worker.
Esta salida indica que el nodo labex-vm se ha degradado exitosamente de un rol de gestor (manager) a un rol de trabajador (worker) dentro del Swarm.
Verificar el rol del nodo después de la degradación
En este último paso, verificaremos que el rol del nodo se haya cambiado exitosamente de gestor (manager) a trabajador (worker) después de la operación de degradación. Volveremos a utilizar el comando docker node ls para listar los nodos en el Swarm y comprobar la columna MANAGER STATUS de nuestro nodo.
docker node ls
Después de ejecutar el comando, deberías ver una salida similar a esta:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
Observa que la columna MANAGER STATUS del nodo labex-vm ahora está vacía. Esto indica que el nodo ya no es un gestor (manager) y ahora actúa como un nodo trabajador (worker) en el Swarm. El asterisco (*) sigue junto al ID porque este es el nodo donde estás ejecutando el comando, pero su rol ha cambiado.
Esto confirma que la degradación fue exitosa.
Resumen
En este laboratorio (lab), aprendimos cómo gestionar nodos de Docker Swarm inicializando un Swarm e identificando nodos gestores (managers). Luego, practicamos el uso del comando docker node demote para cambiar el rol de un nodo gestor (manager) a trabajador (worker). Finalmente, verificamos la degradación exitosa listando los nodos del Swarm y observando el rol actualizado.



