La idea és disposar d'un cluster de docker-engine i poder instanciar-hi allà els nostres contenidors docker.
Docker Swarm: Ens permet crear un cluster docker. El node master rebrà i distribuirà els contenidors als nodes secundaris on s'executaran.
Consul: Ens roporcionarà el servei de discover dels nous nodes que afegim al clúster swarm.
Per a poder implementar el docker swarm cluster amb l'OpenNebula hem d'instalar el Docker Engine, Docker Machine i el Driver Docker Machine Opennebula.
Aquí està el manual de com fer-ho: DOCKER-1 Docker Machine OpenNebula Driver
Disposarem d'una maquina virtual que ens proporcionarà el servei de discover amb consul
Creem una màquina virtual a l'OpenNebula anomenada consul i deprés executem un contenidor docker de consul dins d'ella.
docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_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 |
Diposarem dos tipus de màquines virtuals amb swarm:
Creem la màquina virtual del swarm-master:
CONSUL_IP=$(docker-machine ip consul) docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_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 |
Creem la màquina virtual del swarm-node:
docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_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-01 |
Podem crear els nodes que vulguem. Només hem de canviar el nom de la màquina virtual
Un cop hem creat les diferents màquines virtuals que volem, ens connectem al node master del swarm.
eval $(docker-machine env --swarm swarm-master) docker info |
Un cop el nostre cluster d'swarm està corrent hem de crear la xarxa interna del cluster.
docker network create --driver overlay --subnet=10.0.1.0/24 overlay_net docker network ls |
Ara ja podem instanciar contenidors docker al nostre clúster swarm.
Per a més informació : http://opennebula.org/docker-swarm-with-opennebula/
Actualment disposeu de dues imatges, ja precreades amb el Docker Engine instal·lat que podeu fer servir:
Crear el clúster swarm:
Creem les màquines virtuals de consul, swarm-master i un swarm-node amb discs volàtils de 10 GB amb les comandes:
docker-machine create -d opennebula --opennebula-network-id $NETWORK_ID --opennebula-image-name boot2docker --opennebula-b2d-size 10240 consul docker $(docker-machine config consul) run -d -p "8500:8500" -h "consul" progrium/consul -server -bootstrap CONSUL_IP=$(docker-machine ip consul) docker-machine create -d opennebula --opennebula-network-id $NETWORK_ID --opennebula-image-name boot2docker --opennebula-b2d-size 10240 --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 docker-machine create -d opennebula --opennebula-network-id $NETWORK_ID --opennebula-image-name boot2docker --opennebula-b2d-size 10240 --swarm --swarm-discovery="consul://$CONSUL_IP:8500" --engine-opt cluster-store=consul://$CONSUL_IP:8500 --engine-opt cluster-advertise="eth0:2376" swarm-node-01 |
On $NETWORK_ID, serà l'ID de la xarxa on crearem el clúster. |
Després d'executar les comandes podem observar com s'han creat les màquines virtuals al panell de l'OpenNebula o utilitzant docker-machine:
Connectem al docker-swarm i comprovem la informació del cluster:
eval $(docker-machine env --swarm swarm-master) docker info |
Creem la xarxa interna del clúster swarm i visualitzem les interfícies virtuals creades:
docker network create --driver overlay --subnet=10.0.1.0/24 overlay_net docker network ls |
Ja tenim el clúster swarm configurat i corrent.
Executar contenidors docker al clúster creat:
Ara podem començar a fer servir docker sobre el clúster que acabem de crear:
Utilitzarem un contenidor nginx, per exemple
docker pull nginx docker run --name mynginx -d -p 80:80 nginx |