Docker Hypriot Cluster Lab: Cluster Docker con Raspberry Pi


Docker Cluster Lab
Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail

Si bien hace unos dias hicimos varios post sobre Docker y Raspberry Pi hoy nos toca hablar de la configuración en cluster para los pequeños mini PC. Hemos elegido Hypriot (http://blog.hypriot.com) como imagen para nuestras Raspberry Pi. El objetivo que tuvo Hypriot fue el de agrupar diversas Raspberry Pi con a partir de tres nodos hasta los que deseemos. En este tutorial hemos usado 3 nodos de Raspberry Pi 2 para llevarlo a cabo. La idea de esta imagen en cluster no es otra que la de facilitar la configuración del mismo, usando un proceso totalmente automático podemos tener en apenas unos minutos nuestro cluster de Docker Swarm funcionando.

Primero de todo necesitamos dos cosas, una de ellas es descargar la última imagen de Hypriot Cluster Lab en su web oficial ,http://blog.hypriot.com/downloads/, y seguidamente utilizar su script flash.sh para hacer la copia de las tarjetas SD que vamos a utilizar. El script flash.sh esta disponible para Linux i Mac, os dejo aquí las dos versiones:

  1.  flash.sh para Linux
  2. flash.sh para Mac OS X

Una vez descargada y descomprimida la imagen de Hypriot Cluster Lab pasamos a hacer la copia en nuestras 3 tarjetas SD. Una de las ventajas de usar el script flash.sh es que podemos definir el hostname que queramos para que después quede todo ordenado, ejecutaremos una orden por cada tarjeta SD:

./flash.sh –hostname cl-master hypriot_20160121-235123_clusterlab.img

./flash.sh –hostname cl-node-1 hypriot_20160121-235123_clusterlab.img

./flash.sh –hostname cl-node-2 hypriot_20160121-235123_clusterlab.img

Una vez lo tenemos todo preparado, empezamos arrancando el primer nodo que le hemos dado de nombre cl-master. Encendemos la Raspberry Pi con la tarjeta SD con hostname cl-master y automáticamente cogerá una dirección DHCP. Recomendamos hacer un Nmap para hacer un discover de hosts y buscar la Raspberry que tendrá escuchando el puerto 8500. En nuestro caso cogió la dirección IP 192.168.1.70

Una vez sabemos que dirección IP es, podemos abrir un navegador y escribir http://<dirección_ip>:8500, esto nos abrirá la interfaz de administración de nuestro cluster de Docker (Consul) y veremos que tenemos el nodo cl-master activo. Es muy importante dejar que este nodo arranque bien y se recomienda esperar unos 2 minutos antes de encender los siguientes nodos para que funcione correctamente el discover que veremos a continuación. Al acceder por web debemos de ver algo así:

Docker Cluster Lab

 

Ahora vamos a hacer el mismo proceso con las 2 Raspberry Pi restantes. Podemos encender una primero y cuando en la interfaz web veamos que se ha unido al cluster, encender la otra . Finalmente lo que veremos será esto:

Docker Cluster Lab Consul

Genial ! ya tenemos nuestro cluster creado! Este cluster esta usando Docker Swarm para gestionar los containers. Docker swarm distribuye los containers en los diferentes nodos en base a diferentes estrategias, por defecto Docker Swarm utilitza la estrategia spread para distribuir los containers en diferentes nodos de manera que el que menos cargado esté ejecutará el container que lanzemos.

A continuación lo que haremos será conectarnos por ssh al nodo cl-master. En nuestro caso será así:

ssh root@192.168.1.70

Default Password: hypriot

Si queremos mostrar información acerca del cluster de swarm tendremos que ejecutar el comando docker con la opción -H para conectarnos a la API de Docker. A continuación os mostramos como ver la información del cluster:

docker -H 192.168.1.70:2378 info

docker swarm info

docker swarm info

Ahora es momento de empezar a poder gestionar esta pequeña infraestructura vía web. Para ello primero lo que vamos a hacer es instalar en el nodo master una interfície web para llevar el control de los containers de los nodos que corren docker. Para ello vamos a ejecutar el siguiente comando en el nodo master, ya que la instalación la haremos sobre este nodo como vemos a continuación:

docker -H 127.0.0.1:2378 run -d -p 9000:9000 –env=”constraint:node==cl-master” –name dockerui hypriot/rpi-dockerui -e http://192.168.200.1:2378

Dentro de las opciones que le pasamos al comando la mas relevante es “–env=”constraint:node==cl-master” que le indica al swarm que arranque el container en el nodo master. Sin este parámetro el container arrancaría en el nodo que el Docker Swarm crea conveniente. Con la opción constraint:node tenemos el control de en que nodo queremos arrancar nuestro container dentro del cluster.

Si ahora abrimos la web http://<dirección_ip_cl-master>:9000  tendremos un dashboard con una vista general de los containers que estan ejecutandose muy similar a la siguiente imagen:

DockerUI

DockerUI

Si queremos ver los contenedores que se estan ejecutando pero desde la línea de comandos en el nodo master pondremos lo siguiente:

docker -H 127.0.0.1:2378 ps

Ahora cada vez que queramos lanzar un contenedor recordar hacerlo con la opción -H desde el nodo master para que lo lanze mediante docker swarm. En próximos posts ampliaremos funcionalidades.

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail