"O verdadeiro sentido da vida não está na partida nem na chegada e sim na trajetória."
A hybrid Kubernetes stack with on-premises infrastructure.
NAMESPACE NAME READY STATUS RESTARTS AGE
default webapp-5ddf8d7c6b-2j7lm 3/3 Running 0 5m
kube-system coredns-6d4b75cb6d-v6mrl 1/1 Running 0 15m
nfs-system nfs-provisioner-0 1/1 Running 0 8m
cert-manager cert-manager-5b6f7ccbf6-mzd 1/1 Running 0 6m
> ready to deploy…
cert-manager + Let's Encrypt
Sealed Secrets (GitOps-friendly)
NFS Server + dynamic provisioning
Arquitetura de alto nível do HomeLab
Diagrama renderizado no browser com Mermaid.
flowchart TB
%% ===== Entrada =====
U["Usuários / Navegadores"] -->|HTTP/HTTPS| LB["MetalLB\nLoadBalancer IP"]
%% ===== Ingress =====
subgraph ingress["NGINX Ingress Controller"]
IC1["Controller (HA)"]:::comp
end
LB --> IC1
%% ===== TLS / Segredos =====
subgraph tls["TLS & Segredos"]
CM["cert-manager"]:::comp --> LE["Let's Encrypt (ACME)"]:::ext
SS["Sealed Secrets Controller"]:::comp
end
IC1 -. "solicita/renova" .-> CM
SS -. "desencripta → Secret" .-> NS["Namespaces/Apps"]
%% ===== Plano de Controle (HA) =====
subgraph cp["Plano de Controle (4 nós)"]
direction LR
CP1["control-plane-1"]:::node
CP2["control-plane-2"]:::node
CP3["control-plane-3"]:::node
CP4["control-plane-4"]:::node
end
%% ===== Plano de Dados (10 workers) =====
subgraph wk["Plano de Dados (10 workers)"]
direction LR
W1["worker-1"]:::node
W2["worker-2"]:::node
W3["worker-3"]:::node
W4["worker-4"]:::node
W5["worker-5"]:::node
W6["worker-6"]:::node
W7["worker-7"]:::node
W8["worker-8"]:::node
W9["worker-9"]:::node
W10["worker-10"]:::node
end
%% ===== Rede / DNS =====
subgraph net["Rede e DNS"]
CAL["Calico (CNI)"]:::comp
DNS["CoreDNS"]:::comp
end
%% ===== Storage (NFS) =====
subgraph stg["Armazenamento"]
SC["StorageClass: nfs-storage"]:::comp --> NFS["NFS Subdir External Provisioner"]:::dep
end
%% ===== Aplicações =====
subgraph apps["Aplicações / Services"]
APP1["homelab (NGINX estático)"]:::app
SVC1["Service ClusterIP :80"]:::svc
end
%% ===== Ligações =====
IC1 -->|"/"| SVC1 --> APP1
apps --- stg
wk --- apps
wk --- net
cp --- net
IC1 --- net
%% ===== Estilos =====
classDef node fill:#1f2937,stroke:#64748b,color:#e5e7eb,rx:6,ry:6;
classDef comp fill:#0f172a,stroke:#475569,color:#e5e7eb,rx:6,ry:6;
classDef dep fill:#111827,stroke:#6b7280,color:#e5e7eb,rx:6,ry:6,stroke-dasharray:4 2;
classDef svc fill:#111827,stroke:#22d3ee,color:#e5e7eb,rx:6,ry:6;
classDef app fill:#111827,stroke:#34d399,color:#e5e7eb,rx:6,ry:6;
classDef ext fill:#111827,stroke:#a78bfa,color:#e5e7eb,rx:6,ry:6;