Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Panel
titleColor#FFF
titleBGColor#2A7886
titleContinguts

Table of Contents

 

 

 

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.

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 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

Consul

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.

Code Block
themeRDark
languagebash
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 

Docker Swarm

Diposarem 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 els contenidors docker.

Swarm-master

Creem la màquina virtual del swarm-master:

Code Block
themeRDark
languageperl
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

Swarm-node

 Creem la màquina virtual del swarm-node:

Code Block
themeRDark
languageperl
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 

Connexió amb el Swarm

Un cop hem creat les diferents màquines virtuals que volem, ens connectem al node master del swarm.
 

Code Block
themeRDark
languageperl
eval $(docker-machine env --swarm swarm-master)
docker info

Xarxa

 Un cop el nostre cluster d'swarm  està corrent hem de crear la xarxa interna del cluster.


Code Block
themeRDark
languageperl
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/

Exemple d'ús

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:

    Code Block
    themeEmacs
    languagebash
    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
    Warning

    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:

    Code Block
    themeEmacs
    languagebash
    eval $(docker-machine env --swarm swarm-master)
    docker info


     

  • Creem la xarxa interna del clúster swarm i visualitzem les interfícies virtuals creades:

    Code Block
    themeEmacs
    languagebash
    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

    Code Block
    themeEmacs
    languagebash
    docker pull nginx
    docker run --name mynginx -d -p 80:80 nginx

    Image AddedImage Removed


  • Podem comprovar com el contenidor s'està executant en un node del clúster:




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