Skip to content

Roadmap CPPS — eixo temporal

📌 Antes de tudo — leia Contexto institucional. Toda decisão deste roadmap é ancorada na missão CPPS + finalidade do Lab Multiusuário IPPRI + compromissos FAPESP. Decisão que não conecta com isso é otimização local.

Foco específico desta seção

O roadmap é o eixo temporal da documentação. Diferente das outras dimensões:

DimensãoFocoRoadmap se diferencia porque
CamadasArquitetura técnicaRoadmap não documenta tecnologia — diz quando ela entra
TransversaisRequisitos horizontaisRoadmap não define política — diz em que sequência implementar
Frentes estratégicasEntregas concretasRoadmap não descreve o quê entregar — diz quando entregar
OperaçõesManutenção rotineiraRoadmap olha futuro, operações olha agora

O roadmap responde: em que sequência tudo evolui? Inclui caminho crítico (próximos PRs), 10 fases ordenadas por dependência, 9 ADRs vigentes, e decisões deferidas com critério de revisão.

Tracking tático (issues, kanban): colabhd/projects/1.

Cada item declara seu estado real:

  • Validado em produção
  • 📦 Declarado em IaC (Pulumi/Ansible) mas não validado/aplicado
  • 🚧 Em andamento
  • Desejado (não iniciado)
  • 🔮 Futuro (fora do MVP)
  • 🚫 Deferido (decisão explícita de não fazer agora)

Decisões arquiteturais consolidadas

TópicoDecisãoADR
CNI padrãoCilium em VM (suportado upstream)ADR-002
CNI exceção Tier 3flannel default em LXC privileged (apenas hosts sem iGPU)ADR-002
GPU placement Tier 3LXC com display físico via GT 710 PCIe x1 nativoADR-005
Cluster GPUSeparado do principal por site (isolamento blast radius)ADR-005, ADR-009
Assimetria GPU SP/FrancaSP em LXC+flannel (Tier 3); Franca em VM+Cilium (Tier 2A)Tiers de hardware
GitOps2 ArgoCDs independentes (1 por site)ADR-001
Multi-cluster federationCilium ClusterMesh + ArgoCD ApplicationSet (Karmada deferido)ADR-004
Storage primárioLINSTOR + DRBD (Ceph deferido)ADR-003
Secrets management MVPSOPS + age (ESO + Vault no futuro)ADR-006
Failover DNSCloudflare Tunnel pra hostnames elegíveisADR-008
Security stackVyOS rules + Cloudflare proxy + fail2ban (CrowdSec/Wazuh deferidos)ADR-007

Stack consolidada

┌─ Capacidades transversais (atravessam todas as camadas) ───────────────┐
│ ◆ Secrets: SOPS+age ◆ CI/CD IaC: GitHub Actions │
│ ◆ IAM: Authentik+LDAP ◆ Supply chain: Harbor+Trivy (futuro) │
│ ◆ Certs: cert-manager+CF ◆ Observability: OTel+OpenObserve │
└─────────────────────────────────────────────────────────────────────────┘
┌─ Camadas verticais ─────────────────────────────────────────────────────┐
│ 11 │ Workloads (apps, GPU/HPC, datalake) │
│ 10 │ Self-service / IDP — Backstage opcional (deferido) │
│ 9 │ Multi-cluster — Cilium ClusterMesh + ArgoCD ApplicationSet │
│ 8 │ GitOps — ArgoCD por site (+ Argo Rollouts futuro) │
│ 7 │ Service mesh + observabilidade — Cilium mesh + Hubble │
│ 6 │ K8s networking — Cilium CNI (em VMs) + flannel (Tier 3 LXC) │
│ 5 │ K8s runtime — K3s │
│ 4 │ Ingress — Traefik por site + cert-manager + Cloudflare DNS │
│ 3 │ Edge networking — VyOS + UnespNet + WireGuard cross-site │
│ 2 │ Backup — PBS por site + sync cross-site (+ Velero futuro) │
│ 1 │ Storage — LINSTOR + DRBD intra-site │
│ 0 │ Virtualização — Proxmox + Pulumi (IaC) + Ansible (config) │
└─────────────────────────────────────────────────────────────────────────┘

Caminho crítico — próximos PRs

A ordem dos próximos commits/PRs. Itens marcados ⚡ são MVP de plataforma — bloqueiam todo o resto.

#PRBlocoCustoPré-req
1 ⚡Secrets management (SOPS + age)Transversal~1 sem
2 ⚡cert-manager + Cloudflare DNS-01 IssuerTransversal + Camada 4~1 semPR 1
3 ⚡CI/CD de IaC (pulumi preview, ansible --check em PR)Transversal~1 semPR 1
4Corrigir linstor_interface vazio em pve-ippri-34Camada 1~1 dia
5GT 710 PCIe x1 nativo em hosts Tier 3 (pve-ippri-31, 33)Hardware~R$700-800 + 1 dia
6PBS Franca + PBS SP (paralelo)Camada 2~2 semPR 1, 3
7PBS cross-site sync (pull bidirecional)Camada 2~1 semPR 6
8Renumeração Franca (refactor inventory + Pulumi + VyOS)Camada 3~2 semPR 1, 3
9WireGuard SP↔Franca via VyOSCamada 3~3 diasPR 8
10K3s SP “principal” greenfield em VM com CiliumCamadas 5-7~2 semPR 1-3, 8
11ArgoCD SP em VM (paralelo a 10)Camada 8~1 semPR 1-3
12LINSTOR place_count: 3 no SP SSD (após PR 4)Camada 1~3 diasPR 4
13POC Cloudflare Tunnel em argocd.colabh.orgCamada 4~3 diasPR 11

Total estimado MVP (PRs 1-13): ~12-16 semanas, custo de hardware ~R$700-800 (GT 710).

Estado por fase

Fase 0 — Plataforma operacional MVP (capacidades transversais) 🔥 prioridade

Objetivo: secrets, certs e CI/CD funcionando antes de qualquer expansão. Sem isso, mudança em prod é roleta russa e auditoria FAPESP fica frágil.

ItemEstadoNotas
Secrets management (SOPS + age)ADR-006 — escolher e implementar
cert-manager + Cloudflare DNS-01 IssuerDNS-01, rotação de token via SOPS
CI/CD de IaCGitHub Actions: pulumi preview, ansible-lint, ansible --check em PR
Branch protection em main1+ revisor pra mudanças, sem push direto
Inventário de domínios e secretsDoc em /operacoes/dominios/ (já existe parcial)
Runbook de rollback por componenteDoc por camada

Definition of done: PR tocando Pulumi/Ansible/manifests roda preview/check automático e exige aprovação antes de merge. Secret novo entra em git criptografado, descriptografado em runtime.


Fase 1 — Renumeração unificada Franca

Objetivo: ranges IP estáveis em ambos os sites antes de configurar Cilium ClusterMesh, ArgoCD cross-site, Cloudflare DNS.

ItemEstadoNotas
SP — 192.168.10.0/23 LAN, 10.10.20.0/24 LINSTOR, 192.168.12.0/24 LABPR #8 mergeado
Franca — definir rangeDecisão pendente — sugestão: 192.168.20.0/23, LINSTOR 10.10.30.0/24
Franca — renumerar (inventory + Pulumi + VyOS)Pré-req: range definido
WireGuard SP↔Franca via VyOSPré-req: ranges definidos em ambos

Definition of done: ambos os sites com ranges não-conflitantes, conectividade SP↔Franca via WireGuard documentada e testada.


Fase 2 — Storage e backup hardening (camadas 1-2)

Objetivo: infra de dados sólida — perda de hardware não vira perda de serviço, perda lógica é recuperável.

ItemEstadoNotas
Cluster Proxmox Franca/SPEm produção
Upgrade PVE 9.x🚧Alguns nodes feitos
LINSTOR Franca + SP SSDEm produção
LINSTOR SP NVMe pve-ippri-34 interface vaziaBloqueador: corrigir antes de escalar
LINSTOR place_count: 3 no SP SSDApós correção do pve-ippri-34
DRBD auto-evict tuning + quorum policyDecisão recente, aplicar
Witness/tie-breaker em terceiro siteCloud VM ou outro campus pra anti-split-brain
PBS FrancaVM dedicada
PBS SPVM dedicada
PBS cross-site syncPull bidirecional via WireGuard
Restore real testadoValidar VM e arquivo, documentar tempo

Definition of done:

  • Restore real de VM completa em < 30 min documentado
  • Restore granular de arquivo testado
  • Falha intencional de 1 node não interrompe workloads protegidos
  • LINSTOR pve-ippri-34 operacional na rede dedicada

Fase 3 — Hardware Tier 3 + edge networking (camadas 3-4)

Objetivo: resolver display físico nos hosts Tier 3 (pré-req pra Cilium em VM em todo lugar) + ingress consolidado com TLS automatizado.

ItemEstadoNotas
GT 710 PCIe x1 em pve-ippri-31ASUS GT710-2-SL-CSM ou GT710-SL-1GD5-BRK (~R$350) — libera A5000 pra passthrough
GT 710 PCIe x1 em pve-ippri-33Mesmo modelo (~R$350) — libera A5000 pra passthrough
VyOS Franca + SP em produção
Backup VyOS 3-camadasRunbook
WireGuard SP↔FrancaApós Fase 1
IP público fixo via UnespNetDecisão: usar pra quê?
VRRP HA pra VyOSEliminar SPOF
Traefik SP em IP único192.168.10.6
Traefik Franca consolidado🚧Status real?
cert-manager + Issuer CloudflareFase 0 pré-req
Failover DNS via Cloudflare TunnelDecidido em ADR-008: 2 túneis (1/site) por hostname elegível
Inventário de hostnamesDocumentado em /operacoes/dominios/
POC Tunnel: argocd.colabh.orgÚnico hostname elegível pra failover real hoje
DNS secundário fora de CloudflarePlano B se Cloudflare cair globalmente
Runbook “Cloudflare offline”Fallback manual com A records diretos

Definition of done: apps acessíveis em ambos os sites com TLS válido emitido automaticamente; hosts Tier 3 com display físico funcionando + A5000 livres pra passthrough.


Fase 4 — Eliminar SPOFs declarados

Objetivo: consertar SPOFs que aparecem hoje no Pulumi e impedem qualquer DoD de “zero downtime”.

ItemEstadoNotas
traefik-sp ha: True declarado mas Pulumi não cria HA📦Implementar HA real ou remover flag
vyos-sp e traefik-sp no mesmo pve-ippri-11📦Distribuir em hosts diferentes
ArgoCD Franca single-replica🚧Avaliar HA
Authentik (futuro) — single-instance é SPOFPensar HA antes de subir

Definition of done: nenhum serviço de plataforma (VyOS, Traefik, ArgoCD, LINSTOR controller) depende de um único host físico.


Fase 5 — K3s + Cilium em VM (camadas 5-6)

Objetivo: K3s SP “principal” greenfield em VM com Cilium suportado upstream.

Estratégia: greenfield em hosts Tier 1 (pve-ippri-11/12) primeiro. Workers Tier 2A/2B/3 entram depois.

ItemEstadoNotas
K3s SP em VM com --flannel-backend=noneEm hosts Tier 1 (pve-ippri-11/12) — Greenfield
Cilium 1.16+ em VMCaminho documentado upstream, sem POC complexo
Hubble (observabilidade L7)Integrado com OpenObserve
Validação SP (app de teste)Tutor staging
Workers Tier 2A com NVIDIA passthroughpve-ippri-34 — após GT 710 instalada
Workers Tier 2B (sem GPU workload)pve-ippri-32 em VM
Migrar Franca pra Cilium em VMEm janela após validação SP
Cilium ClusterMesh SP↔Franca (clusters principais)Cross-cluster service discovery
gpu-sp-01 mantido como K3s standalone em LXCADR-005 — Tier 3 sem Cilium
gpu-sp-02 em pve-ippri-33 (futuro)Mesma arquitetura LXC + flannel se demanda crescer
Cluster GPU Franca em VM (Tier 2A)🔮Hosts labri-31/32/33 — aqui Cilium + GPU passthrough funcionam juntos

Definition of done: service em SP resolve service em Franca via DNS interno; Hubble mostra fluxo cross-site; cluster GPU SP em LXC operacional separado, gerenciado por ArgoCD multi-cluster.


Fase 6 — GitOps maturado (camada 8)

Objetivo: 2 ArgoCDs independentes com repo structure clara. Pode rodar em paralelo às Fases 3-5.

ItemEstadoNotas
ArgoCD FrancaApps em produção
ArgoCD SP em VMNão depende de Cilium — pode subir antes/em paralelo
Repo structure apps/franca/, apps/sp/, apps/multi/Refactor
ApplicationSet pra apps multi-siteSubstitui Karmada pra casos simples
ArgoCD multi-cluster: registrar gpu-sp-01Cluster GPU SP gerenciado pelo ArgoCD principal

Definition of done: push em apps/multi/<app> deploya nos 2 sites simultaneamente; cada ArgoCD reconcilia local independentemente; cluster GPU registrado e gerenciável via ArgoCD.


Fase 7 — IAM + Observabilidade unificadas (transversais)

Objetivo: SSO único, audit trail FAPESP-ready, alertas funcionando.

ItemEstadoNotas
OpenObserve setup🚧Validar uso real
OTel Collector universal (Proxmox + K3s)Via Ansible
Métricas LINSTOR/DRBD/PBSExporters dedicados
Hubble integrado (Cilium)Após Fase 5
Authentik (IdP) HAOIDC/SAML/OAuth2 — single-tenant institucional NÃO é multi-grupo cooperativo do lab IPPRI
Authentik LDAP Outpost (SSH/sudo)SSSD nos servidores
K8s + Proxmox RBAC com bindings AuthentikGranularidade por grupo de pesquisa
OpenCost com attribution por grupoPré-req pra prestação de contas FAPESP
Alert routing + 5 alertas básicosNode down, LINSTOR degraded, DRBD desync, ArgoCD out-of-sync, cert expirando
Blackbox probes externosSynthetic checks
SLOs definidos por serviço crítico

Definition of done: falha real produz alerta antes do usuário reclamar; admin diagnostica incidente sem SSH em nó; FAPESP recebe relatório de uso por grupo de pesquisa.


Fase 8 — Multi-cluster federation (opcional — avaliar pós-Fase 5-7)

Decisão pendente: Karmada vale o custo? Recomendação: começar com Cilium ClusterMesh + ApplicationSet (ADR-004). Adicionar Karmada só se aparecer caso real.

ItemEstadoNotas
Cilium ClusterMesh ativoFase 5
ApplicationSet pra apps multi-siteFase 6
MultiKueue pra batch GPU cross-sitePré-req pra Plataforma GPU Franca completa
Liqo (alternativa Karmada leve)🟡Avaliar se rebalanceamento dinâmico virar requisito
Karmada🚫 DeferidoCritério: 5+ clusters ou scheduling dinâmico (ADR-004)

Fase 9 — Plataforma GPU + workloads acadêmicos (camadas 9-11)

Objetivo: plataforma GPU em produção (interativa + batch) + apps acadêmicos centrais robustos.

ItemEstadoNotas
gpu-sp-01 (LXC + K3s + A5000)Em produção, sem Cilium
HAMi ou NVIDIA Device Plugin time-slicingApós cluster GPU Franca em VM
TensorZero (model proxy)
vLLM / SGLang serving
Volcano ou Kueue (batch single-cluster)
MultiKueue cross-siteDistribui jobs batch entre SP e Franca
Tutor / Open edXEm produção (Franca), docs
OpenObserve🚧Setup feito
OnlyOffice🚧Workstations Ryzen
OCR em lote (Docling/Marker)Acervos, teses, microfilmes
Datalake (MinIO + Iceberg)Plano em Plataforma de Dados
GraphRAG sobre corpus

Definition of done: pesquisador submete job (interativo via vLLM ou batch via Kueue) e vê resultado; FAPESP recebe relatório de uso GPU por projeto.


Fase 10 — Expansão híbrida 🔮

Objetivo: cloud bursting + integração HPC + novas unidades do Colaboratório.

ItemEstadoNotas
Cluster K8s AWS/Azure managed🔮EKS/AKS
VPN cross-cloud🔮WireGuard ou cloud-native
ClusterMesh expandido pra cloud🔮Bursting sob demanda
Integração Grid Unesp (SLURM API)🔮Jobs batch externos
Novas unidades do Colaboratório de Humanidades Digitais🔮Replicar stack 0-7
IDP completo (Backstage + Crossplane)🔮Quando self-service estruturado virar demanda

Tiers de hardware — resumo

Detalhe completo em /operacoes/tiers-de-hardware/.

TierHostsCNIEstado
Tier 1 (server rack)pve-ippri-11/12Cilium em VMPronto pra Fase 5
Tier 2A (iGPU + NVIDIA workload)pve-ippri-34, pve-labri-31/32/33Cilium em VM + passthroughPronto pra Fase 5/9
Tier 2B (GPU básica display-only)pve-ippri-32, pve-labri-21/22Cilium em VM (sem GPU workload)Pronto pra Fase 5
Tier 3 (NVIDIA disputada display+workload)pve-ippri-31, 33flannel em LXC + GT 710 pra displayPré-req: GT 710 (Fase 3 PR 5)

Decisões deferidas (ADRs)

Componentes “modernos e elegantes” que não entram no MVP mas valem reavaliar com critérios objetivos:

ComponenteCritério de ativaçãoAlternativa MVP
Karmada5+ clusters ou scheduling dinâmico realCilium ClusterMesh + ApplicationSet
CrossplaneDemanda real de self-service multi-cloudPulumi/Ansible + ArgoCD direto
Backstage5+ devs querendo self-service estruturadoArgoCD UI + repo organizado
KubeVelaAdoção formal de OAM platform engineeringHelm + Kustomize + ApplicationSet
KubeVirtSelf-service de VMs efêmerasPulumi via PR (VM nativa Proxmox)
Octelium / TeleportAudit trail compliance formal além de HubbleSSH keys via Authentik LDAP
Headscale>5 nodes externos ou pesquisadores remotosWireGuard direto via VyOS
CrowdSec>100 IPs/mês atacando ou serviço público alto valorVyOS rules + Cloudflare proxy + fail2ban
WazuhCompliance acadêmico formal exigir audit granularOpenObserve + audit logs K8s
Suricata IDS/IPSAtaque sofisticado detectadoDefesa em profundidade básica

Cada um deve virar ADR formal antes de adoção.

Hardware refresh — guia futuro

Quando hardware Tier 3 for substituído (próximas compras):

✅ Preferir❌ Evitar
Ryzen 7000+ X3D (iGPU RDNA 2)Ryzen 3000/5000 sem G (sem iGPU + workstation chassi)
Ryzen G-series (5600G, 5700G, 7700G)Hardware sem iGPU como workstation
Server rack class (Tier 1 nato, sem display local)Workstation com NVIDIA disputada display+workload
Mobo com IPMI/BMC integrado (Asrock Rack, Supermicro)

Quando Tier 3 for substituído por Tier 2A ou Tier 1, padronização Cilium em VM completa e GT 710 vira hardware obsoleto.

Documentos detalhados