Formación Docker: Montar un cluster con Docker Swarm

07-05-2016
 
Docker Swarm

Docker Swarm

Docker Swarm es la aplicación nativa de Docker para gestionar clusters. Como veréis en el ejemplo, con Swarm y Docker Machine(La aplicación de docker para crear hosts) vamos a poder crear un cluster para lanzar contenedores en cuestión de minutos.

Instalar Docker Machine y crear los nodos del cluster

Deberemos partir de una máquina Linux de 64 bits con Docker y VirtualBox instalado. Y Lo primero va a ser instalar Docker Machine(Si no la tenemos ya instalada en el ordenador):

sudo curl -L https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-`uname -s`-`uname -m` > docker-machine

chmod +x docker-machine 

sudo mv docker-machine /usr/local/bin/

Usaremos Docker Machine para crear los distintos nodos de nuestro cluster utilizando el driver de virtualbox(Podriemos crearlos en otras plataformas como Google Cloud Engine, Amazon Web Services u otros).

docker-machine create -d virtualbox manager
docker-machine create -d virtualbox nodo1
docker-machine create -d virtualbox nodo2

La máquina manager va a ser la que se va a encargar de repartir el trabajo entre los distintos nodos del cluster. Si ejecutamos ‘docker-machine ls’ debería aparecer un listado con las distintas máquinas creadas parecido a este:

docker-machine ls

docker-machine ls

Configurar el manejador

Ahora toca configurar el manejador, esto requerirá tres pasos: Conectarse con el manejador, generar un token(Único y que servirá para enlazar todo el cluster) y finalmente configuraremos el manejador:

# Nos conectamos al manejador
eval $(docker-machine env manager)

# Generar el token
docker run --rm swarm create

# Configuramos el manager(Con el token obtenido)
docker run -d -p 3376:3376 -t -v /var/lib/boot2docker:/certs:ro swarm manage -H 0.0.0.0:3376 --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/server.pem --tlskey=/certs/server-key.pem token://<mi-token> 

El token generado tiene que ser algo parecido a esto cf870f672f3be72fe7f5d873cf00a8c4.

Configuramos los nodos

Ahora deberemos conectarnos a cada uno de los nodos y configurar Swarm con el token obtenido(Repetir esto también en el segundo nodo):

# Nos conectamos al nodo1
eval $(docker-machine env nodo1)

# Configuramos Swarm
docker run -d swarm join --addr=$(docker-machine ip nodo1):2376 token://<mi-token>

Interacción con el cluster

Ahora ya podemos interactuar con el cluster. Para ello, debemos poner el valor ‘:‘(El puerto lo hemos configurado con el manejador) a la variable de entorno ‘DOCKER_HOST’.

Después podremos ver la información del cluster y lanzar trabajos:

# Apuntamos nuestro cliente docker al manager
DOCKER_HOST=$(docker-machine ip manager):3376

# Vemos la configuración del cluster
docker info

# Mandamos el contenedor 'hello-world' al cluster
docker run hello-world

# Vemos que nodo del cluster a procesado nuestro contenedor
docker ps -a

El manejador, por defecto, viene configurado para mandar el trabajo al nodo que tiene menos contenedores. Se le puede cambiar esta política para que lo mande al nodo que tiene mas memoria o para que lo mande a cualquier nodo aleatoriamente.

Conclusiones

Con Docker Swarm podemos montarnos un cluster para ejecutar trabajos en cluster en cuestión de minutos y es realmente muy rápido y fiable.

Este post es parte de los módulos de formación docker que estamos impartiendo por toda España. Espero que os sea de utilidad, buen fin de semana.

Leave a Reply

© Albert Coronado Calzada