Añadir nuevos nodos a Docker Swarm

En esta entrada vamos a ver como añadir nuevos nodos a Docker Swarm, ya sea con el rol de worker como de manager. Para ello vamos a seguir utilizando el entorno que creamos hace unos días en la plataforma Clouding.io

Recordar que explicamos como crear un clúster y como añadir un stack de monitorización con Grafana, Influxdb y Telegraf. Así que esta entrada será la tercera sobre este producto de alta disponibilidad con contenedores.

Añadir nuevos nodos a Docker Swarm

Realmente los pasos son muy simples. Desde hace unos años todos los pasos y procesos, no solo en esta plataforma, sino en general en el mundo de las tecnologías de la información, se han simplificado y cada vez los productos son más fáciles de gestionar.

¿Por qué añadir nuevos nodos?

Si leemos la documentación oficial, encontramos que agregar nodos, por ejemplo, los worker aumenta la capacidad del clúster. Cuando implementa un servicio en un enjambre (Swarm), el motor programa las tareas en los nodos disponibles, ya sean nodos de trabajo o nodos de administrador. Cuando agregas trabajadores a tu enjambre, aumentas la escala del enjambre para manejar las tareas sin afectar el consenso de todo el entorno.

Los nodos manager aumentan la tolerancia a fallos. Los nodos de administración realizan las funciones de organización y administración de clústeres para el enjambre (swarm). Entre los nodos de administrador, un nodo líder único realiza tareas de orquestación. Si un nodo líder se cae, los nodos de administrador restantes eligen un nuevo líder y reanudan la orquestación y el mantenimiento del estado de enjambre. Por defecto, los nodos gestores también ejecutan tareas.

Como ya sabemos, para añadir nuevos nodos, el Docker Engine por lo menos debe tener la versión 1.12 o superior.

Añadir un nodo manager

Para ello he creado una nueva máquina virtual, en la plataforma de Clouding.io, sencilla, con media CPU, 1 GB de memoria y 15 GB de disco. He seguido los pasos de los otros nodos para instalar Docker. Además he modificado el fichero «/etc/hosts» en todos los nodos, para que resuelva correctamente el nombre, que en el caso del nuevo manager es «servmanager02.bitsandlinux.com» Además este nuevo nodo tendrá las mismas reglas de cortafuegos que el resto del entorno.

Recomendaciones

Docker recomienda tres o cinco nodos de administrador por clúster para implementar una alta disponibilidad. Por lo que tras añadir este nodo añadiré un tercer manager. Debido a que los nodos del administrador de modo de enjambre comparten datos usando Raft, debe haber un número impar de administradores. El enjambre puede continuar funcionando después de que haya disponible un quórum de más de la mitad de los nodos de administrador.

Entendido esto, desde el nodo manager ya existente, debemos ejecutar el siguiente comando:

  1. docker swarm join-token manager

Con el resultado en mi caso:

Creamos token para añadir nuevo nodo manager

Ahora toca ejecutar el comando en el nodo que queremos añadir.

De esta manera ya veremos el nodo dentro del clúster, ejecutando docker node ls, como sigue:

Lista de nodos del clúster de Docker Swarm

Se observa que el nuevo host tiene una versión superior del engine, a posteriori lo adecuado es igualar todas las versiones.

Vamos a ver la información del clúser en el portal de Portainer, para ver si ha sido capaz de añadir el nuevo manager de manera exitosa e instalar los agentes del propio Portainer y de Telegraf.

Información de los agentes de Portainer y Telegraf

Tal y como se observa en la imagen anterior, se han desplegado de manera automática, al añadir el nuevo nodo manager, los agentes de Telegraf y Portainer. Por las fechas podéis ver que no hay ni trampa ni cartón.

Si revisamos el portal de Grafana, también veremos que ya nos aparece información de la actividad del nuevo nodo:

Visión de actividad del nuevo nodo en Grafana

Si accedemos al nodo y ejecutamos docker stack ls o docker ps -a veremos los stacks y contenedores corriendo en el nodo:

Información de stacks y contenedores

Recordar, otra vez, que lo recomendable es tener tres manager, para que a la hora de las votaciones (ahora que se acercan elecciones) haya quorum.

Añadir un nodo worker

Esta parte va a ser corta, ya que lo único que debemos ejecutar el comando docker swarm join-token worker, esto es, cambiar en el comando anterior «manager» por «worker»

Creamos el token para añadir el nuevo worker

Al igual que los manager, solo debemos ejecutar el comando el nuevo worker. No tiene mucho más misterio.

Una vez finalizado, ya podemos ver la información del entorno, formado ahora por tres «manager» y tres «worker»

Información de todos los nodos del entorno

Y si los visualizamos desde la consola de comandos de uno de los manager:

Y esto es todo por hoy. ¿Qué os ha parecido? Realmente sencillo, ¿Verdad?

Nos seguimos leyendo.

Fuentes consultadas

Docs.docker.com – Join nodes to a swarm