Skip to main content

Estrutura e Automações

Estrutura do repositório

A estrutura do repositório segue o seguinte formato:

infra/
├── clusters/           # Um diretório por cluster Kubernetes
│   └── admin/          # Cluster admin (Terraform + Terragrunt)
├── modules/            # Módulos Terraform reutilizáveis
│   ├── vsphere-vm/     # Provisionamento de VM no vSphere
│   ├── k3s-cluster/    # Cluster k3s completo
│   ├── k3s-server/     # Nó servidor k3s
│   └── k3s-agent/      # Nó agente k3s
├── ansible/            # Playbooks de pós-configuração
│   ├── site.yml        # Configura clusters k8s (addons, discos, etc)
│   └── edge.yml        # Configura VMs de borda (nginx, firewall)
└── .gitlab-ci.yml      # Pipeline de CI

Cada diretório em clusters/ é um módulo Terragrunt que referencia os módulos reutilizáveis de modules/. O estado do terraform está sendo salvo no próprio GitLab. Desse modo, todos os comandos do terraform devem ser executados diretamente pelo GitLab CI ou utilizando o estado remoto do GitLab.


Nomenclatura de branches neste repositório

Prefixo Exemplo
feat/ feat/cluster-portal
upgrade/ upgrade/k3s-1.32, upgrade/terraform-1.10
fix/ fix/rede-admin, fix/disco-node1
resize/ resize/admin-node1-memoria, resize/portal-node2-cpu
docs/ docs/tutorial-novo-cluster

Pipeline de CI

O pipeline possui quatro stages executados em sequência:

validate ──► plan ──► apply ──► configure
Stage Quando roda O que faz
validate Todo push e todo MR Valida a sintaxe dos arquivos Terraform
plan Todo push e todo MR Mostra o que seria criado, alterado ou destruído
apply Somente na main, manual Aplica as mudanças de infraestrutura no vSphere
configure Somente na main, automático após apply Roda Ansible para configurar k8s e VMs de borda

O apply nunca roda sozinho — exige um clique manual de quem aprovou o MR. O configure roda automaticamente em seguida, se o apply for bem-sucedido.


Variáveis de CI necessárias

Configuradas no grupo dicom do GitLab (Settings → CI/CD → Variables):

Variável Descrição
VSPHERE_PASSWORD Senha do usuário de serviço no vSphere
ANSIBLE_SSH_PUBLIC_KEY Chave pública SSH injetada nas VMs pelo Terraform
ANSIBLE_SSH_PRIVATE_KEY Chave privada SSH usada pelo Ansible (em base64)
CERT_MANAGER_TSIG_SECRET Chave TSIG para desafios DNS01 do cert-manager (Obsoleto: está sendo movido para repositório stacks)