GitOps
LidoNesta aula, você aprenderá os fundamentos do GitOps, uma prática que usa o Git como fonte da verdade para infraestrutura e aplicações, com foco em reconciliação contínua e ferramentas como ArgoCD e Flux. Exploraremos os benefícios dessa abordagem, incluindo maior segurança, rastreabilidade e automação, com exemplos práticos em bash.
GitOps é uma prática moderna de entrega e operação de software que coloca o Git no centro do processo, tornando-o a fonte da verdade para o estado desejado de sistemas e aplicações. Em vez de aplicar mudanças diretamente em clusters ou servidores, tudo é declarado em repositórios Git, e ferramentas automatizadas garantem que o ambiente real sempre corresponda ao que está descrito no código. Essa abordagem combina princípios de Infraestrutura como Código (IaC), controle de versão e automação, trazendo mais segurança, rastreabilidade e eficiência para equipes de DevOps.
Nesta aula, vamos explorar os conceitos essenciais do GitOps, começando pelo papel do Git como fonte da verdade, passando pelo mecanismo de reconciliação, e conhecendo as principais ferramentas como ArgoCD e Flux. Também discutiremos os benefícios práticos que essa metodologia oferece, com exemplos de comandos e configurações que ilustram o fluxo de trabalho.
Git como fonte da verdade
No GitOps, o repositório Git é a única fonte de verdade para o estado desejado da infraestrutura e das aplicações. Isso significa que qualquer alteração no ambiente deve ser feita por meio de commits e merges no repositório, nunca por acesso direto ao servidor ou cluster. Essa prática garante que tudo seja versionado, auditável e replicável.
Para entender na prática, imagine que você quer atualizar a versão de uma aplicação em um cluster Kubernetes. Em vez de executar kubectl set image diretamente, você altera o manifesto da aplicação no repositório Git e faz um push. A ferramenta GitOps detecta a mudança e aplica automaticamente no cluster. O repositório contém todos os manifests (YAML, Helm Charts, etc.) que descrevem o estado desejado.
Exemplo de estrutura de repositório:
meu-app/
├── apps/
│ └── frontend/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
├── infra/
│ └── ingress-nginx/
│ └── values.yaml
└── README.md
Com isso, qualquer pessoa da equipe pode revisar as mudanças via pull request, e o histórico de mudanças fica registrado. Além disso, se algo der errado, é possível reverter para um estado anterior simplesmente revertendo o commit.
Reconciliação
Reconciliação é o processo contínuo de comparar o estado atual do ambiente com o estado desejado descrito no Git, e aplicar as correções necessárias para que eles se tornem iguais. Ferramentas GitOps monitoram constantemente o repositório e o ambiente, garantindo que não haja drift (desvio) entre o que foi declarado e o que está rodando.
O ciclo de reconciliação funciona assim: a ferramenta observa o estado real (por exemplo, pods em um cluster Kubernetes), compara com o estado desejado (manifests no Git), e se houver diferença, executa ações para alinhar. Isso pode incluir criar, atualizar ou excluir recursos. Esse processo é repetido em intervalos regulares ou em resposta a eventos (como um push no repositório).
Exemplo de comando para verificar o estado de recursos no Kubernetes:
kubectl get all -n meu-app
Se um pod for deletado manualmente, a ferramenta GitOps o recriará automaticamente, pois o estado desejado ainda exige aquele pod. Isso garante que o ambiente sempre se mantenha íntegro.
ArgoCD/Flux (visão geral)
ArgoCD e Flux são as duas ferramentas mais populares para implementar GitOps em Kubernetes. Ambas automatizam a sincronização entre o Git e o cluster, mas com abordagens e características distintas.
ArgoCD é baseado em uma arquitetura de pull: ele roda dentro do cluster e periodicamente verifica o repositório Git em busca de mudanças. Ele também oferece uma interface web amigável, suporte a múltiplos clusters e integração com SSO. Para instalar o ArgoCD, você pode usar o seguinte comando:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Já o Flux tem uma abordagem mais orientada a eventos, usando controladores dentro do cluster que reagem a mudanças no repositório. Ele é conhecido por sua extensibilidade e integração nativa com o ecossistema Kubernetes (como Helm e Kustomize). Para instalar o Flux CLI, use:
curl -s https://fluxcd.io/install.sh | sudo bash
Ambas as ferramentas permitem declarar aplicações e infraestrutura, e mantêm o cluster sincronizado com o Git. A escolha entre elas depende de necessidades específicas, como complexidade, integrações e preferências da equipe.
Benefícios
Adotar GitOps traz inúmeros benefícios para times de DevOps. Um dos principais é a maior segurança: como o Git é a fonte da verdade, o acesso ao cluster é restrito, e as mudanças passam por revisão de código, reduzindo riscos de alterações não autorizadas.
Outro benefício é a rastreabilidade total: cada mudança no ambiente está ligada a um commit, o que facilita auditorias e debug de incidentes. Além disso, a automação de reconciliação garante que o sistema se auto-repare, aumentando a confiabilidade e reduzindo o trabalho manual.
Por fim, GitOps promove consistência entre ambientes (dev, staging, prod), pois o mesmo repositório pode ser usado para todos, com apenas diferenças de configuração. Isso acelera o ciclo de entrega e melhora a colaboração entre desenvolvedores e operadores.
Boas Práticas e Observações Finais
Para aproveitar ao máximo o GitOps, é importante seguir algumas boas práticas. Mantenha o repositório bem organizado, com diretórios claros para aplicações e infraestrutura. Use pull requests para todas as mudanças, e configure revisões obrigatórias. Além disso, implemente políticas de segurança, como assinatura de commits e segredos gerenciados externamente (ex.: Vault).
Monitore regularmente o estado de sincronização das suas aplicações e configure alertas para falhas de reconciliação. Lembre-se de que GitOps não se limita a Kubernetes; pode ser aplicado a outros tipos de infraestrutura, desde que haja ferramentas que suportem o conceito.
Exercícios
- Explique com suas palavras o que significa o Git ser a fonte da verdade no contexto do GitOps. Dê um exemplo de como uma mudança seria feita seguindo esse princípio.
- Descreva o processo de reconciliação em GitOps e por que ele é importante para a estabilidade do sistema.
- Compare brevemente ArgoCD e Flux, citando pelo menos duas diferenças entre eles.
- Liste três benefícios do GitOps e explique como cada um contribui para a melhoria do fluxo de trabalho em DevOps.
- Escreva um comando bash para instalar o ArgoCD em um cluster Kubernetes e explique o que ele faz.
kubectl create namespace argocd && kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml. Ele cria o namespace 'argocd' e aplica os manifests oficiais do ArgoCD, instalando todos os componentes necessários no cluster.