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 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:
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
docker-machine ls
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
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
Siguiente paso… automatizar la elasticidad del clúster con OneFlow.