Kubernetes é o orquestrador padrão de produção em empresas, e também a fonte mais comum de complexidade não-justificada. Times rodam clusters caros pra projetos que caberiam em Railway. Outros, com necessidade real de K8s, tratam como "Docker Compose com mais YAML", não entendem control loops, declaration vs reality, scheduler decisions, resource pressure, ingress paths.
Este módulo é K8s real: arquitetura (control plane, kubelet, etcd), modelo declarativo, primitives (Pod, Deployment, StatefulSet, Service, Ingress, ConfigMap, Secret), scheduling, autoscaling, observability, helm/kustomize, operators. Você sai sabendo decidir se K8s, e, quando sim, operar com competência.
2. Teoria Hard
2.1 Quando você precisa de K8s
Sinais que K8s vale:
Múltiplos serviços (10+) com lifecycles diferentes.
Autoscaling baseado em métricas customizadas.
Multi-region ou multi-tenant heavy isolation.
Stateful workloads complexos (DBs, queues que você opera).
Time grande, organização poliglota.
Sinais que K8s é overkill:
1-3 serviços, tráfego médio.
Time pequeno (< 5 engs).
Cargas previsíveis.
Budget operacional limitado.
Alternativas razoáveis: Railway, Render, Fly.io, AWS App Runner, Cloud Run. Logística v2 vai pra K8s pra você aprender; em projeto real, decida com base em escala.
2.2 Arquitetura
Control plane:
API Server: única entrada, autentica, autoriza, valida.
etcd: store distribuído (Raft) com estado do cluster.
Scheduler: decide em qual node rodar Pods.
Controller Manager: roda controllers (Deployment, ReplicaSet, etc.).
Persistent Volume Claims por pod, persistem mesmo se Pod morrer.
Updates ordenadamente.
Em produção, prefer Operators específicos (Postgres Operator, Strimzi pra Kafka) que cuidam de detalhes (failover, replicação, backups). StatefulSet "puro" raramente é o que você quer pra DB.
2.7 DaemonSet
Garante 1 Pod em cada node (ou subconjunto). Usado pra:
Log agents (Fluentd, Vector).
Metrics agents (node-exporter, OTel collector).
Security tools (Falco).
2.8 Job e CronJob
Job: roda Pod até completion (1 ou N).
CronJob: schedule cron, dispara Jobs.
Pra batch processing, migrations, backups.
2.9 Service
Pods são efêmeros. Service dá IP virtual estável + DNS pra grupo de Pods (selecionados por label).
apiVersion: v1
kind: Service
metadata: { name: api }
spec:
selector: { app: api }
ports:
- port: 80
targetPort: 3000
type: ClusterIP
yaml
Tipos:
ClusterIP: IP interno (default). Acessível só dentro cluster.
Gateway API é a evolução do Ingress (mais expressivo, role-based). Em 2026, GA e crescente.
2.11 ConfigMap e Secret
ConfigMap: chave-valor não-sensível. Mounted como env vars ou files.
Secret: similar, base64-encoded (não criptografado por default!). Em prod, encryption at rest em etcd ou external secret store (AWS Secrets Manager, Vault, GCP Secret Manager via External Secrets Operator).
Pod monta via PVC. PV pode sobreviver Pod morte e ser remontado.
Modos de acesso: ReadWriteOnce (1 node), ReadWriteMany (vários nodes, só alguns drivers, EFS), ReadOnlyMany.
2.17 Helm e Kustomize
Configuration management:
Helm: package manager. Charts (templates Go) com values overrides. Versioning. Releases. Padrão de fato.
Kustomize: built-in kubectl, overlay-based. Menos abstração, sem Go templates. Convive com Helm em pipelines.
Em 2026 muitos projetos preferem Helm pra installs de terceiros (charts oficiais) e Kustomize pra config própria. Outros preferem Helm pra tudo.
Argo CD / Flux: GitOps, repo Git é fonte de verdade; controller syncs cluster com repo. Padrão moderno em times maduros.
2.18 Operators, pattern deep
CRD (Custom Resource Definition) + Controller. Permite estender K8s com objetos custom. É o pattern que torna K8s extensível além de "container orchestrator", vira plataforma onde stateful systems se autoadministram.
Anatomia de um operator:
CRD define schema do recurso novo (PostgresCluster, KafkaTopic).
Controller roda em pod no cluster, watches o API server pra mudanças nesses recursos.
Mito: "K8s escala automaticamente". Realidade: você ainda capacity-planeja, configura HPA/VPA com cuidado, paga por nodes idle.
Mito: "K8s previne lock-in cloud". Realidade: você troca lock-in cloud por lock-in K8s ecosystem (CRDs custom, Helm charts próprios). Migrar pra outro cluster é trabalho.
Mito: "Vale aprender K8s pra qualquer SRE em 2026". Realidade: pra app simples, Fly.io ou Railway ensina mais sobre app architecture e custa menos tempo.
2.19 Security
RBAC: Role + RoleBinding (ou ClusterRole). Princípio do menor privilégio.