Blog - Jorge Rodriguez Flores
← Volver al blog

Orquestación de contenedores con docker swarm

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

Fuente: https://docs.docker.com/engine/swarm/