Projeto de DevOps em casa
Oi pessoal, quero compartilhar com vocês um pouco da minha ideia para estudar alguns conteúdos dos pilares da cultura DevOps, como por exemplo CI/CD, gerência de configuração, provisionamento de infraestrutura e tudo mais. Tudo isso em casa…
O objetivo central é aprender mais sobre Terraform e alguma ferramenta de gerência de configuração como Ansible ou Puppet. Ainda estou decidindo.
O projeto base consiste em três coisas:
- IaaS com OpenNebula
- Provisionamento com Terraform
- Gerência de Configuração com Puppet
Mas, ainda vou adicionar algumas coisas a mais para complementar.
- Versionamento no Git
- Monitoramento com CollectD e Graphite
- Dashboard com Grafana
- Talvez essas ferramentas vão rodar em containers Docker ou em Kubernetes, ainda não decidi
- Jenkins para a criação da pipeline que vai juntar o Terraform e o Puppet
Vamos falar um pouquinho das ferramentas?
OpenNebula
O OpenNebula é uma ferramenta open-source para IaaS, tanto privada quanto híbrida. Decidi usar ela para não me prender a AWS, Amazon ou GCP.
A ideia do projeto é rodar tudo localmente, em casa. O resultado final eu pretendo compartilhar como algo no currículo para, talvez um dia, conseguir uma vaga no mundo DevOps.
Terraform
O Terraform é usado para provisionar a infraestrutura como código, isto é, VMs, networks, security groups…
Por sorte, temos um provider oficial para o OpenNebula. Isso significa que vou criar códigos usando Terraform e suas boas práticas, principalmente modularidade, para provisionar as VMs.
Os códigos ficarão armazenados no GitHub.
Puppet
O Puppet é usado para gerência de configuração, isto é, instalar programas e fazer a configuração necessária para chegar em um estado específico.
O Ansible faz a mesma coisa, mas é agentless. Entretanto, vejo que muitas empresas usam o Puppet, então acho que será um aprendizado interessante e valioso. Sem contar que existe uma certificação do Puppet, será que passo?
A ideia é ser complementar ao Terraform. Então, o Terraform sobe as VMs e depois o Puppet faz a configuração.
Nessa configuração eu pretendo já alterar o DNS, instalar a solução de monitoramento (collectd), mudar o hostname e assim por diante…
Jenkins
Para não precisar chamar tanto o Terraform quanto o Puppet manualmente, vou criar uma pipeline/job no Jenkins para isso.
Também quero desenvolver uma pequena pipeline de testes com webhook para o GitHub, assim dá para garantir que o código não tem algo de errado.
Não sei se o Jenkins é a melhor ferramenta para criar jobs assim. Acho que o rundeck faz isso, mas não tenho certeza.
Docker e Kubernetes
Para não precisar instalar o Jenkins, Grafana e Graphite manualmente, acho que um container cairía bem aqui.
Acredito que posso usar Docker tranquilamente para isso. Entretanto, seria interessante estudar um pouco sobre a disponibilidade dos containers usando o Kubernetes.
Grafana e Graphite
O Graphite será o meu banco de dados de métricas, que serão coletadas pelo CollectD.
O Grafana vai se conectar no Graphite para gerar dashboards mais bonitos.
Basicamente essa é a minha ideia inicial, aceito sugestões!