Pular para conteúdo

Arquitetura

Esta seção é referência, no sentido de Diátaxis: fato sobre este cluster específico, organizado pra consulta, com o porquê de cada decisão ao lado, não uma lição guiada nem um passo a passo. O desenho é como as peças descritas em Aprender se encaixam aqui, e por que cada decisão foi tomada. Se você quer só executar o bootstrap, vá direto pra Operação; volte aqui quando precisar entender o porquê por trás de um passo.

O objetivo deste repositório é ser a fonte da verdade de como a VM é configurada. Nada de "esqueci como configurei isso": todo estado que importa está declarado em código, versionado, e reaplicável do zero. Duas propriedades tornam isso possível, ambas explicadas em detalhe em Ansible:

Declarativo: você descreve o estado desejado (esta versão do k3s, essas portas abertas, esses Applications no Argo CD), não os passos pra chegar lá. Quem interpreta a diferença entre o que está declarado e o que existe de verdade, e decide o que fazer, é a ferramenta (Ansible, Argo CD), não você.

Idempotente: rodar duas vezes produz o mesmo resultado que rodar uma vez. Isso é o que permite rodar tudo de novo, periodicamente, sem supervisão (o ansible-pull a cada ciclo, o Argo CD continuamente) sem medo de quebrar algo que já está funcionando.

flowchart LR
    Estado[estado desejado declarado em código] --> Ferramenta[Ansible / Argo CD compara com o real]
    Ferramenta --> Decide{diferença?}
    Decide -->|sim| Converge[converge pro declarado]
    Decide -->|não| NoOp[no-op, idempotente]

O fluxo de ponta a ponta

flowchart TD
    subgraph oper[Sua máquina]
        A[ansible-playbook bootstrap.yml] -->|push via SSH, só na 1ª vez| B
    end

    subgraph node[node]
        B[ansible-core + jq + argocd CLI] --> C[git clone infrastructure]
        C --> D[ansible-pull, a cada ciclo]
        D --> E[role k3s]
        D --> F[role vault-repo]
        D --> G[role argocd-bootstrap]
        D --> H[role firewalld]
        D --> I[role self-pull-timer]
        F -->|clona| J[infrastructure-vault]
        J -->|segredos cifrados| G
        G -->|helm install/upgrade| K[Argo CD]
        G -->|kubectl apply| L[root.yaml]
    end

    subgraph argo[Argo CD, dentro do cluster]
        L --> M[AppProject ladesa]
        L --> N[AppProject ladesa-satellites]
        M --> O[Applications foundation-*]
        N --> P[Applications app-* dos repositórios satélite]
        O -->|sync| Q[cluster k3s]
        P -->|sync| Q
    end

Duas metades bem diferentes: a esquerda (Ansible) cuida só do que precisa existir antes de qualquer coisa em Kubernetes existir, o próprio k3s, o firewall, os segredos de bootstrap, e o release do Argo CD. A partir do momento em que o root.yaml é aplicado, a direita (Argo CD) assume: tudo em argocd/applications é sincronizado continuamente, sem depender do Ansible rodar de novo. A fronteira entre as duas metades está detalhada em argocd-bootstrap.

flowchart LR
    subgraph Ansible["Metade Ansible"]
        K3s[k3s] --- FW[firewall] --- Segredos[segredos de bootstrap] --- Release[release do Argo CD]
    end
    subgraph ArgoCDMetade["Metade Argo CD"]
        Root[root.yaml aplicado] --> Continuo[sincronização contínua de argocd/applications]
    end
    Release -->|fronteira: root.yaml| Root

Por onde ir a partir daqui

Se você precisa entender Vá pra
Onde cada coisa mora no repositório Estrutura
O que cada role do Ansible faz e por quê Roles do Ansible
Como e por que os segredos ficam fora deste repositório Segredos
O que já roda no cluster hoje, trazido como está Foundation
Por que nada sincroniza automaticamente ainda Gate de drift zero

Pra executar o bootstrap de verdade, veja Operação.