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

  1. 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.
  2. ✓ Resposta: No GitOps, o Git é a única fonte de verdade porque todo o estado desejado da infraestrutura e das aplicações é descrito em arquivos versionados no repositório. Nenhuma alteração é feita diretamente no ambiente; em vez disso, você altera o código no Git e faz um push. Por exemplo, para atualizar a versão de uma imagem Docker em um deployment Kubernetes, você edita o arquivo YAML no repositório, faz um commit e push. A ferramenta GitOps detecta a mudança e aplica automaticamente no cluster.
  3. Descreva o processo de reconciliação em GitOps e por que ele é importante para a estabilidade do sistema.
  4. ✓ Resposta: A reconciliação é o processo contínuo de comparar o estado atual do ambiente com o estado desejado no Git e aplicar as correções para alinhá-los. Ela é importante porque garante que o sistema se mantenha no estado desejado mesmo se houver alterações manuais ou falhas, prevenindo drift e aumentando a confiabilidade. Por exemplo, se um pod for deletado acidentalmente, a ferramenta GitOps o recriará automaticamente.
  5. Compare brevemente ArgoCD e Flux, citando pelo menos duas diferenças entre eles.
  6. ✓ Resposta: ArgoCD e Flux são ferramentas GitOps para Kubernetes, mas diferem em arquitetura e funcionalidades. ArgoCD usa uma abordagem de pull, com uma interface web amigável e suporte a múltiplos clusters. Flux é mais orientado a eventos, com controladores que reagem a mudanças no repositório, e tem forte integração com Helm e Kustomize. Além disso, ArgoCD tende a ser mais simples para começar, enquanto Flux é mais extensível e modular.
  7. Liste três benefícios do GitOps e explique como cada um contribui para a melhoria do fluxo de trabalho em DevOps.
  8. ✓ Resposta: Três benefícios são: 1) Segurança: o acesso ao cluster é restrito, e as mudanças passam por revisão de código, reduzindo riscos. 2) Rastreabilidade: cada alteração está ligada a um commit, facilitando auditorias e debug. 3) Automação: a reconciliação automática reduz trabalho manual e permite auto-reparação, aumentando a confiabilidade e acelerando a entrega.
  9. Escreva um comando bash para instalar o ArgoCD em um cluster Kubernetes e explique o que ele faz.
  10. ✓ Resposta: O comando é:
    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.

Referências