Princípios de GitOps e estrutura do repositório
Objetivos desta aula
- Entender os princípios de GitOps
- Estruturar repositório por ambiente
- Separar aplicação de manifests
GitOps se apoia em quatro princípios: estado desejado declarativo, versionado e imutável em Git, aplicado automaticamente por agentes, com reconciliação contínua. A consequência prática é enorme: quem pode fazer merge pode implantar, e o histórico do Git é o histórico do que rodou em produção.
Separe o repositório da aplicação do repositório de manifests. A aplicação gera imagem versionada; o repositório GitOps registra qual versão deve rodar em cada ambiente. Isso permite políticas de revisão diferentes e evita que uma mudança de código altere produção sem passo explícito.
Estruture por ambiente com base comum e overlays: base/ com o essencial, overlays/dev e overlays/prod com réplicas, recursos e host. Kustomize é ideal para isso; Helm com values por ambiente também funciona e o ArgoCD suporta ambos.
1. Os quatro princípios
- Declarativo: o sistema é descrito como dados
- Versionado e imutável: o Git guarda cada estado
- Puxado automaticamente: um agente no cluster busca as mudanças
- Reconciliado continuamente: diferenças são detectadas e corrigidas
2. Push vs pull
No modelo push, o pipeline tem credencial de admin do cluster — alvo valioso para ataques. No pull, só o agente dentro do cluster aplica mudanças; o CI apenas escreve no Git.
3. Repositório de app vs de configuração
O código fica em cloudshop-app; o estado desejado dos ambientes em cloudshop-gitops. Separar evita loops de CI e dá permissões diferentes: muitos podem mexer no código, poucos aprovam produção.
4. Estrutura típica
Pastas apps/ (cada serviço com base e overlays por ambiente), clusters/ (o que cada cluster instala) e platform/ (ingress, cert-manager, monitoramento). Prefira pastas por ambiente a branches por ambiente — merges entre branches geram divergência escondida.
5. O Git vira trilha de auditoria
Quem mudou, quando, por quê e quem aprovou: tudo está no histórico e nos pull requests. Rollback é um git revert.
Na prática
Estrutura do cloudshop-gitops
text
cloudshop-gitops/
base/
kustomization.yaml
deployment-api.yaml
service-api.yaml
ingress.yaml
overlays/
staging/
kustomization.yaml # replicas: 1, host: staging.cloudshop.dev
image-tag.yaml
producao/
kustomization.yaml # replicas: 3, recursos maiores
image-tag.yaml
apps/
staging.yaml # Application do ArgoCD
producao.yamlOverlay de produção com Kustomize
yaml
# overlays/producao/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: cloudshop
resources: [../../base]
replicas:
- name: cloudshop-api
count: 3
images:
- name: ghcr.io/sua-org/cloudshop/api
newTag: v1.2.0
patches:
- target: { kind: Deployment, name: cloudshop-api }
patch: |
- op: replace
path: /spec/template/spec/containers/0/resources/limits/memory
value: 512MiNota de segurança: Nada de senha nesses arquivos: o repositório é lido por várias pessoas e pelo agente do cluster.
Estrutura do repositório cloudshop-gitops
text
cloudshop-gitops/
├── apps/
│ └── api/
│ ├── base/ # Deployment, Service, HPA comuns
│ └── overlays/
│ ├── staging/ # 2 réplicas, domínio de staging
│ └── prod/ # 6 réplicas, recursos maiores
├── platform/
│ ├── ingress-nginx/
│ └── cert-manager/
└── clusters/
├── staging/apps.yaml # App of Apps do staging
└── prod/apps.yamlPor que isso importa
GitOps é o padrão dominante para entrega em Kubernetes e aparece cada vez mais nas descrições de vaga.
Erro comum
Misturar código e manifests no mesmo repositório e perder controle sobre o que vai a produção.
Dica de produção
Proteja o repositório GitOps com revisão obrigatória: ele é o botão de deploy da empresa.
Alerta de segurança
Quem tem escrita no repositório GitOps tem, na prática, acesso de deploy ao cluster.
Pergunta de entrevista
Por que separar repositório de aplicação e de manifests?
Glossário
- overlay
- Camada Kustomize que ajusta a base para um ambiente específico.
- estado desejado
- Descrição declarativa do que deve existir, versionada em Git.
- GitOps
- Operar sistemas tendo o Git como fonte da verdade, com reconciliação automática.
- Modelo pull
- Agente no cluster busca e aplica as mudanças, sem credencial externa de admin.
- Overlay
- Camada de ajustes por ambiente sobre uma base comum.
Conexão com o CloudShop
Criar a estrutura base/overlays do cloudshop-gitops.
Quiz da aula
1. Em GitOps, como se faz um deploy?
2. Qual a principal vantagem de segurança do GitOps pull?
3. Como se faz rollback em GitOps?
Minhas anotações
Salvo automaticamente neste navegador.