Semana del desarrollador
Miercoles 1 de Febrero del 2012 - Charming Juju - m_3
1 11:01 < chilicuil> lo que sigue sera una charla por +m_3, sobre juju y las recetas que podemos hacer para
2 crear servicios a traves de ubuntu
3 11:02 < chilicuil> esta es una platica enfocada a Ubuntu server
4 11:02 < chilicuil> desde este ciclo, ubuntu server ha tenido mucha actividad con orchestra y juju,
5 dos tecnologias utilizadas para levantar servicios en cuestion de minutos
6 11:03 < chilicuil> comenzare la interpretacion ahora
7 11:04 < chilicuil> en lugar de concentrarnos en una receta particular, dare ejemplo de varias de ellas,
8 y de como pueden ser usadas para levantar servicios populares
9 11:05 < chilicuil> hare un poco trampa, y utilizare una sesion que he preparado para esta sesion, usando
10 ec2 para ello
11 11:11 < chilicuil> podran ver los ejemplos (con su navegador o cliente ssh) a traves de
12 ec2-107-21-156-68.compute-1.amazonaws.com
13 11:11 < chilicuil> el usuario y contraseña son guest/guest
14 11:12 < chilicuil> bien, juju es un conjunto de herramientas hechas en ubuntu
15 11:13 < chilicuil> es un nuevo paradigma para el levantamiento de servicios, donde no solo te concentras
16 en mantener sincronizadas los archivos de configuracion y de automatizar el proceso, sino que se ven como
17 una infraestructura de servicios
18 11:13 < chilicuil> #esto no es completamente cierto, pero ciertamente es el primer esfuerzo en Ubuntu
19 11:14 < chilicuil> si vemos la administracion como un conjunto de servicios, podremos ver que unos
20 servicios pueden interactuar con otros
21 11:14 < chilicuil> por ejemplo, aplicaciones web, con bases de datos, caches, monitores, almacenamiento
22 de archivos.., etc
23 11:15 < chilicuil> el punto de juju es mantener ese conjunto de servicios dentro de tu infraestructura
24 11:16 < chilicuil> estamos hablando de tener los servicios de grandes compañias, en tus propios equipos
25 11:18 < chilicuil> bien, si se han conectado, ahora veran una lista de servicios
26 11:18 < chilicuil> eso es lo que el usuario final de juju tiene que ver
27 11:18 < chilicuil> juju bootstrap
28 11:18 < chilicuil> juju deploy [options] service
29 11:19 < chilicuil> juju add-relation servicio1 servicio2
30 11:19 < chilicuil> juju expose service
31 11:19 < chilicuil> el ultimo paso, pone el servicio en la red
32 11:20 < chilicuil> los pasos anteriores son los que se siguen para levantar un servicio
33 11:20 < chilicuil> la manera en la que juju representa servicios en a trave de charms
34 11:20 < chilicuil> tenemos charms para muchos servicios, algunos de ellos son mongo, ganglia, mediawiki,
35 mysql, etc, etc, etc
36 11:21 < chilicuil> estos charms contienen las mejores practicas de los administradores que han trabajado
37 con ellas
38 11:22 < chilicuil> para acceder via ssh, usen $ ssh guest@ec2-107-21-156-68.compute-1.amazonaws.com
39 #entraran a una consola donde podran ver todo lo que hace m_3, impresionante"!
40 11:22 < chilicuil> el ejemplo mas dificil en el que puedo pensar ahora es openstack
41 11:23 < chilicuil> tenemos charms para instalar openstack en servidores locales usando juju
42 11:23 < chilicuil> sin embargo comenzaremos con servicios mas simples
43 11:27 < chilicuil> hablaremos sobre la estructura de estos charms, pero a grandes rasgos es importante
44 saber que pueden combinarse para crear servicios mas complejos
45 11:29 < chilicuil> los logs del Ubuntu Developer Week estaran disponibles en
46 wiki.ubuntu.com/UbuntuDeveloperWeek instantes despues de finalizadas las charlas, las de la
47 interpretacion tambien estara disponible en wiki.ubuntu.com/SemanaDesarrollador
48 11:29 < chilicuil> los charms pueden escribirse en cualquier lenguaje
49 11:30 < chilicuil> y la curva de aprendizaje no es muy grande, juju es basicamente un framework de eventos
50 11:30 < chilicuil> usa agentes y zookeeper para saber que esta pasando con esos agentes
51 11:31 < chilicuil> justo ahora en la sesion ssh, podemos ver el juju para la configuracion de una wiki
52 11:32 < chilicuil> juju funciona sobre ec2, hpcloud, openstack, lxc, servidores locales y buena parte
53 en eucalyptus
54 11:33 < chilicuil> se puede instalar juju en una sola maquina si asi lo requieren, se adapta a sus recursos
55 11:33 < chilicuil> como ejemplo, les contare que el otro dia estaba desarrollando una aplicacion para un
56 nodo de mongo
57 11:34 < chilicuil> en produccion, tendriamos algo un proxy enfrente, algunas docenas de mongo y otras tantas
58 de recuperacion
59 11:34 < chilicuil> mientras que en mi maquina, solo estaba usando una sola instancia de mongo
60 11:35 < chilicuil> juju es escalable, veremos como en un momento
61 11:37 < chilicuil> bien, pensemos en la configuracion de algun servicio
62 11:37 < chilicuil> hay algunas cosas que suelen hacer una vez instalado su SO
63 11:38 < chilicuil> estas cosas pueden ser muy simples, otras no tanto
64 11:39 < chilicuil> juju te permite instalar software a traves de los repositorios, pero tambien a traves de
65 npm o de gems
66 11:39 < chilicuil> si tu aplicacion necesita una version especifica de django o de rails que no este en los
67 repositorios, puedes instalarlo
68 11:40 < chilicuil> por supuesto que tambien puedes cagarla
69 11:40 < chilicuil> intentamos hacer que los charms que elaboramos sean seguros
70 11:41 < chilicuil> que las cosas que descarguemos sean verificadas, que los charms se vean por otros
71 desarrolladores, que se prueben para ver que no estan rotos
72 11:42 < chilicuil> basicamente un charm es una lista de eventos, eventos que seran ejecutados cuando
73 ciertas caracteristicas se cumplan
74 11:42 < chilicuil> ahora veremos en la sesion ssh un ejemplo de ello
75 11:43 < chilicuil> para este charm (postgresql), tenemos 'install, start, stop, upgrade-charm'
76 11:43 < chilicuil> en este caso el charm esta escrito en shell scripting, pero pueden crearse en cualquier
77 lenguaje
78 11:43 < chilicuil> lo podrian escribir incluso en clojure ;)
79 11:44 < chilicuil> solo tienen que asegurarse de que install cree las condiciones necesarias para ejecutar
80 el resto de instrucciones, start, stop....
81 11:45 < chilicuil> como habia dicho, cada charm se puede relacionar con otros servicios
82 11:46 < chilicuil> los servicios con los que se puede relacionar, se definen en los metadatos del charm
83 11:46 < chilicuil> para el ejemplo de postresql
84 11:46 < chilicuil> y los que tienen la sesion ssh abierta, se puede ver que se relaciona con:
85 11:46 < chilicuil> unin-node
86 11:46 < chilicuil> ysql-oneway-replication
87 11:47 < chilicuil> interface: mysql
88 11:47 < chilicuil> slave:
89 11:47 < chilicuil> interface: mysql
90 11:47 < chilicuil> cache:
91 11:47 < chilicuil> interface: memcache
92 11:47 < chilicuil> provides:
93 11:47 < chilicuil> website:
94 11:47 < chilicuil> interface: http
95 11:47 < chilicuil> munin:
96 11:47 < chilicuil> interface: munin-node
97 11:47 < chilicuil> en ese caso se puede relacionar con memcache, http, munin-node, etc
98 11:48 < chilicuil> #nota del interprete, se me han pasado las relaciones de postresql, las que se
99 mostraron fueron las de mysql
100 11:48 < chilicuil> por ejemplo, en el caso de mysql y postresql se puede ver que ofrecen el servicio db
101 11:49 < chilicuil> otros servicios como mediawiki, pueden consumir este recurso
102 11:49 < chilicuil> juju utiliza estas definiciones para combinar servicios
103 11:49 < chilicuil> y cuando se combinan, se disparan eventos, estos eventos pueden ser configurados para
104 hacer lo que ustedes quieren
105 11:50 < chilicuil> cada vez que se crea un servicio, juju llama a las funciones "install" y "start"
106 del respectivo charm
107 11:51 < chilicuil> una vez que tenemos varios servicios usamos
108 11:51 < chilicuil> $ juju add-relation mysql mediawiki y es donde la magia comienza
109 11:51 < chilicuil> bueno, de hecho no es magia, juju corre los eventos que corresponden y pueden pasar
110 cosas sorprendentes
111 11:52 < chilicuil> nos podemos poner a pensar en la cantidad de cosas que necesitamos para levantar un servicio
112 11:53 < chilicuil> juju separa eso en las cosas que se pueden hacer en la instalacion, cosas basicas y
113 pasos adicionales para relacionarlos con otros servicios
114 11:53 < chilicuil> asi, podemos aprender de una forma a instalar mediawiki o mysql
115 11:53 < chilicuil> solo eso
116 11:54 < chilicuil> y despues _relacionarlas_!, por ejemplo puedo crear una base de datos
117 11:54 < chilicuil> y despues describir la manera en la que alguna otra aplicacion puede relacionarse con ella
118 11:54 < chilicuil> no necesita saber mas!
119 11:54 < chilicuil> uno puede usar la misma base de datos para instalar mediawiki, que para instalar wordpress
120 11:55 < chilicuil> podemos tener instrucciones como 'create_database()', que crean una base de datos en
121 el respectivo servicio y wordpress no tiene porque saber si esta creando esa base de datos en mysql o en pgsql
122 11:56 < chilicuil> para esto establecemos una relacion con "relation-set"
123 11:57 < chilicuil> y "relation-get"
124 11:58 < chilicuil> para obtener mas informacion sobre los charms, pueden entrar a
125 https://juju.ubuntu.com/Charms
126 11:58 < chilicuil> tambien pueden descargarlos si instalan $ charm-tools
127 11:58 < chilicuil> y despues usan $ charm getall algun/directorio/oneiric para que se descarguen en ese
128 directorio
129 11:59 < chilicuil> rm_ se pregunta si relation-set y relation-get son visibles desde la definicion de
130 los hooks, es decir si se agregan al $PATH
131 12:00 < chilicuil> m_3 ha dicho que si, y tambien se exportan juju-log, open-port, config-get..., todos
132 estan disponibles durante la ejecucion de los hooks
133 12:00 < chilicuil> eso es todo por esta sesion