Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
|
La idea és disposar d'un cluster de docker-engine clúster amb Docker Engine i poder instanciar-hi allà els nostres contenidors dockerDocker.
Docker Swarm: Ens permet crear un cluster dockerclúster Docker. El node master màster rebrà i distribuirà els contenidors als nodes secundaris on s'executaran.
Consul: Ens roporcionarà proporcionarà el servei de discover 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 cluster Docker Swarm Clúster amb l'OpenNebula hem d'instalar el : Docker Engine, Docker Machine i el Driver de Docker Machine per l'Opennebula.
Aquí està el manual 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 discover discovery amb consul Consul
Farem servir el driver de Docker Machine per l'OpenNebula, i crearem Creem una màquina virtual a l'OpenNebula anomenada consul i deprés anomenada Consul, on després executem un contenidor docker de consul amb el propi servei de Consul dins d'ellaaquesta.
Code Block | ||||
---|---|---|---|---|
| ||||
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
Diposarem Disposarem de dos tipus de màquines virtuals amb swarmSwarm:
- Swarm -masterMaster: Aquesta màquina amb swarm serà l'encarregada de distribuir les instàncies dels contenidors als diferents nodes que tinguem al clúster.
- Swarm -nodeNode: Aquesta o aquestes màquines seran les que executaran propiament els contenidors dockerDocker.
Swarm-master
Creem la màquina virtual del swarm-master, amb el driver de Docker Machine, pel node màster dels clúster:
Code Block | ||||
---|---|---|---|---|
| ||||
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 amb el driver de Docker Machine, pels diferents nodes dels clúster:
Code Block | ||||
---|---|---|---|---|
| ||||
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 tants nodes que com vulguem. Només hem de canviar 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 volem, ens connectem al node master del swarm.composen el clúster, podem connectar-nos al node màster amb la següent comanda:
Code Block | ||||
---|---|---|---|---|
| ||||
eval $(docker-machine env --swarm swarm-master) |
Code Block | ||||
---|---|---|---|---|
| ||||
docker info |
Xarxa
Un cop tenim creat el nostre cluster d'swarm està corrent hem de crear la xarxa interna del clusterclúster amb Swarm també tenim l'opció de podercrear xarxes privades dins del clúster.
Code Block | ||||
---|---|---|---|---|
| ||||
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:
- boot2docker
- Docker-Machine-Ubuntu-14.04
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:
theme | Emacs |
---|---|
language | bash |
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 | ||||
---|---|---|---|---|
| ||||
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 | ||||
---|---|---|---|---|
| ||||
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 Executar contenidors Docker al clúster creat:
Ara podem començar a fer servir docker Docker sobre el clúster que acabem de crear:
Utilitzarem un contenidor amb nginx, per exemple:
Code Block theme Emacs language bash 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-01Code Block theme RDark language perl docker ps
Per accedir al servei del contenidor hem de posar la direcció IP del node del clúster al navegador
.