Mateus Müller

O carinha do Linux

18 mar. 2020

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:

  1. IaaS com OpenNebula
  2. Provisionamento com Terraform
  3. Gerência de Configuração com Puppet

Mas, ainda vou adicionar algumas coisas a mais para complementar.

  1. Versionamento no Git
  2. Monitoramento com CollectD e Graphite
  3. Dashboard com Grafana
  4. Talvez essas ferramentas vão rodar em containers Docker ou em Kubernetes, ainda não decidi
  5. 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!

Comentários Disqus