Drenar un nodo en el swarm
En los pasos anteriores del tutorial, todos los nodos se han estado ejecutando con disponibilidad Active. El administrador del swarm puede asignar tareas a cualquier nodo Active, por lo que hasta ahora todos los nodos han estado disponibles para recibir tareas.
A veces, por ejemplo durante tareas de mantenimiento planificadas, necesitas establecer un nodo en disponibilidad Drain (Drenar). La disponibilidad Drain evita que un nodo reciba nuevas tareas del administrador de swarm. También significa que el administrador detiene las tareas que se ejecutan en el nodo e inicia tareas de réplica en un nodo con disponibilidad Active.
ImportantEstablecer un nodo en
Drainno elimina los contenedores independientes de ese nodo, como los creados condocker run,docker compose upo la API de Docker Engine. El estado de un nodo, incluidoDrain, solo afecta a la capacidad del nodo para programar cargas de trabajo de servicios de swarm.
Si aún no lo has hecho, abre una terminal y conéctate por SSH a la máquina donde ejecutas tu nodo administrador. Por ejemplo, el tutorial utiliza una máquina llamada
manager1.Verifica que todos tus nodos estén disponibles activamente.
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active 38ciaotwjuritcdtn9npbnkuz worker1 Ready Active e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active LeaderSi no sigues ejecutando el servicio
redisdel tutorial de actualización continua, inícialo ahora:$ docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0 c5uo6kdmzpon37mgj9mwglcfwEjecuta
docker service ps redispara ver cómo el administrador del swarm asignó las tareas a los diferentes nodos:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 26 seconds redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Running Running 26 seconds redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 26 secondsEn este caso, el administrador del swarm distribuyó una tarea a cada nodo. Es posible que en tu entorno observes que las tareas se distribuyen de manera diferente entre los nodos.
Ejecuta
docker node update --availability drain worker1para drenar un nodo que tuviera una tarea asignada:$ docker node update --availability drain worker1 worker1Inspecciona el nodo para verificar su disponibilidad:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...El nodo drenado muestra
Drainpara la propiedadAvailability.Ejecuta
docker service ps redispara ver cómo el administrador de swarm actualizó las asignaciones de tareas para el servicioredis:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 4 minutes redis.2.b4hovzed7id8irg1to42egue8 redis:7.4.0 worker2 Running Running About a minute \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Shutdown Shutdown 2 minutes ago redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 4 minutesEl administrador de swarm mantiene el estado deseado al finalizar la tarea en el nodo con disponibilidad
Drainy crear una nueva tarea en un nodo con disponibilidadActive.Ejecuta
docker node update --availability active worker1para devolver el nodo drenado a un estado activo:$ docker node update --availability active worker1 worker1Inspecciona el nodo para ver el estado actualizado:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...Al volver a establecer el nodo en disponibilidad
Active, este podrá recibir nuevas tareas:- durante la actualización de un servicio para escalar verticalmente (scale up)
- durante una actualización continua (rolling update)
- cuando configures otro nodo en disponibilidad
Drain - cuando falle una tarea en otro nodo activo
Siguientes pasos
A continuación, aprenderás a utilizar la malla de enrutamiento (routing mesh) en el modo Swarm.
Usar la malla de enrutamiento en el modo Swarm