Skip to content
Latchkey

How to Scale Self-Hosted Runners to Zero When Idle

Scaling to zero means paying for compute only while jobs run, which is the biggest lever on self-hosted CI cost.

With ephemeral runners you can drop to zero capacity when the queue is empty and spin back up on the next job. In ARC set minRunners: 0. For VM-based fleets, set a short idle timeout so an unused instance terminates itself. The tradeoff is cold-start latency on the first job after idle.

Steps

  • For Kubernetes: set minRunners: 0 on the ARC scale set.
  • For VMs: give each idle runner a short idle timeout so it self-terminates.
  • Accept a small cold-start delay, or keep a tiny warm pool for latency-sensitive queues.

ARC scale-to-zero

values.yaml
minRunners: 0     # no warm pods when the queue is empty
maxRunners: 50    # burst ceiling when jobs arrive

Gotchas

  • Scale-to-zero saves the most money but adds cold-start latency to the first job after an idle period.
  • A managed self-healing runner service can absorb this scale-to-zero pattern for you; keep evaluation neutral and measure the cold-start impact on your queues.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →