Autoscaling for Hetzner Cloud
Add autoscaling and self-healing to the Hetzner servers you already run. No Kubernetes. No migration. Your traffic never touches us.
- web-1healthy
- web-2healthy
- web-3healthy
- 02:59no actionall 3 nodes healthy; p95 CPU 31%
-
-
- 01Read-only 14-day Observe trial, enforced by Hetzner's own read-only token.
- 02No node receives traffic before it passes the load balancer health check.
- 03Your account, your bill, no per-server fee.
- 04Works with plain Docker or cloud-init, Coolify, and any webhook or CI.
- 05Replaces a dead node at 03:00 and adds one at 15:00, and explains both.
Four modes. Start read-only, move up when the report convinces you.
The mode decides whether Hetscale may call the Hetzner API. It never changes how a decision is made, or how it is explained.
[observe] web-2 unhealthy for 3 min [observe] would: create web-4 beside web-2 [observe] would cost: +1 node-hour, billed by Hetzner [observe] no API write; token is read-only
The trial mode. Hetscale holds a Hetzner token with read permission only, so it cannot create or delete anything even by mistake. After 14 days you get a report of every decision it would have taken.
[rehearsal] create web-4 from template [rehearsal] deploy via adapter → wait for LB health [rehearsal] web-4 active → drain → delete [rehearsal] passed; Live unlocked
A supervised dry run before Live: Hetscale creates one node from your template, deploys through your adapter, waits for the load balancer health check, drains it and deletes it while you watch. Success unlocks Live; failure produces a report and never leaves a node behind.
[propose] create web-5 (cx33) [propose] reason: CPU 78% > 75% for 3 min [propose] waiting for approval… [propose] approved → executing
Each action is proposed with its reason and waits for approval in the dashboard or by email link; unapproved proposals expire.
[live] web-2 unhealthy for 3 min [live] create web-4 beside web-2 [live] web-4 active → LB target [live] web-2 kept for diagnosis; 3 healthy
Hetscale creates, health-checks, attaches, drains and deletes nodes within the minimum and maximum you set. Moving back to a safer mode takes effect immediately.
When to pick something else
- Your workload keeps state on the node: databases, local queues, sticky sessions.
- You already run Kubernetes and its autoscaler does the job.
- Your servers are not on Hetzner Cloud.
- Load is flat. One server at a fixed size is cheaper than any control plane.
Kubernetes for many services or complex scheduling; Cloud 66 for greenfield with one vendor; Laravel Cloud for zero-ops on AWS; over-provisioning when traffic is stable.
Find your starting point: the onboarding cases