Continguts

 

 

La idea és disposar d'un clúster amb Docker Engine i poder instanciar-hi allà els nostres contenidors Docker. 

Docker Swarm: Ens permet crear un clúster Docker. El node màster rebrà i distribuirà els contenidors als nodes secundaris on s'executaran.

Consul: Ens proporcionarà el servei de discovery dels nous nodes que afegim al clúster swarm. 

Requeriments previs

  • Docker Engine: Ens permet crear els contenidors, gestionar-los i instanciar-los
  • Docker Machine: Ens permet crear i gestionar les maquines virtuals
  • Driver Docker Machine Opennebula: Ens permet utilitzar el docker-machine al cloud de l'OpenNebula

Instal·lar el requeriments:

Per a poder implementar el Docker Swarm Clúster amb l'OpenNebula hem d'instalar: Docker Engine, Docker Machine i el Driver de Docker Machine per l'Opennebula.

Teniu disponible el següent tutorial de com fer-ho: DOCKER-1 Docker Machine OpenNebula Driver

Consul

Disposarem d'una maquina virtual amb Docker Engine que ens proporcionarà el servei de discovery amb Consul

Farem servir el driver de Docker Machine per l'OpenNebula, i crearem una màquina virtual anomenada Consul, on després executem un contenidor amb el propi servei de Consul dins d'aquesta.

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 
CONSUL_IP=$(docker-machine ip consul)

Podem verificar que s'ha instal·lat correctament el servei de Consul, accedint a la IP de la màquina, que acabem de crear, pel port 8500.

Docker Swarm

Disposarem de dos tipus de màquines virtuals amb Swarm:

  • Swarm Master: Aquesta màquina amb swarm serà l'encarregada de distribuir les instàncies dels contenidors als diferents nodes que tinguem al clúster.
  • Swarm Node: Aquesta o aquestes màquines seran les que executaran propiament els contenidors Docker.

Swarm-master

Creem la màquina virtual, amb el driver de Docker Machine, pel node màster dels clúster:

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

Swarm-node

Creem la màquina virtual amb el driver de Docker Machine, pels diferents nodes dels clúster:

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 tants nodes com vulguem. Només hem d'anar modificant el nom de la màquina virtual.  

Connexió amb el Swarm-master

Un cop hem creat les diferents màquines virtuals que composen el clúster, podem connectar-nos al node màster amb la següent comanda:
 

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

 

docker info


  

Xarxa

 Un cop tenim creat el nostre clúster amb Swarm també tenim l'opció de podercrear xarxes privades dins del clúster.

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

Per a més informació : http://opennebula.org/docker-swarm-with-opennebula/  

Exemple d'ús

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 amb nginx, per exemple:

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



  • Podem comprovar com el contenidor s'està executant en un node del clúster:
    Podem observar que el contenidor amb el nostre nginx esta corrent a la màquina swarm-node-01

    docker ps



    Per accedir al servei del contenidor hem de posar la direcció IP del node del clúster al navegador.

  • No labels