Self-hosted. Open source.
Burst incredible. No hassle.
When a pod can’t be scheduled, Cloudburst adds the cheapest node across seven clouds. One brain (CloudBroker), one set of hands (the Autoscaler). No manual resizing. No lock-in.
- Cost-aware — cheapest VM that fits
- Seven providers — GCP, AWS, Azure, Hetzner, Scaleway, DigitalOcean, OVH
- Scale down — cordon, drain, delete when empty
A new node, with peace of mind.
Get a burst node in minutes. The cluster picks the cheapest cloud.
Unschedulable pod → Autoscaler asks CloudBroker for the cheapest instance → provisions that VM on the right cloud → bootstrap (Tailscale, kubeadm join) → node Ready. When the node’s empty long enough, it’s torn down. Billing stops.
- NodePool + NodeClass
- NodeClaim per burst node
- Tailscale + kubeadm join
- Scale-down when empty
Simple. Fast. Yours.
Simple
Define NodePool (policy, max price, scale-down TTL) and NodeClass (credentials, Tailscale). The system creates a NodeClaim and VM when a pod can’t be scheduled.
Fast & easy
CloudBroker + Tailscale + provider credentials. kubectl apply CRDs and samples. Watch the controller provision a VM and join the node.
Cost-aware
CloudBroker recommends the cheapest instance that fits. No manual picking. No lock-in. You run both; you own the data.
Our providers? Glad you asked.
Burst to the cheapest node across seven clouds.
Related articles
Four-part intro in the repo: problem and product, how it works, the interface (NodePool, NodeClass, NodeClaim), scope and run.
- 1. The problem and the product
- 2. How it works
- 3. The interface (NodePool, NodeClass, NodeClaim)
- 4. Scope, limits, and how to run it
Architecture
The controller watches for unschedulable pods, calls CloudBroker for the cheapest instance that fits, provisions that VM on the right cloud, and bootstraps it with Tailscale + kubeadm join. NodeClaim is created per burst node; scale-down when empty.
Examples
With CloudBroker and Tailscale running, apply CRDs and samples, then create a pod that can’t be scheduled:
kubectl apply -f config/crd/bases/
kubectl apply -f config/samples/nodeclass-scaleway.yaml
kubectl apply -f config/samples/nodepool-scaleway.yaml
kubectl apply -f config/samples/workload-scaleway.yaml
kubectl get nodeclaims
kubectl get nodes -l cloudburst.io/provider
Secrets (Tailscale auth key, provider API keys) go in Kubernetes secrets; reference them from the NodeClass. See the repo config/samples/ for per-provider manifests.
Got questions? Here’s the answers.
What is Cloudburst?
Cloudburst is a Kubernetes controller that adds burst nodes when pods can’t be scheduled. It asks CloudBroker for the cheapest VM that fits, provisions it on the right cloud (GCP, AWS, Azure, Hetzner, Scaleway, DigitalOcean, OVH), and bootstraps it with Tailscale + kubeadm join. When the node is empty long enough, it cordons, drains, and deletes the VM.
What do I need to run it?
CloudBroker (for recommendations), Tailscale (for networking), and provider API credentials. You define NodePool and NodeClass; the system creates NodeClaims and VMs. See the repo for config/samples/ and make kind-setup-and-deploy.
How much does it cost?
It’s open source. You run it. You pay for the VMs you burst to — and the controller picks the cheapest one that fits. No monthly fee to us.
Can I scale down?
Yes. When the node has been empty for ttlSecondsAfterEmpty (set in NodePool), the controller cordons, drains, and deletes the VM. Billing stops.
Get running in a few steps
Prerequisites: CloudBroker, Tailscale, provider credentials.
See the repo for full manifests and per-provider samples.