Juju (antes Ensemble) es una herramienta de gestión de orquestación de servicios desarrollada por Canonical Ltd.. Es un proyecto de código abierto presentado en Launchpad1 y liberado bajo la licencia pública general de Affero (AGPL).2
Juju se concentra en la noción del servicio, abstrayendo la noción de
la máquina o el servidor, y define las relaciones entre aquellos
servicios que son actualizados automáticamente cuando dos servicios
relacionados observan una modificación notable.3
Esto permite subir o bajar escaladamente los servicios fácilmente a
través de la llamada de un simple comando. Por ejemplo, un servicio web
denominado Charm tiene una relación4 establecida con un equilibrador de carga puede subirse horizontalmente con una simple orden de "añadir unidad"5
sin tener que preocuparse de volver a configurar el equilibrador de
carga para declarar las nuevas instancias: las relaciones basadas en
eventos del Charm se encargará de eso.
Los Charms de Juju pueden ser escritos en cualquier lenguaje ejecutable.6
Así pues, vamos a empezar a instalar esta maravilla:
Lo primero es crearnos unas claves para conexiones SSH de juju con los nodos. Podéis encontrar más información en http://eithel-inside.blogspot.com.es/2010/01/autenticacion-ssh-mediante-certificado.html :
Una vez instaladas las claves miremos de instalar los paquetes (siguiendo las instrucciones de https://juju.ubuntu.com/install/ ya que pese a que en los repositorios de la distro 14.04 LTS ya esta incorporado, es aconsejable añadir los repositorios del proyecto que estan más actualizados):
sudo apt-get update && sudo apt-get install juju-core
Con esto ya tenemos instalado juju. Ahora quedará configurar un entorno de trabajo. Lo haremos mediante el archivo ~/.juju/environments.yaml . Lo que haremos es generar el archivo y luego modificarlo con nuestras opciones particulares:
usuario@juju:~$ juju generate-config
A boilerplate environment configuration file has been written to /home/csi/.juju/environments.yaml.
Edit the file to configure your juju environment and run bootstrap.
En este ejemplo voy a configurar Juju para orquestrar una nube hecha con MAAS para dar continuidad a artículos anteriores (http://eithel-inside.blogspot.com.es/2014/06/instalando-un-cluster-maas-en-ubuntu.html), no obstante podría hacerse con hpcloud, amazon, joyent, azure, etc:
Modificamos la linea que pone default: amazon por default: maas . (no es obligatorio pero ya que lo encaramos a orquestrar MAAS, vamos a facilitarnos las cosas).
Luego modificamos las lineas :
maas-server: 'http://192.168.1.1/MAAS/'
maas-oauth: '
Aquí pondremos la IP de nuestro nodo maestro MAAS y la clave que podemos obtener siguiendo estos pasos:
Si hacemos esto, ya podemos irlo probando:
juju status
ERROR Unable to connect to environment "maas".
Please check your credentials or use 'juju bootstrap' to create a new environment.
Error details:
environment is not bootstrapped
Bien, no tenemos errores de configuración y lo que nos dice es que tenemos que hacer el arranque (bootstrapping) de nuestro entorno:
Primero sincronizamos herramientas:
juju sync-tools
*Antiguamente era juju --sync-tools, pero ahora ya no.
Luego ya podemos hacer el bootstrap:
juju bootstrap
A mi usualmente me da un error siempre:
ERROR waited for 10m0s without being able to connect: /var/lib/juju/nonce.txt does not exist
El caso es que en el nodo en donde mira de hacer bootstrap no existe ese archivo. Hay que crearlo con y poner esto:
user-admin:bootstrap
Si todo nos funciona bien veremos algo como:
(...)
Bootstrapping Juju machine agent
Starting Juju machine agent (jujud-machine-0)
En este instante ya podríamos decir que tenemos juju instalado y listo para orquestrar nuestros servicios. Hay que recordar que juju mira de definir las aplicaciones como servicios de manera que nos abstrae de instalar programas y sus relaciones, así como de 'donde' se instalan estos servicios (programas).
Así como antes hiciéramos, podemos ver el estado:
juju status
environment: maas
machines:
"0":
agent-state: started
agent-version: 1.18.4
dns-name: bw4wb.maas
instance-id: /MAAS/api/1.0/nodes/node-01f3f58a-fdf2-11e3-98d2-00160a07b596/
series: trusty
services: {}
Ahora nos quedaría desplegar servicios. Como ejemplo vamos a desplegar el juju-gui, que es un panel que podremos acceder via web y manejar las cosas más habituales de juju de manera gráfica:
juju deploy juju-gui
juju expose juju-gui
¡Ya esta! Es así de mágico. Tenemos desplegado el servicio juju-gui. Como observación decir que si queremos desplegar el servicio en un nodo en cuestión, lo podemos especificar en el momento del deploy:
juju deploy juju-gui --to 0
Si ahora vemos el estado de juju:
juju status
environment: maas
machines:
"0":
agent-state: started
agent-version: 1.18.4
dns-name: bw4wb.maas
instance-id: /MAAS/api/1.0/nodes/node-01f3f58a-fdf2-11e3-98d2-00160a07b596/
series: trusty
services:
juju-gui:
charm: cs:trusty/juju-gui-3
exposed: false
units:
juju-gui/0:
agent-state: started
agent-version: 1.18.4
machine: "0"
open-ports:
- 80/tcp
- 443/tcp
public-address: bw4wb.maas
Con lo que vemos que juju-gui es accesible mediante http://bw4wb.maas:80 o 443
Este vídeo es un ejemplo de instalación de OpenStack mediante Juju-GUI:
Enlace de interés: