Published April 26, 2026 · Guide
Kubernetes dev cluster cost cutting: 2026 guide
Kubernetes cost optimization in 2026 is a more mature game than it was three years ago - Karpenter is everywhere, KEDA covers most event sources, OpenCost has matured into table stakes - but dev-cluster waste is unchanged. Dev and staging still run 24/7, engineers still touch them roughly 24% of the time, and the recoverable spend is still measured in five to seven figures per organization per year. This guide is the 2026-current playbook.
Where dev-cluster spend leaks in 2026
The leak categories haven't changed - only the proportion has, as more teams have adopted at least some of the tools below.
- 24/7 uptime on workloads used 24% of the week. Still the largest single bucket. A 168-hour week with 40 active hours leaves 128 hours of wasted compute. Even with a 0.65 vacation/PTO factor applied, that's roughly 76% of the week recoverable.
- Over-provisioned resource requests. Default CPU/memory requests copied from a long-forgotten template, rarely tuned. Karpenter packs nodes around requested resources - if your requests are 4× actual usage, your nodes are 4× larger than they need to be.
- HPA min replicas held at 2 or 3 in dev. A pattern copied from production "for HA" that has no business existing in a single-replica dev environment.
- Long-lived preview environments. PR-per-environment setups where the env outlives the PR by weeks. Nobody owns the tear-down.
- Sidecar overhead. Service mesh proxies, log shippers, tracing agents - each one adding 100–500 MiB and a fraction of a vCPU to every pod. Multiplied across hundreds of pods, this is real money.
- On-demand pricing on dev nodes. Spot/preemptible cuts compute cost by roughly 70%, and dev clusters can tolerate the eviction risk that spot brings. Many teams still run dev on on-demand by default.
Inventory your waste
Before optimizing, measure. The KuberNap scanner is a read-only Job that runs in your cluster, computes a per-namespace and per-deployment idle score, and prints an estimated monthly waste figure based on observed CPU and memory requests. It uses four permissions only: get and list on namespaces, deployments, pods, and nodes.
# Run the read-only scanner helm install kubernap-scanner kubernap/kubernap-scanner \ --namespace kubernap-system \ --create-namespace # View the scanner output kubectl logs -n kubernap-system job/kubernap-scanner
For comparison against your existing FinOps tooling, OpenCost and Kubecost both publish per-namespace cost data. The scanner adds the idleness dimension that pure cost-attribution tools don't compute - not "what does this namespace cost?" but "what would this namespace cost if you only paid for the hours it was actually used?"
Quick wins (this sprint)
These are mechanical and high-leverage. Implement in this order.
- Install KuberNap auto-sleep on dev/staging. See the scale-to-zero setup guide. Default idle threshold of 75 catches the obvious cases; tune downward only after a week of observation.
- Drop HPA min replicas to 1 in dev. The "min 2" default copied from production has no business in a single-developer dev environment. This is a 2-line YAML change per namespace.
- Set TTLs on preview environments. Add a controller (
kube-janitoror equivalent) that deletes namespaces withjanitor/ttl: "7d"annotations after 7 days. This catches the "PR closed but env forgotten" case. - Move dev nodes to spot/preemptible. Karpenter and Cluster Autoscaler both support spot pools. Dev can tolerate the eviction risk; production cannot. ~70% compute discount on the nodes themselves.
- Audit and remove orphaned PVCs. PVCs from deleted Deployments hang around invisibly costing money. Tools like Kor surface these in a single command.
Mid-term wins (next quarter)
These take real engineering work but compound the quick wins.
- Right-size resource requests with VPA. Run VPA in recommendation mode for two weeks, then apply recommendations namespace by namespace. Typical cluster recovers 20–40% of compute from this alone, even after auto-sleep.
- Adopt Karpenter consolidation. Karpenter's
consolidation: WhenUnderutilizedactively repacks workloads onto fewer nodes. Stacks cleanly with KuberNap: KuberNap removes pods, Karpenter removes the now-redundant nodes. - Split sidecars off the per-pod path. Service mesh ambient mode (Istio Ambient, Linkerd 2.14+) moves the mesh proxy off every pod and into a per-node component. Same observability, fewer per-pod containers.
- Consolidate dev clusters. Most orgs run more dev clusters than they need ("us-east-1-dev," "us-west-2-dev," etc.). Each cluster has its own control plane overhead. Consolidating to one or two large dev clusters with namespace isolation is usually a net win.
- Move dev environments to ephemeral. The endgame: dev environments created on PR open, destroyed on merge or close. No long-lived staging. Combined with KuberNap on the remaining shared clusters, this approaches the theoretical minimum spend.
When this stops being your problem
Dev-cluster cost stops being a problem when dev environments are genuinely ephemeral. PR opens, environment provisions in 60 seconds. PR merges or closes, environment tears down. No long-lived staging. No persistent dev cluster. No idle hours, by definition.
Most organizations are 3–5 years from this state. The rebuild costs - making every service deployable from scratch in a fresh environment, making CI fast enough to provision an env per PR, making every developer comfortable with disposable environments - are real and not always justified. KuberNap is the practical bridge: get the savings now, defer the rebuild.
Measuring the impact
Dev-cluster cost reduction is one of the easiest engineering wins to measure end-to-end, and one of the easiest to fail to measure because the data lives in three places (cloud bill, K8s metrics, engineering activity).
- Take a baseline before any change. Capture two weeks of cluster cost from your cloud provider's billing dashboard, broken down by cluster. Note the baseline monthly burn per cluster - that's your denominator.
- Compare like-for-like. The first month after install will see savings inflated by the backlog of obviously-idle workloads getting slept. Steady-state savings show up in months 2 and 3. Compare a full 4-week period before to a full 4-week period after to get the real number.
- Don't just measure spend - measure friction. The failure mode of overly-aggressive auto-sleep is a developer getting paged because their environment is stuck waking up. Track wake latency in your monitoring stack, and watch for outliers above 30 seconds. If they happen, tune the idle threshold up.
- Report the savings in the engineering newsletter. Cost optimization that nobody hears about gets undone in the next stack rewrite. A monthly "we saved $X this month with KuberNap" line in the eng update creates organizational memory that outlasts individual contributors.
Related reading
- Why your dev cluster wastes 75% of compute - the math, with original data per provider.
- How to scale idle Kubernetes namespaces to zero - KuberNap setup walkthrough.
- KuberNap vs kube-downscaler - schedules vs activity-based scaling.
FAQ
- Has Kubernetes cost optimization changed in 2026?
- The toolchain has matured (Karpenter is now common, KEDA covers more event sources, OpenCost / Kubecost are widely adopted) but the underlying problem is unchanged: dev and staging clusters still run 24/7, and engineers still touch them roughly 24% of the time. The waste model from 2020 still applies in 2026.
- What's the single highest-leverage cost cut today?
- Auto-sleep idle dev/staging namespaces. It targets the 75% of hours during which dev workloads are not in use, requires no application changes, and stacks with every other tool (HPA, VPA, Karpenter, Cluster Autoscaler) without conflict. Most teams recover ~70% of dev-cluster spend within a week of installing it.
- Should I use spot / preemptible nodes for dev clusters?
- Yes - they cut compute cost by roughly 70% on the nodes themselves. Pair them with auto-sleep: spot reduces the cost of the hours the cluster is up; auto-sleep reduces the hours it's up at all. Spot alone leaves 24/7 spend; auto-sleep alone leaves on-demand pricing. Use both.
- When does dev-cluster cost optimization stop being your problem?
- When dev environments become genuinely ephemeral - created on PR open, destroyed on PR merge or close, with no long-lived staging at all. Until then, idle dev environments are real and worth managing. KuberNap is the bridge: get the savings now, then revisit ephemeral environments as a 2027 project.
- Do I need to rewrite my apps to take advantage of this?
- No. Auto-sleep is workload-agnostic - it scales replicas to zero and restores the prior count. Your application doesn't know it was asleep; it just observes a fresh start when it wakes. The only thing applications need is reasonable startup time so wake doesn't feel slow.