Categories
General In detail OpenSource

Docker Swarm y Consul con OpenNebula

Como continuación al post publicado sobre Docker Machine y OpenNebula, en esta ocasión veremos que con dicho driver también podemos implementar la funcionalidad de Docker Swarm.
docker-swarm-opennebula
Docker Swarm tiene la capacidad de balancear según la disponibilidad del clúster. Así pues, si por ejemplo en un clúster hay un contenedor y este deja de estar disponible, Swarm encarga de asignarlo a otro nodo disponible.
Para  poder implementar esta funcionalidad, hace falta tener instalado Docker Engine y Docker Machine con el driver para a OpenNebula.

Tutorial

El primer paso será crear una máquina virtual con Docker Engine para el servicio de discovery con Consul y arrancar un contenedor con consul:

docker-machine create -d opennebula --opennebula-network-id $network_id --opennebula-image-id $b2d_image_id --opennebula-b2d-size $volatile_disk_size consul
docker $(docker-machine config consul) run -d -p "8500:8500" -h "consul" progrium/consul -server -bootstrap
CONSUL_IP=$(docker-machine ip consul)

Podemos verificar que funciona correctamente, accediendo a la IP de la máquina por el puerto 8500:
consul
 
 
 
 
 
 
 
 
 
 
 
Creamos una nueva máquina virtual, para el nodo máster del clúster:

docker-machine create -d opennebula --opennebula-network-id $network_id --opennebula-image-id $b2d_image_id --opennebula-b2d-size $volatile_disk_size --swarm --swarm-master --swarm-discovery="consul://$CONSUL_IP:8500" --engine-opt cluster-store=consul://$CONSUL_IP:8500 --engine-opt cluster-advertise="eth0:2376" swarm-master

Y tantas máquinas virtuales como nodos queramos que tenga nuestro clúster:

docker-machine create -d opennebula --opennebula-network-id $network_id --opennebula-image-id $b2d_image_id --opennebula-b2d-size $volatile_disk_size --swarm --swarm-discovery="consul://$CONSUL_IP:8500" --engine-opt cluster-store=consul://$CONSUL_IP:8500 --engine-opt cluster-advertise="eth0:2376" swarm-node-XX

opennebula_docker_machine1

docker-machine ls

docker_machine_ls1
 
 
Una vez tengamos creados los nodos que compondrán el clúster, podemos acceder al nodo máster con la siguiente comanda:

eval $(docker-machine env --swarm swarm-master)

Podemos ver la información y estado del clúster con el comando:

docker info

eval_info2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
También existe la opción de poder crear redes privadas dentro del clúster usuando el driver overlay:

docker network create --driver overlay --subnet=10.0.1.0/24 overlay_net
docker network ls

Una vez, tenemos el clúster en marcha, ya podemos utilizar Docker de la forma habitual:

docker pull nginx
docker run --name mynginx -d -p 80:80 nginx

nginx
 
 
nginx21
 
 
Siguiente paso… automatizar la elasticidad del clúster con OneFlow.