Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

lunes, 30 de junio de 2014

Instalando Juju para orquestrar nuestra nube (MAAS, Amazon Web Services, EC2, etc..).

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 :

usuario@juju$ ssh-keygen
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 add-apt-repository ppa:juju/stable
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:
Vamos a las preferencias de la página MAAS http://${my-maas-server}:80/MAAS/ y le damos a Preferences desde el menú desplegable que aparecerá cuando clicamos a nuestro nombre de usuario (arriba a la derecha de la página). Copiamos la clave del apartado MAAS keys .

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:

That u don't know what you've got 'til it's gone