FINOPS & KUBERNETES COST

The Hidden Cost of Idle Kubernetes Clusters

How one enterprise saved roughly £4,500 a month by simply implementing auto-sleep policies on its non-production clusters.

LeanGreenCloud 6 min read Cloud Cost Engineering
Idle Kubernetes clusters — a honeycomb of nodes, mostly asleep

~10%

Avg. CPU Utilisation

99.94%

Clusters Over-Provisioned

50–70%

Typical Non-Prod Saving

Most cloud overspend isn't dramatic. There's no runaway autoscaler, no leaked credential spinning up GPU fleets. It's quieter than that: a fleet of development, staging, QA and demo clusters humming along at 3 a.m. on a Sunday, fully provisioned, fully billed, and doing precisely nothing. This is the hidden cost of idle Kubernetes — and for most organisations it's one of the largest, least-governed line items on the cloud invoice.

The good news for anyone holding a cloud P&L: it's also one of the easiest to fix. Below is the evidence, the economics, and a worked example of how a mid-sized engineering organisation cut roughly £4,500 a month from its non-production bill by doing one unglamorous thing — putting clusters to sleep when nobody's using them.

Why idle clusters cost so much — and stay hidden

Kubernetes was built to keep applications available, not to keep accountants happy. Engineers set resource requests — hard reservations the scheduler honours whether or not the workload uses them — and they set them conservatively, because an outage triggers a post-mortem while waste shows up anonymised on a monthly bill. The rational individual choice is to over-provision and stay safe. Multiplied across hundreds of services and several environments, those safe choices become a structural billing problem disguised as a configuration one.

The benchmarks are stark. Analysis of thousands of production clusters across AWS, Google Cloud and Azure found average CPU utilisation sitting at roughly 10% and memory near 23% — meaning the majority of provisioned, paid-for capacity never does useful work. Independent industry estimates put idle or unallocated spend at 35–50% of total cluster cost, and BCG has estimated that up to 30% of all cloud spend is wasted on over-provisioned or idle resources.

Idle cost has two distinct faces, and conflating them is why the problem rarely gets fixed:

Roll both into a single "Kubernetes idle" figure and you get a metric nobody owns — and a metric nobody owns is a metric nobody fixes.

Where the non-production Kubernetes bill goes: used compute, over-provisioned, idle nodes
A representative split of non-production cluster spend. Only a minority funds work that's actually running.

The single highest-ROI fix: auto-sleep for non-production

Production needs to be available around the clock. Development, staging, QA, UAT and demo environments almost never do. They typically sit idle 12–16 hours of every working day and the entire weekend — yet most run 24/7 because no single team owns non-prod infrastructure, so nobody is incentivised to switch it off.

Do the arithmetic on a normal working week. If an environment is genuinely needed only ~50 hours a week (10 hours × 5 days), it's idle for the other ~118 hours — about 70% of the time. Sleeping it overnight and at weekends therefore removes the majority of its cost. Published benchmarks consistently land in the same range: scheduled scale-down of non-prod node pools delivers 50–70% cost reduction on those environments, with no application code changes.

How auto-sleep actually works

"Scaling deployments to zero" is necessary but not sufficient. If you only scale pods down, the StatefulSets, DaemonSets and — crucially — the worker nodes keep running, and the cloud provider keeps billing for the VMs. A real auto-sleep policy has to reach the node layer:

Going further: provision non-production on-demand

Auto-sleep is the pragmatic first move because it works on the estate you already have. But it accepts a hidden premise: that those non-production environments should exist as standing infrastructure at all. Sleeping is still paying — for orphaned volumes, load balancers, control-plane fees and the operational drag of clusters that linger for weeks. The more advanced posture flips the default from always-on, sometimes-asleep to nothing-on, created-on-demand.

In this model an environment doesn't sit waiting to be used. It is created the moment it's needed — when a pull request opens, a QA run is triggered, or an engineer requests a sandbox — and destroyed automatically when the work is done or after a short idle timeout. Each environment becomes ephemeral, single-purpose and traceable to the change that spawned it. The most mature version is the preview environment: every PR gets its own short-lived stack, exercised by automated tests and reviewers, then torn down on merge.

How this works with Infrastructure-as-Code

On-demand provisioning is only safe and repeatable if the entire environment is codified. This is where Infrastructure-as-Code (IaC) stops being a convenience and becomes the load-bearing dependency. The cluster, node pools, networking, namespaces, application manifests and seed data all have to be reproducible from a definition in version control — because you are no longer maintaining a long-lived environment, you are rebuilding it from scratch, on every request, identically.

Done well, IaC turns "an environment" from a pet you feed indefinitely into cattle you spin up and cull on demand — and it gives you a clean audit trail of exactly what existed, when, and why.

How it changes the maths and the ROI

Auto-sleep removes the off-hours portion of the bill. On-demand provisioning attacks a different variable entirely: it removes the idle-but-awake hours that auto-sleep can't, because the environment simply doesn't exist when no one is using it. The shift is from a fixed cost you discount to a variable cost you only incur on consumption.

Consider the same composite organisation. Under auto-sleep, a non-prod estate runs roughly 50 hours a week and you've cut ~55% of the bill. Under true on-demand provisioning, an environment exists only for the hours work is actively happening inside it — often a few hours per PR or test run, not a fixed 10-hour weekday window. In practice teams report this pushing total non-prod reduction from the 50–70% range of auto-sleep towards 80–90%, because the long tail of "environment that's technically up but nobody touched today" disappears.

The ROI calculation changes shape, too. Auto-sleep's return is a straightforward percentage off a known bill. On-demand's return has three components worth modelling separately:

The honest framing for a CTO: auto-sleep is high return for near-zero investment, so do it now. On-demand provisioning is higher return for a real, front-loaded investment — and it pays back not only in compute but in faster, more reliable testing and a non-prod estate that can't quietly sprawl. Sequence them. Capture the easy 55% with auto-sleep this quarter, then reinvest part of the saving into the IaC and GitOps foundation that takes you to 80–90%.

A worked example: ~£4,500 a month, recovered

Consider a fairly typical mid-sized engineering organisation — a composite drawn from the published benchmarks rather than a single named customer. It runs a non-production Kubernetes estate (dev, staging, QA and a handful of demo environments) costing roughly £100,000 a year, or about £8,300 a month, all of it billed 24/7.

The platform team introduces a single policy: all non-prod namespaces sleep between 19:00 and 07:00 on weekdays and all weekend, with Karpenter consolidating the freed nodes and an ingress-based wake for after-hours use. Production is untouched.

Those environments are now switched off for roughly 55–60% of each month. Applying a conservative ~55% reduction to the off-hours portion of the bill yields a saving of around £4,500–£4,600 every month — close to £55,000 a year — from one configuration change, with no new headcount and no impact on production reliability.

Monthly non-production spend before and after an auto-sleep policy
Illustrative monthly non-production spend before and after an auto-sleep policy, modelled on published 50–70% savings benchmarks.

A note on honesty: these figures are modelled from the public benchmarks cited below, not a single audited customer engagement — your mileage depends on how much of your estate is non-prod and how aggressively it's scheduled. The direction of travel, however, is well documented and consistent across vendors and independent reports.

What this means for a CTO

Three things make auto-sleep unusually attractive as a first move in a cost programme:

There's a sustainability dividend, too: capacity you switch off is energy you don't draw. For organisations with carbon-reporting obligations, off-hours scheduling is one of the cleaner stories to tell — lower bill and lower footprint from the same action.

A pragmatic 30-day plan

The bottom line: idle Kubernetes is the cloud's most expensive open secret. The clusters that quietly bill you at 3 a.m. on a Sunday are doing no work — and the fix is to let them sleep. Few infrastructure decisions offer this much saving for this little risk.

Sources & Further Reading

All statistics in this post are drawn from the publicly available sources below.

~10% CPU utilisation; 99.94% of clusters over-provisioned

kodekloud.com/blog/kubernetes-best-practices-2025

CAST AI report — large-scale infrastructure waste analysis

cloudnativenow.com — CAST AI Kubernetes waste report

Idle/unallocated spend 35–50% of cluster cost

cloudoptimo.com — Kubernetes cost optimization roadmap

BCG: up to 30% of cloud spend wasted; 13% CPU used

sedai.io — Kubernetes capacity planning guide

50–70% non-prod saving from off-hours shutdown

scaleops.com — Kubernetes cost optimization

60–70% reduction from scheduled non-prod node pool scaling

oneuptime.com — Scheduled node pool scaling

~55% monthly saving from sleeping staging (Snorlax)

github.com/moonbeam-nyc/snorlax

Environment-sleeping economics; why scaling pods alone misses node cost

qovery.com — Automate environment sleeping

Two faces of K8s waste: node idle vs workload over-provisioning

finout.io — The two faces of Kubernetes waste

Cloud wastage benchmarks incl. UK estimates (25–30%)

datastackhub.com — Cloud wastage statistics

Figures labelled "illustrative" are modelled from the cited ranges for explanatory purposes and do not represent a single audited customer.

Wondering what your idle clusters are costing you?

Our FinOps and GreenOps experts can audit your estate and show you exactly where the savings are.