Juju de un vistazo

El otro día me encontré con una herramienta canónica de Juju.


Los fragmentos de Internet afirman que es una herramienta de administración de configuración como Chef, Ansible o Puppet.


Leí oblicuamente los muelles, examiné los repositorios con módulos de encantos (análogos de libros de cocina o libros de jugadas) y argumento que esto no es así.


Juju es más como una orquesta agnóstica de VM (como Nomad o Kubernetes). En él, puede describir declarativamente la configuración de infraestructura de la aplicación: qué aplicaciones ejecutamos, en qué máquinas, en cuántas copias, cómo están conectadas con otros servicios.
Pero a diferencia de Kubernetes, puede funcionar no solo con Docker, sino también con cualquier tipo de máquinas virtuales.


Dicen que el núcleo, el agente y el cliente están escritos en Golang, y no los miré.


La parte relacionada con la configuración en sí misma generalmente se describe en combinación con YAML y Python (los muelles dicen que puede usar otros lenguajes además de python).


¿Cómo funciona todo esto?


Descargo de responsabilidad : este artículo no pretende ser una descripción completa y precisa, prefiero verlo como una forma de reducir el umbral de entrada para aquellos que desean echar un vistazo a Juju y ayudar a navegar por la documentación.


La documentación completa está aquí: https://docs.jujucharms.com/


Como ya se escribió anteriormente, en Juju hay varios componentes:


  • El controlador es la parte del servidor que asigna máquinas virtuales. Cada proveedor [en la nube] tiene su propio controlador (incluso para proveedores que no están en la nube, como LXD local o Metal as a Service ).
    El controlador es una aplicación monolítica de un componente. Se debe ejecutar al menos una copia del controlador en cada proveedor. Hay algunos HA, pero no profundicé en ello.
  • Agente: coloque cada máquina virtual. Hay dos tipos de agentes: para máquina y para unidad. Parece que uno de ellos se coloca en la máquina host, y uno en la máquina virtual. Tampoco entré en detalles.
  • El cliente es una herramienta CLI para gestionar toda esta economía.
  • GUI
  • Una descripción declarativa de todos los componentes del usuario (aplicaciones, máquinas, etc.)
  • Código personalizado para configurar una máquina virtual separada, se llama Charms

(En realidad, hay un árbol de componentes más grande, pero para esta historia lo simplificaremos para que sea más fácil entender qué es qué)


En una descripción declarativa, puede construir aproximadamente las siguientes estructuras de componentes (la GUI dibuja los gráficos automáticamente):
imagen


La parte del servidor de alguna manera crea máquinas virtuales allí, extrae dependencias, establece relaciones entre ellas, rastrea las señales que surgen; todo parece ser bastante estándar allí, como para otros orquestadores.


Y aquí están los módulos para configurar máquinas virtuales llamadas encantos (unidad - encanto), echemos un vistazo más de cerca.


Parece que sé Chef, Ansible y Puppet, probablemente no hay nada nuevo aquí, pero esto no es así. Los creadores de Juju no crearon un DSL para describir declarativamente los recursos en el sistema. En cambio, crearon un marco de trabajo que permitiría que un código completamente normal de Python o Bash sea idempotente y lo asocie con un controlador Juju.


Dispositivo de encanto


Los encantos en sí no son muy simples. Por complejidad estructural, recuerdan los libros de cocina del chef o los roles de ansible. Y, de hecho, es más probable que sean un análogo de los recursos, en lugar de libros de cocina.


Consisten en metadatos / parte declarativa, ganchos perentorios (reacción a eventos) y todo tipo de archivos de datos, como scripts adicionales, documentación o configuraciones típicas.


La parte declarativa describe las interfaces de dependencia de encanto (por ejemplo, el encanto de wordpress depende de mysql, y el encanto de mysql proporciona esta interfaz), la compatibilidad del sistema, las etiquetas, los parámetros de configuración (como los atributos de cookies) y las capas de programa dependiendo de otros encantos ( por ejemplo, la mayoría de los encantos incluyen una layer:basic ).


En ganchos imperativos, se describe una reacción a todo tipo de eventos externos. Por ejemplo, install paquete necesario en el evento de install , lo configure en el evento de configure e start servicio en el evento de start .


Todo esto está escrito en una pitón normal con decoradores (leí en alguna parte la declaración de que puedes escribir en cualquier cosa, incluso en una fiesta, pero no he visto ningún ejemplo).


Un ejemplo ligero clásico es NTP: https://github.com/lampkicking/charm-ntp


Curiosamente, aparentemente, al compilar el encanto, se obtiene una aplicación completamente independiente que se puede ejecutar en el servidor sin dependencias adicionales: en la versión compilada vi que incluía el contenido de todas las capas utilizadas, así como los tarballs de todos los módulos Python utilizados.


Ejemplo para NTP: https://jaas.ai/ntp/32 (vea la lista de archivos en el lado derecho de la página).


Resumen


Juju tiene un enfoque muy interesante e inusual para describir y configurar la infraestructura.


Lo más probable es que el juju tenga un umbral de entrada más alto que el del chef, lo más probable es que los encantos sean más lentos de desarrollar en comparación con los libros de cocina y los playbooks y requieren más habilidades de programación.


Por otro lado, supongo que un modelo con ganchos de eventos lo alienta a escribir un código más correcto.


Me pareció que Juju está más dirigido a los programadores de infraestructura (aquellos que escribieron muchas herramientas CLI en Python en Linux hace 5-7 años), que ahora necesitan configurar servidores, mientras que Chef / Ansible - a los administradores, que en lugar de uno -Dos ahora necesitas configurar cien o dos servidores.


¿Debo usar Juju en 2019?
No estoy seguro


  • Envolverá nuevas aplicaciones (nativas de la nube) en la ventana acoplable en la ventana acoplable y la lanzará en el cuber o ECS
  • Para aplicaciones "antiguas", es probable que ya tenga scripts de implementación escritos en el conjunto o jefe
  • Para nuevos proyectos con arquitectura "antigua", tal vez. PERO :
  • Casi nadie sabe acerca de Juju en RuNet, este es el primer artículo en ruso que describe un poco lo que es

Si trabajas con Juju, escribe en los comentarios donde cometí un error; después de todo, solo leí los muelles durante 2-3 horas.

Source: https://habr.com/ru/post/457816/


All Articles