Swarm es un software creado por los programadores de Docker que permite agrupar una serie de hosts de Docker en un clúster y gestionar los clústeresde forma centralizada así como orquestar los contenedores.
Docker Swarm se basa en una arquitectura maestro-esclavo. Cada clúster de Docker está formado al menos por un nodo maestro o manager y nodos esclavos o workers.
El manager de Swarm es responsable de la gestión del clúster y la delegación de tareas, el worker se encarga de ejecutar las unidades de trabajo (tasks o tareas).
Características:
- Alta disponibilidad – tiene como objetivo no ofrecer tiempo de inactividad ni interrupciones.
- Balanceo de carga – Asignar los recursos y las solicitudes en otros nodos del clúster automáticamente si falla algún nodo.
- Descentralizado – varios nodos manager se ejecutan en un entorno de producción; por lo tanto, el clúster nunca depende de un solo nodo manager.
- Escalabilidad – Con un solo comando de docker, puede escalar o reducir fácilmente los contenedores del clúster.
Haremos unas pruebas tomando como referencia 4 servidores
- server-1 – IP 10.128.0.2
- server-2 – IP 10.128.0.3
- server-3 – IP 10.128.0.4
- server-4 – IP 10.128.0.5
Los cuales deben de tener la misma versión de docker.
En el servidor de IP 10.128.0.2 ejecutaremos lo siguiente:
docker swarm init --advertise-addr 10.128.0.2
Swarm initialized: current node (slzrvwiz9nvsq00sepv38sgh0) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0ddef9nfr239nycrahi4ymmw00o2i2lgrsrmcnl7zjt0xmjwhr-5o9ktrwjcs55ctqi5tsm5o3a4 10.128.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Para agregar un nodo manager, ejecutamos lo siguiente en el servidor de IP interna 10.128.0.2.
docker swarm join-token manager
En los servidores de IP 10.128.0.3, 10.128.0.4, 10.128.0.5 ejecutamos lo siguiente, para agregarlos como managers.
docker swarm join --token SWMTKN-1-0ddef9nfr239nycrahi4ymmw00o2i2lgrsrmcnl7zjt0xmjwhr-7qke83g1trhnkbbb4znvyjxhg 10.128.0.2:2377
El resultado lo ejecutamos en el nodo que queremos asociar como manager, para agregar nodos worker ejecutamos el siguiente comando.
docker swarm join-token worker
Finalmente podremos ver nuestros nodos, y sus estados con docker node ls
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
slzrvwiz9nvsq00sepv38sgh0 server-1 Ready Active Leader 20.10.6
qkms8p2foe2on2aipzfr5n8fk server-2 Ready Active Reachable 20.10.6
nefbo2xv5tbsrvnozti3dlnxv server-3 Ready Active Reachable 20.10.6
37nfd0y47hy82d64xjbwnfiax * server-4 Ready Active Reachable 20.10.6