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
Cloudburst: Kubernetes pod triggers new node from cloud

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.

What you get
Burst
  • 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.

GCP AWS Azure Hetzner Scaleway DigitalOcean OVH

Related articles

Four-part intro in the repo: problem and product, how it works, the interface (NodePool, NodeClass, NodeClaim), scope and run.

Browse all articles →

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.

Flow: pending pod to CloudBroker to VM provision to node Ready
Full architecture doc →

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.

1 cp .env.example .env
2 make kind-setup-and-deploy
3 Apply NodeClass + NodePool

See the repo for full manifests and per-provider samples.

Burst incredible. One repo.

Your cluster. Your clouds. No lock-in.

View on GitHub