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. Ya que no es una guía, tenga en cuenta que puede haber puntos en la configuración que no se mencionen.
Para comenzar desplegaremos una red básica, con un router conectado a la red virtual y una red local.
Para preparar los nodos vamos a lanzar una instancia Centos 7, la cual actualizaremos y en la que instalaremos Docker Engine.
Lanzaremos la instancia y le añadiremos 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 realizaremos una redirección de puertos al puerto ssh de la instancia.
default
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.
sg-Admin
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.
Después lanzaremos los siguientes comandos:
sudo su
yum -y update
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum 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).
Una vez desplegadas las instancias a partir del los volúmenes generados desde la imagen, tendremos está infraestructura:
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.
Subiremos el archivo con la clave privada a nuestro nodo master:
scp -i nombre_par.pem nombre_par.pem centos@IP_pública_server:/home/centos
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
El archivo debería de quedar así en los 3 nodos:
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.
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
Worker2
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 balancear las conexiones externas a los nodos del clúster de Docker Swarm.
La infra quedará entonces como vemos a continuación:
Configuraremos la redirección de puertos de la fip al puerto del balanceador.
Accederemos por http en nuestro navegador:
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.
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