Visão geral da arquitetura¶
A infra do homelab é dividida em quatro camadas, cada uma com sua própria ferramenta e seu próprio repositório (ou conjunto de repositórios):
| Camada | Ferramenta | Onde vive |
|---|---|---|
| Provisionamento de infraestrutura | Terraform / Terragrunt | infra-as-code/ |
| Bootstrap do cluster | Ansible + talosctl |
infra-as-code/homelab-bootsrap-k3s |
| Entrega de workloads (GitOps) | ArgoCD + Helm/Kustomize | platform-engineering/gitops.* |
| Aplicações | Docker + CI próprio de cada repo | teupadel.com/, sara/ |
O compute é híbrido: o cluster Kubernetes roda em hardware próprio (mini PC + Raspberry Pis, com um worker adicional como VM no Proxmox para GPU), enquanto os componentes que fazem mais sentido gerenciados ficam na AWS — registry de imagens (ECR), backend de state (S3+DynamoDB) e armazenamento de segredos (SSM Parameter Store). O Proxmox também hospeda cargas fora do cluster, como o runner self-hosted do GitHub Actions.
As três perguntas que a arquitetura responde¶
"Onde o cluster roda e como ele existe?" → Cluster Kubernetes (Talos)
"Como um request da internet chega a um Pod?" → Rede & Ingress
"De onde vêm os segredos que uma app usa em runtime, e como o CI se autentica sem credenciais fixas?" → Secrets & Segurança
Relação entre as camadas¶
flowchart LR
tf["Terragrunt<br/>(iac.homelab-live-infra)"] -- "provisiona" --> aws["Recursos AWS<br/>ECR · SSM · IAM/OIDC"]
ansible["Ansible + talosctl<br/>(homelab-bootsrap-k3s)"] -- "bootstrap" --> talos["Cluster Talos"]
ansible -- "instala" --> argocd["ArgoCD"]
argocd -- "descobre e sincroniza" --> gitopsrepos["repos gitops.*"]
gitopsrepos -- "aplica no cluster" --> talos
aws -. "OIDC / ExternalSecret" .-> talos
Terragrunt e Ansible só rodam sob gatilho manual ou workflow_dispatch — não há
reconciliação contínua nessas duas camadas. A partir do ArgoCD em diante, tudo é
reconciliado continuamente: qualquer divergência entre o que está no Git e o que
está rodando no cluster é revertida automaticamente (selfHeal: true).