Get it on Google Play

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.

Interesado en formación Docker?

 

Leave a Reply

© Albert Coronado Calzada