Un Docker Swarm es un grupo de máquinas virtuales que ejecutan la aplicación Docker y que han sido configuradas para unirse en un clúster. Las actividades del clúster son controladas por un gestor de Docker, y las máquinas que se han unido al clúster se denominan nodos
Si quiere saber más sobre Docker Swarm puede consultar su página oficial:
El objetivo de esta página es mostrar como puede ser el despliegue de una infraestructura de Docker Swarm. No es una guía. tenga en cuenta que puede haber puntos en la configuración que no se mencionen.
En esta página vamos a comprobar un caso de uso de Docker Swarm desplegado con recursos propios de Soax.
Para comenzar desplegaremos una red sencilla, con un router conectado a la red externa y a una red LAN.

Para preparar los nodos vamos a lanzar una instancia Ubuntu24_04, la cual actualizaremos y en la que instalaremos Docker Engine.
Lanzaremos la instancia añadiendo un par de claves y un grupo de seguridad que permita la conexión ssh desde nuestra IP pública.
Una vez lancemos la instancia generaremos una fip y la asociaremos al puerto asociado a la instanciad e la red LAN.

Puede consultar todo sobre grupos de seguridad visitando el siguiente enlace:

En este grupo no tocaremos nada, ya que nos permitirá el trafico entre las instancias que tengan el mismo grupo de seguridad y la salida en todas las direcciones.


Este grupo lo utilizaremos para restringir la entrada de nuestra IP pública a las instancias, a fin de proteger el acceso al puerto ssh.

Una vez realizados estos pasos nos conectaremos a la instancia por ssh con el par de claves. Puede ver como realizar este procedimiento en la sigueinte página:
Después, lanzaremos los siguientes comandos para intalar docker:
sudo su
apt update -y && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update -y
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable docker
systemctl start docker
Una vez realizados los pasos anteriores generaremos una imagen a partir del volumen para poder desplegar tantos nodos como necesitemos, en este caso 3 (1 master y 2 workers). Puede comprobar como realizar el procedimiento en el siguiente enlace:

Una vez desplegadas las instancias a partir del los volúmenes generados desde la imagen, tendremos está infraestructura:

Tenga en cuenta que se asociará la misma clave que tiene asociada la istancia original master "ubuntu" en el momento de realizar la imagen.
En el caso de que no haya asociado un par de claves previamente a la instancia "ubuntu" que actuará como master previamente a realizar la imagen, puede consultar como proceder:
Para preparar la configuración de los nodos, deberemos de editar el archivo /etc/hosts y añadir la clave privada del par de claves al nodo master, ya que va a ser desde donde administraremos los nodos workers con el protocolo ssh.
Debemos subir el archivo con la clave privada a nuestro nodo master y posteriormente acceder al servidor con:
ssh -i nombre_par.pem centos@IP_pública_server:/home/ubuntu
Tenga en cuenta que puede disponer según su gestor de ssh una forma diferente de subir los archivos al servidor, como sucede con MobaXterm.
Esta tarea nos facilitará la vida a la hora de la escalabilidad e identificación de los nodos cuando estemos conectados en el master.
sudo vi /etc/hosts
Para este ejemplo se deberá añadir:
192.168.0.10 master
192.168.0.11 worker1
192.168.0.12 worker2
El archivo debería de quedar así en los 3 nodos:

Una vez tengamos todos los pasos anteriores, podremos acceder mediante desde el master a los workers configurados con:
ssh -i wiki.pem ubuntu@worker1
ssh -i wiki.pem ubuntu@worker2
Este paso es de los más sencillos, una vez tenemos los nodos desplegados y preparados, deberemos de lanzar el comando de instalación de Docker Swarm en el nodo master.
Se deberá lanzar el sigueinte comando.
sudo docker swarm init --advertise-addr masterIP

Para los workers lanzaremos el siguiente comando, indicando el token que nos ha dado el manager.
sudo docker swarm join --token TOKEN masterIP:2377
Worker1
Accediendo al woker desde el master:
ssh -i wiki.pem ubuntu@worker1

Worker2
Accediendo al woker desde el master:
ssh -i wiki.pem ubuntu@worker2

Es muy probable que deba permitir el tráfico de los puertos de la red LAN para el puerto 2377 para la gestión del docker swarm.
De nuevo, volvemos al nodo master y lanzamos el siguiente comando, que nos dirá el estado del clúster.
sudo docker node ls

Ya tendríamos configurado nuestro clúster de Docker Swarm en SoaX.
Este es uno de los casos más comunes para este tipo de entornos de Docker Swarm, ya que facilitan la vida a los procesos de integración continua.
Vamos a ver como SoaX puede permitir esta configuración de una manera muy sencilla.
Entraremos en el nodo master y lanzaremos el comando para lanzar el aplicativo en 3 replicas. El clúster repartirá y balanceará los contenedores entre los nodos del clúster.
sudo docker service create --name app-test --publish 80:80 --replicas 3 nginx:1.13-alpine

Podemos ver es estado del servicio con este comando:
docker service ls

Para ver el servicio desplegado en el clúster:
docker service ps app-test

Una vez hemos lanzado el aplicativo, vamos a exponerlo a la red externa utilizando un balanceador de carga.
Deberemos de crear un balanceador de SoaX para poder gestionar las conexiones externas a los nodos del clúster de Docker Swarm según un algoritmo de balanceao concreto.
Puede conocer todo sobre balanceadores en el sigueinte enlace:
Para el ejemplo, al crear el balanceador de carga completo podremos asignar un monitor por ejemplo para el puerto de la red LAN del nodo master con IP 192.168.0.10 . En el caso de que se requieran mas monitores, como en este caso, siempre se puede acceder a la sección del menú lateral CONECTIVIDAD->BALANCEADORES->POOLS donde podremos gestionar más miembros del pool.

La estructura de los monitores para este caso quedarán de la siguiente forma:

La infraestructura del proyecto quedará entonces como vemos a continuación:

Tras estos pasos, debemos desasociar la Fip del master o si se desea crear una Fip nueva para asociarla al balanceador de carga recién creado, ya que es a la IP que haremos las peticiones para que rediriga el tráfico a las diferentes máquinas configuradas como monitores.
Accederemos por http en nuestro navegador:

Es importante recordar que debe estar permitido el tráfico en los grupos de seguridad para el tráfico del puerto 80 en este caso.
Ya tendremos nuestro aplicativo balanceado entre 3 nodos y un balanceador de carga gestionando las conexiones.
Como hemos visto el montaje anterior lo podemos llevar a cabo en cualquier plataforma de virtualización, sin embargo podemos destacar varias ventajas de utilizar SoaX.
1. Integración propia de seguridad, protegiendo los nodos de una forma sencilla gracias a los grupos de seguridad.
2. Balanceador de carga de fácil uso, descartando otras herramientas que pueden complicar el despliegue.
3. Replicación de nodos de forma sencilla, podemos levantar tantos nodos como necesitemos.
4. Por último podemos destacar una función que destaca sobre otras soluciones, que es la capacidad de aparcar las instancias worker y levantarlas en función de las necesidades del clúster.
La pregunta principal sería: ¿Esto afectará a mi aplicativo?
La respuesta es que no, ya que gracias a las propias funciones de Docker Swarn deshabilitará el worker y levantara el/los contenedores en el resto de nodos del clúster.
Esto es muy interesante, ya que nos permite disponer de varios nodos en estado aparcado solo consumiendo los recursos de almacenamiento del volumen y tener la oportunidad de con unos clicks levantarlos para ser parte del clúster de nuevo.
Con el siguiente escenario, podemos ver que disponemos de un nodo y los tres contenedores se moverán a este.
Tras aparcar el worker 1:

Si comprobamos el estado del servicio, podemos ver el estado de los nodos aparcados y como se han levantado en los nodos disponibles, en este caso el master.

Este solo es un ejemplo de como podemos aprovechar las funcionalidades para desarrollar nuestras ideas en infraestructura. Las configuraciones son infinitas y siempre dispondrá de las mejores herramientas para llevarlas a cabo en SoaX.
Nuestro equipo de soporte está disponible para cualquier consulta o problema que le pueda surgir, ponerse en contacto con el Soporte de OasiX.
Docker Swarm en Soax
Que es Docker Swarm
entorno Docker Swarm
Se puede desplegar un entorno Docker Swarm en Soax
Como desplegar Docker Swarm en Soax