Compartir comentarios
Las respuestas se generan en base a la documentación.

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.

Important

Establecer un nodo en Drain no elimina los contenedores independientes de ese nodo, como los creados con docker run, docker compose up o la API de Docker Engine. El estado de un nodo, incluido Drain, solo afecta a la capacidad del nodo para programar cargas de trabajo de servicios de swarm.

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

  2. 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        Leader
    
  3. Si no sigues ejecutando el servicio redis del tutorial de actualización continua, inícialo ahora:

    $ docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0
    
    c5uo6kdmzpon37mgj9mwglcfw
    
  4. Ejecuta docker service ps redis para 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 seconds
    

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

  5. Ejecuta docker node update --availability drain worker1 para drenar un nodo que tuviera una tarea asignada:

    $ docker node update --availability drain worker1
    
    worker1
    
  6. Inspecciona 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 Drain para la propiedad Availability.

  7. Ejecuta docker service ps redis para ver cómo el administrador de swarm actualizó las asignaciones de tareas para el servicio redis:

    $ 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 minutes
    

    El administrador de swarm mantiene el estado deseado al finalizar la tarea en el nodo con disponibilidad Drain y crear una nueva tarea en un nodo con disponibilidad Active.

  8. Ejecuta docker node update --availability active worker1 para devolver el nodo drenado a un estado activo:

    $ docker node update --availability active worker1
    
    worker1
    
  9. Inspecciona 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