ADR-004 — Karmada deferido, Cilium ClusterMesh + ApplicationSet primeiro
Status
Vigente — 2026-05-01.
Contexto
CPPS opera 2 clusters K3s (Franca, SP). Pra workloads multi-site precisa de:
- Service discovery cross-cluster — pod em Franca chama service em SP por nome
- Deploy do mesmo manifest em N clusters
- Failover automático quando cluster cai (opcional)
- Scheduling baseado em capacidade/proximidade (opcional)
Opções consideradas:
- Karmada: control plane federado (próprio API server, etcd, scheduler) que orquestra clusters como um meta-Kubernetes
- Cilium ClusterMesh + ArgoCD ApplicationSet: ClusterMesh pra service discovery, ApplicationSet pra propagação de manifests
- Liqo: alternativa open-source mais leve que Karmada
- Status quo: deploy manual em cada cluster
Decisão
Começar com Cilium ClusterMesh + ArgoCD ApplicationSet. Karmada deferido.
Cobertura:
- Service discovery cross-cluster: ClusterMesh ✓
- Deploy multi-cluster: ApplicationSet ✓
- Failover via DNS/Cloudflare ✓
- Scheduling dinâmico: NÃO coberto — só com Karmada
Alternativas rejeitadas
- Karmada agora: introduz control plane crítico (próprio API/etcd/scheduler) que precisa ser HA. Pra time de 1-3 admins com 2 clusters, custo operacional não compensa cobertura adicional.
- Liqo: mais leve que Karmada mas menor adoção/comunidade; deferido junto com Karmada
- Manual em cada cluster: viola princípio declarativo do GitOps
Consequências
Positivas:
- Sem novo control plane crítico
- ApplicationSet é nativo do ArgoCD que já está em produção
- ClusterMesh integra com Cilium que será adotado de qualquer forma
- Curva de aprendizado menor
Negativas:
- Sem scheduling dinâmico cross-cluster (precisa decidir explicitamente onde rodar)
- Sem rebalanceamento automático de cargas
- Failover entre clusters depende de DNS/Cloudflare (não automático no nível K8s)
- Workloads que exigem placement por capacidade GPU em tempo real ficam limitados (compensa com Kueue)
Critério de revisão
Reabrir adoção de Karmada se aparecerem dois ou mais dos sinais abaixo:
- Escala: 5+ clusters em produção (CPPS + cloud + sites institucionais)
- Scheduling dinâmico: workload precisa migrar automaticamente baseado em capacidade GPU/CPU
- Failover SLA-driven: SLA por cluster que ApplicationSet/DNS não atendam
- Bursting cloud automático: GPU lotou em SP → workload vai pra AWS sem intervenção manual
- Time dedicado a multi-cluster: alguém com >20% do tempo focado em federação
Pra MVP, nenhum desses sinais existe — Karmada permanece deferido.