Cloud Computing

29 out, 2013

Provisionamento orquestrado de serviços em cloud com Juju

Publicidade

Escrever a receita de como um servidor web deve ser instanciado e configurado não é o que basta para resolver todos os desafios de infraestrutura para sua aplicação, pois isso é apenas uma parte dos problemas de gestão.

É preciso que o provisionamento de serviços e servidores seja feito de maneira orquestrada, pois os serviços devem se comunicar uns com os outros, e sabemos que cada serviço tem uma necessidade diferente para escalar, assim como também é necessário que sejam realizados backups, análises de performance, gestão de logs etc.

Existe agora uma solução que realiza implementação, integração e ampliação instantaneamente em todas as grandes nuvens públicas e privadas – ela se chama Juju, onde há os “charms”, que são responsáveis por oferecer uma interface padronizada que permite essa integração com outros serviços. Para compreender melhor a diferença, enquanto as ferramentas de provisionamento estão preocupadas em instalar e configurar, a Juju faz tudo isso, mas também se preocupa com a integração.

Para que tudo isso possa acontecer, é necessário criar o ambiente juju – existem versões para Linux, Mac e Windows. Depois de instalado, é necessário que seja realizado a configuração inicial, para isso basta executar o comando:

$ juju generate-config

Feito isso, será criado o diretório ~/.juju com todos os arquivos e diretórios necessários para que você possa começar a explorar a ferramenta. Inicialmente, basta você editar o arquivo environments.yaml que está nesse diretório e configurar qual provedor de cloud você irá utilizar, e suas credenciais.

Precisamos preparar o ambiente no provedor de cloud para poder instalar o state-server do juju, que é responsável por gerenciar todos os serviços e recursos necessários para realizar a integração com segurança entre todos os pontos envolvidos e, para isso, basta executar o comando:

$ juju bootstrap
Com o state-server instalado, agora podemos começar a instalar e a integrar os serviços. Para que você possa usufruir do juju, é necessário que todos os serviços instalados estejam concebidos através de um “charm”. Já existem diversos prontos neste link. Caso não encontre você terá que montar um, o que também é muito simples, vide aqui.

Para este artigo, iremos utilizar o exemplo clássico utilizado na própria documentação do juju, que é o setup do WordPress. Vamos supor que para iniciar um deploy de um novo site, precisemos do aplicativo em si e de um banco de dados, no caso o MySQL. Para realizar a instalação destes dois serviços, basta:

$ juju deploy cs:precise/wordpress
$ juju deploy cs:precise/mysql

Até o momento, os serviços foram instalados, porém não estão integrados, precisamos avisar que eles irão trabalhar de maneira integrada, para isto:

$ juju add-relation wordpress mysql

topology-step-1

Pronto, estamos com um WordPress instalado e utilizando um serviço de MySQL pronto, e isso só é possível pois ambos estão preparados para trabalhar com o juju de maneira integrada, e para que tudo isso? Em um cenário que você queira escalar horizontalmente por algum motivo, basta adicionar mais unidade onde é necessário, por exemplo:

$ juju add-unit wordpress

topology-step-3

Ou seja, agora a topologia são duas máquinas sendo executadas com o WordPress e utilizando o mesmo banco de dados.

Além de integrar os serviços entre si, existem hooks que disponibilizam mecanismos para realizar a configuração dos serviços, como trocar o titulo do WordPress:

$ juju set wordpress title="My Blog"

Para gerenciar os serviço, você pode utilizar o comando:

$ juju status

Assim como para tornar a ferramenta pública para todos:

$ juju expose wordpress

Veja mais:

As imagens foram criadas pelo Gustavo Niemeyer.
Abs!