Full System Diagram
End-to-end flow from pending pod to new node.
graph TB
POD["Pending Pod (unschedulable)"]
subgraph Controllers ["Cloudburst Controllers"]
DD["Demand Detector (watches pods)"]
NPC["NodePool Controller (scale-up / scale-down)"]
NCC["NodeClaim Controller (VM lifecycle)"]
end
CB["CloudBroker (brokers providers, cost recommendation)"]
subgraph Providers ["Cloud Providers (brokered)"]
GCP["GCP"]
SCW["Scaleway"]
HTZ["Hetzner"]
DO["DigitalOcean"]
OVH["OVH"]
AWS["AWS"]
AZ["Azure"]
end
BS["Bootstrap (cloud-init + kubeadm join over Tailscale)"]
NODE["New K8s Node (Ready)"]
POD -->|"detected"| DD
DD -->|"enqueue"| NPC
NPC -->|"POST /api/recommendations"| CB
CB -->|"cost recommendation"| NPC
NPC -->|"create NodeClaim"| NCC
NCC -->|"provision VM"| Providers
Providers --> BS
BS -->|"node joins cluster"| NODE
NODE -->|"pod scheduled"| POD
NPC -->|"scale-down: delete NodeClaim"| NCC
NCC -->|"cordon + drain + delete VM"| Providers