Outro dia, me deparei com uma ferramenta Canonical Juju.
Recados da Internet afirmam que é uma ferramenta de gerenciamento de configurações como Chef, Ansible ou Puppet.
Eu li obliquamente as docas, olhei nos repositórios com módulos de encantos (análogos de livros de receitas ou livros de exercícios) e argumento que não é assim.
Juju é mais como uma orquestra independente de VM (como Nomad ou Kubernetes). Nele, é possível descrever declarativamente a configuração da infraestrutura do aplicativo: quais aplicativos executamos, em quais máquinas, em quantas cópias, como eles estão conectados a outros serviços.
Mas, diferentemente do Kubernetes, ele pode funcionar não apenas com o Docker, mas também com qualquer tipo de máquina virtual.
Eles dizem que o kernel, agente e cliente estão escritos em Golang - e eu não os olhei.
A parte relacionada à configuração em si é geralmente descrita em uma combinação de YAML e Python (as docas dizem que você pode usar outras linguagens além do python).
Como isso tudo funciona?
Isenção de responsabilidade : este artigo não pretende ser uma descrição completa e precisa, mas sim uma forma de diminuir o limite de entrada para quem deseja dar uma olhada em Juju e ajudar a navegar na documentação.
A documentação completa está aqui: https://docs.jujucharms.com/
Como já foi escrito acima, em Juju existem vários componentes:
- O controlador é a parte do servidor que aloca máquinas virtuais. Cada provedor de [nuvem] possui seu próprio controlador (inclusive para provedores de nuvem não exatamente, como LXD local ou Metal as a Service ).
O controlador é um aplicativo monolítico de um componente. Pelo menos uma cópia do controlador deve estar em execução em cada provedor. Há algum HA, mas não me aprofundei nele. - Agente - coloque em cada máquina virtual. Existem dois tipos de agentes - para máquina e para unidade. Parece que um deles é colocado na máquina host e outro na máquina virtual - eu também não entrei em detalhes.
- O cliente é uma ferramenta CLI para gerenciar toda essa economia.
- GUI
- Uma descrição declarativa de todos os componentes do usuário (aplicativos, máquinas, etc.)
- Código personalizado para configurar uma máquina virtual separada, chamada Charms
(Na verdade, existe uma árvore maior de componentes, mas, para esta história, vamos simplificá-la para facilitar a compreensão do que é o que)
Em uma descrição declarativa, você pode construir aproximadamente as seguintes estruturas de componentes (os gráficos são desenhados automaticamente pela GUI):

A parte do servidor, de alguma forma, cria máquinas virtuais lá, puxa dependências, estabelece relacionamentos entre elas, monitora os sinais que surgem - tudo parece ser bastante padrão lá, como para outros orquestradores.
E aqui estão os módulos para configurar máquinas virtuais chamadas de encantos (unidade - encanto), vamos dar uma olhada.
Parece que eu conheço Chef, Ansible e Puppet, provavelmente não há nada de novo aqui, mas isso não é verdade. Os criadores de Juju não criaram uma DSL para descrever declarativamente os recursos no sistema. Em vez disso, eles criaram uma estrutura que permitia que um código python ou bash completamente comum fosse idempotente e o associasse a um controlador Juju.
Dispositivo de charme
Os encantos em si não são muito simples. Pela complexidade estrutural, lembram os livros de receitas do chef ou os papéis do ansible. E, de fato, eles provavelmente são um análogo de recursos, não livros de receitas.
Eles consistem em metadados / parte declarativa, ganchos peremptórios (reação a eventos) e todos os tipos de arquivos de dados, como scripts adicionais, documentação ou configurações típicas.
A parte declarativa descreve as interfaces de dependência de charme (por exemplo, o charme wordpress depende do mysql, e o charme mysql fornece essa interface), compatibilidade do sistema, tags, parâmetros de configuração (como atributos de cookie) e camadas de programa, dependendo de outros encantos ( por exemplo, a maioria dos encantos inclui uma layer:basic
).
Nos ganchos imperativos, é descrita uma reação a todos os tipos de eventos externos. Por exemplo, install
pacote necessário no evento de install
, configure
no evento de configure
e start
serviço no evento de start
.
Tudo isso está escrito em um python comum com decoradores (li em algum lugar a declaração de que você pode escrever em qualquer coisa, mesmo em uma festança, mas não vi exemplos).
Um exemplo leve e clássico é o NTP: https://github.com/lampkicking/charm-ntp
Curiosamente, aparentemente, ao compilar o encanto, é obtido um aplicativo completamente independente que pode ser executado no servidor sem dependências adicionais - na versão compilada, vi que incluía o conteúdo de todas as camadas usadas por ele, bem como os tarballs de todos os módulos Python usados.
Exemplo para NTP: https://jaas.ai/ntp/32 (consulte a lista de arquivos no lado direito da página).
Sumário
Juju tem uma abordagem muito interessante e incomum para descrever e configurar a infraestrutura.
Muito provavelmente, o juju tem um limite de entrada mais alto do que o do chef, é mais provável que os encantos sejam mais lentos em relação aos livros de receitas e manuais e exigem mais habilidades de programação.
Por outro lado, suponho que um modelo com ganchos de eventos o incentive a escrever um código mais correto.
Pareceu-me que Juju é mais voltado para programadores de infraestrutura (aqueles que escreveram muitas ferramentas CLI em python no Linux há 5-7 anos), que agora precisam configurar servidores, enquanto Chef / Ansible - para administradores, que em vez de um -Dois agora, você precisa configurar cem ou dois servidores.
Devo usar o Juju em 2019?
Não tenho certeza:
- Você agrupará novos aplicativos (nativos da nuvem) na janela de encaixe na janela de encaixe e a iniciará no cubador ou no ECS
- Para aplicativos "antigos", você provavelmente já possui scripts de implantação escritos no conjunto ou chefe
- Para novos projetos com arquitetura "antiga" - talvez. MAS :
- Quase ninguém sabe sobre Juju no RuNet, este é o primeiro artigo em russo que descreve um pouco o que é
Se você trabalha com Juju, escreva nos comentários onde cometi um erro - afinal, eu só li as docas por 2-3 horas.