Cómo usar el comando docker node rm para eliminar nodos de un clúster

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 clúster Docker Swarm utilizando el comando docker node rm. Comenzarás listando los nodos existentes en un clúster para identificarlos. Luego, intentarás eliminar un nodo en ejecución para comprender el comportamiento predeterminado y las limitaciones del comando.

A continuación, explorarás cómo eliminar con éxito un nodo detenido del clúster. Finalmente, aprenderás cómo forzar la eliminación de un nodo inaccesible, lo cual es crucial para manejar situaciones en las que un nodo ya no es alcanzable. Esta experiencia práctica proporcionará conocimientos prácticos para mantener tu clúster Docker Swarm.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") subgraph Lab Skills docker/ls -.-> lab-555185{{"Cómo usar el comando docker node rm para eliminar nodos de un clúster"}} docker/ps -.-> lab-555185{{"Cómo usar el comando docker node rm para eliminar nodos de un clúster"}} docker/rm -.-> lab-555185{{"Cómo usar el comando docker node rm para eliminar nodos de un clúster"}} end

Listar nodos existentes en el clúster

En este paso, aprenderás cómo listar los nodos que actualmente forman parte de un clúster Docker Swarm. Antes de listar los nodos, necesitamos inicializar un clúster Docker Swarm.

Primero, inicializa un nuevo clúster en la máquina actual. Esta máquina se convertirá en el nodo manager.

docker swarm init

Deberías ver una salida que indique que el clúster se ha inicializado y que proporcione un comando para unir otros nodos como workers.

Ahora que el clúster está inicializado, puedes listar los nodos en el clúster utilizando el comando docker node ls.

docker node ls

Este comando mostrará una tabla con los nodos del clúster. Inicialmente, solo verás el nodo manager que acabas de inicializar. La salida incluirá información como el ID del nodo, el nombre del host, el estado, la disponibilidad, el estado del manager y la versión del motor.

Por ejemplo, la salida podría ser similar a esta:

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

El * junto al ID indica el nodo actual en el que te encuentras. La columna MANAGER STATUS muestra el papel del nodo en el clúster (por ejemplo, Leader, Reachable, Unavailable).

Intentar eliminar un nodo en ejecución del clúster

En este paso, intentarás eliminar un nodo que está actualmente en ejecución y forma parte del clúster. Esto demostrará que no se puede simplemente eliminar un nodo en ejecución sin sacarlo primero del servicio.

Primero, listemos los nodos de nuevo para confirmar el ID del nodo en ejecución.

docker node ls

Identifica el ID del nodo que quieres intentar eliminar. En este caso, será el único nodo listado, que es el nodo manager.

Ahora, intenta eliminar el nodo utilizando el comando docker node rm seguido del ID del nodo. Reemplaza <node_id> con el ID real que encontraste en el paso anterior.

docker node rm <node_id>

Probablemente verás un mensaje de error que indica que el nodo es un manager y no se puede eliminar de esta manera, o que el nodo todavía está activo. Este es el comportamiento esperado. Docker Swarm impide que elimines un nodo en ejecución directamente para evitar interrumpir los servicios.

El mensaje de error podría ser algo como:

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

Esto confirma que no se puede eliminar un nodo manager en ejecución sin utilizar la bandera --force, que exploraremos en un paso posterior. Para los nodos worker, normalmente se vaciaría el nodo primero antes de eliminarlo.

Eliminar un nodo detenido del clúster

En este paso, aprenderás cómo eliminar un nodo del clúster que ya no está en ejecución o es accesible. Dado que solo tenemos un nodo (el manager) en nuestro clúster actual, primero simularemos un escenario en el que un nodo se detiene al abandonar el clúster en el nodo actual.

Primero, abandona el clúster en el nodo actual. Esto hará que el demonio de Docker deje de participar en el clúster.

docker swarm leave

Se te pedirá que confirmes que quieres abandonar el clúster. Escribe y y presiona Enter.

Node left the swarm.

Ahora, si estuvieras en un nodo manager diferente en el mismo clúster, podrías eliminar el nodo que acaba de abandonar. Dado que estamos en el único nodo, volveremos a inicializar el clúster para simular estar en un manager diferente.

docker swarm init

Verás la salida que indica que el clúster se ha inicializado nuevamente.

Ahora, listemos los nodos en el clúster. Solo verás el nodo actual en la lista.

docker node ls

Para demostrar cómo eliminar un nodo detenido, necesitamos simular tener otro nodo que haya abandonado el clúster. Dado que no podemos agregar otro nodo en este entorno, pasaremos al siguiente paso, que cubre la eliminación forzada de un nodo inaccesible, que es un escenario más común para eliminar nodos que ya no participan en el clúster.

Eliminar forzosamente un nodo inaccesible del clúster

En este paso, aprenderás cómo eliminar forzosamente un nodo del clúster que es inaccesible o no responde. Esto es necesario cuando un nodo ha fallado y no se puede eliminar de manera adecuada.

Primero, listemos los nodos en el clúster de nuevo para obtener el ID del nodo.

docker node ls

Identifica el ID del nodo que quieres eliminar forzosamente. En nuestra configuración actual, este es el único nodo, que es el manager.

Para eliminar forzosamente un nodo, se utiliza el comando docker node rm con la bandera --force, seguido del ID del nodo. Reemplaza <node_id> con el ID real.

docker node rm --force <node_id>

Deberías ver una salida que indique que el nodo ha sido eliminado.

Node <node_id> removed from swarm

Ahora, listemos los nodos en el clúster de nuevo para confirmar que el nodo ha sido eliminado.

docker node ls

Verás un mensaje de error porque has eliminado el único nodo (el manager) del clúster, y el demonio de Docker actual ya no forma parte de un clúster.

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

Esto confirma que el nodo se ha eliminado exitosamente del clúster, incluso aunque fuera el nodo manager. La eliminación forzosa de un nodo manager debe realizarse con precaución, ya que puede afectar la disponibilidad de tu clúster si no hay otros managers.

Resumen

En este laboratorio, aprendiste cómo gestionar nodos dentro de un clúster Docker Swarm utilizando el comando docker node rm. Comenzaste inicializando un clúster y listando los nodos existentes con docker node ls para identificar sus IDs y estados.

Posteriormente, intentaste eliminar un nodo en ejecución, demostrando que un nodo debe ser sacado de servicio antes de poder ser eliminado. Luego, eliminaste con éxito un nodo detenido y aprendiste cómo eliminar forzosamente un nodo inaccesible del clúster, cubriendo diferentes escenarios para la eliminación de nodos.