Como fazer GitOps para AKS com Flux CD em Infraestrutura como Código & DevOps
Explica-se como configurar um fluxo GitOps para um cluster AKS usando Flux CD: útil para automatizar deployments, ter histórico no Git e permitir rollback seguro em Infraestrutura como Código & DevOps.
Pré-requisitos
- Conta Azure com permissões para criar recursos.
- kubectl, az, flux CLI instalados localmente.
- Cluster AKS criado e contexto kubectl configurado.
- Repositório Git (GitHub, Azure Repos) onde guardar manifests YAML.
Passo 1: Preparar o repositório Git para GitOps
O repositório deve conter uma estrutura clara com manifests Kubernetes (deployments, services, kustomize ou Helm charts). Aqui usamos uma pasta "clusters/production" com Kustomize para gerir sobreposições.
# Estrutura mínima
clusters/
production/
kustomization.yaml
app-deployment.yaml
app-service.yaml
Exemplo simples de kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app-deployment.yaml
- app-service.yaml
Passo 2: Instalar o Flux CD no cluster AKS
Flux CD actua como operador que sincroniza o estado do cluster com o repositório Git. Instala-se com a CLI flux e cria-se um GitRepository e um Kustomization que apontam para o repositório.
# Autenticar no AKS
az aks get-credentials --resource-group rg-aks --name myAKS
# Instalar CRDs e controllers do Flux
flux install
Passo 3: Ligar o repositório Git ao Flux
Cria-se uma fonte Git no cluster que indica o repositório e o branch. O Flux vai ler essa fonte e aplicar os recursos descritos.
# Criar GitRepository (exemplo para GitHub)
flux create source git my-app-repo \
--url=https://github.com/MEU_USER/meu-repo.git \
--branch=main \
--interval=1m
# Criar Kustomization apontando para a pasta no repositório
flux create kustomization my-app \
--source=my-app-repo \
--path="./clusters/production" \
--prune=true \
--interval=5m
Passo 4: Gerir segredos e credenciais de forma segura
Não colocar segredos em texto plano no Git. Usa Flux com SOPS ou integração com Azure Key Vault para proteger segredos.
# Exemplo rápido com SOPS (local):
# 1. Gerar chave GPG, 2. encriptar ficheiro secret.yaml
sops --encrypt secret.yaml > secret.enc.yaml
# Commit de secret.enc.yaml no repositório
Passo 5: Automatizar CI para actualizar manifests
Configura um workflow (GitHub Actions, Azure Pipelines) que valida YAML e actualiza a imagem do Deployment (image tag) no repositório — o Flux deteta a mudança e faz o deploy automático.
# Exemplo mínimo de passo em GitHub Actions (yaml simplificado)
- name: Update image tag
run: |
yq e '.spec.template.spec.containers[0].image="myregistry/myapp:$GITHUB_SHA"' -i clusters/production/app-deployment.yaml
git add clusters/production/app-deployment.yaml && git commit -m "ci: update image" && git push
Passo 6: Monitorizar e fazer rollback
O Flux mantém historial das sincronizações. Para monitorizar usas os controllers e kubectl. O rollback simples é reverter no Git (reverter commit) e o Flux aplica a versão anterior.
# Verificar Kustomization status
flux get kustomizations
# Reverter a alteração no Git (exemplo)
git revert
git push
# O Flux deteta e aplica o rollback automaticamente
Verificar o resultado
Confirma que o Flux sincronizou e que os recursos estão no cluster:
# Verificar fontes e sincronização
flux get sources git
flux get kustomizations
# Verificar recursos Kubernetes
kubectl get deployments,svc -n default
kubectl describe deployment meu-app
Verifica também no repositório Git que os commits do CI aparecem e que não existem segredos em texto plano.
Conclusão
Com GitOps e Flux CD para AKS obténs deployments declarativos, auditáveis e rollbacks simples, integrando Infraestrutura como Código & DevOps. Próximos passos: integrar Azure Key Vault para segredos, automatizar testes de integração antes do push e usar policies para segurança. Dica: começa por ambientes de staging para validar o fluxo antes de production — que parte queres automatizar a seguir?