November 8, 2026
App Development

Kubernetes Cost Optimisation: Right-Sizing, Bin-Packing, and Spot

Kubernetes cost optimization means closing the gap between what a cluster is provisioned for and what it actually uses, primarily through right-sizing resource requests, bin-packing pods onto fewer nodes, and shifting interruptible workloads onto spot instances. Industry benchmark data shows average CPU utilization sitting near 8 to 10 percent of provisioned capacity, so the largest savings usually come before anyone even looks at a discount program.
Kubernetes Cost Optimization: Myth vs Reality
MythReality
Kubernetes bills scale mainly with traffic growthCast AI’s benchmark data across thousands of clusters shows the dominant cost driver is idle, over-requested CPU and memory, not traffic volume
Spot instances are too risky for production Kubernetes workloadsWith pod disruption budgets, multi-AZ spread, and diversified node provisioning, spot nodes routinely run stateless production workloads at 60-90 percent lower node cost
Setting generous CPU and memory requests is the safe defaultGenerous requests are the single largest source of waste; Cast AI’s 2026 report found average provisioned CPU utilization has fallen to about 8 percent
The cluster autoscaler alone handles bin-packingAutoscalers mainly add nodes for pending pods; separate consolidation tooling is what compacts already-running workloads and removes emptied nodes
Cloud billing dashboards already give full Kubernetes cost visibilityBilling dashboards show total node spend, not per-namespace or per-team allocation, which is why Kubernetes cost tooling remains a distinct FinOps discipline

Why Kubernetes Costs Behave Differently From Ordinary Cloud Costs

A standard cloud bill maps fairly directly to what a team provisioned: one VM, one bill line. Kubernetes breaks that mapping. A cluster’s node fleet is billed as a pool of compute, while the actual consumers of that pool, namely pods, request resources independently of what they use, get rescheduled across nodes constantly, and are rarely tied cleanly back to a cost center. This is why Kubernetes cost optimization is treated as its own discipline rather than a subset of general cloud cost management: the waste hides inside the scheduling layer, not on a line item anyone reviews monthly.

The scale of the gap is well documented. Cast AI’s cost benchmark research, drawn from thousands of clusters running across AWS, Google Cloud, and Azure, has tracked this consistently for several years running, and the direction has gotten worse, not better, even as tooling has matured.

The Data: How Much Kubernetes Capacity Actually Goes to Waste

Provisioned vs. Actual Kubernetes Resource Utilization
MetricReported figureSource
Average CPU utilization of provisioned capacityAbout 8 percent, down from 10 percent the prior yearCast AI, 2026 State of Kubernetes Optimization Report
Average memory utilization of provisioned capacityRoughly 20 to 23 percentCast AI, 2025-2026 Kubernetes Cost Benchmark research
CPU utilization on clusters with 50 or more CPUsOnly about 13 percent of provisioned CPU actually usedCast AI Kubernetes Cost Benchmark Report
Year-over-year change in CPU overprovisioningWidened from roughly 40 percent to roughly 69 percentCast AI, 2026 State of Kubernetes Optimization Report
Organizations running Kubernetes in production82 percent of container users, up from 66 percent in 2023CNCF, 2025 Annual Cloud Native Survey

Figure 1: The Three Layers of Kubernetes Resource Waste

A three-tier bar chart. The top bar represents “provisioned” node capacity at 100 percent, the amount actually paid for. The middle bar represents “requested” resources, the amount a pod’s spec declares it needs, typically 40-70 percent of provisioned capacity once accounting for headroom and safety margins added by developers. The bottom bar represents “actually used” resources, measured at real-time CPU and memory consumption, which per Cast AI’s benchmark data lands around 8-10 percent of the original provisioned figure for CPU. The gap between each layer is where cost optimization work happens: right-sizing closes the requested-to-used gap, and bin-packing closes the provisioned-to-requested gap.

Right-Sizing: Closing the Requests-vs-Usage Gap

Vertical Pod Autoscaler

The Vertical Pod Autoscaler, documented directly in the Kubernetes project, watches a pod’s actual CPU and memory consumption over time and recommends, or in some modes automatically applies, adjusted resource requests. Running VPA in recommendation-only mode first is the safer rollout path: it surfaces the gap between what a deployment requests and what it consumes without touching anything, giving a platform team a concrete, per-workload right-sizing backlog instead of a blanket policy.

Horizontal Pod Autoscaler and When Not to Combine Them

The Horizontal Pod Autoscaler scales the number of pod replicas up or down based on observed metrics, most commonly CPU or memory utilization, or custom application metrics. HPA and VPA can conflict when both are configured against the same metric on the same workload, since one tries to add replicas while the other tries to resize them, producing oscillation rather than stability. The Kubernetes documentation explicitly flags this interaction; the practical fix is scaling horizontally on request-driven custom metrics while letting VPA own CPU and memory sizing, or restricting VPA to recommendation-only mode on any workload that also has an HPA attached.

Bin-Packing: Paying for Nodes You Actually Use

How the Default Scheduler Leaves Capacity Stranded

The default Kubernetes scheduler places new pods onto nodes with available capacity, but it has no ongoing incentive to consolidate already-running pods onto fewer nodes once earlier scheduling decisions leave fragments of unused capacity scattered across a fleet. A cluster can easily end up running twelve nodes at 25 percent utilization each when the same workload would fit comfortably on four nodes at 75 percent utilization, and the difference is pure wasted node-hours.

Consolidation Tooling

This is the specific problem that bin-packing and consolidation tools solve. Karpenter, AWS’s open-source cluster autoscaling project, continuously evaluates whether existing workloads could be repacked onto fewer or cheaper nodes and actively drains and terminates nodes once they are no longer needed, rather than just adding capacity for pending pods. The Kubernetes descheduler project takes a complementary approach, evicting pods that violate scheduling best practices, such as being poorly spread across zones or stuck on an underutilized node, so the scheduler gets another chance to place them efficiently. Neither replaces right-sizing: a cluster full of over-requested pods will still bin-pack poorly, because bin-packing operates on whatever the requests say, not on real usage.

Spot and Preemptible Instances: The Discount Layer

Spot and Preemptible Instance Discounts by Cloud Provider
ProviderProduct nameMaximum discount vs. on-demandSource
AWSEC2 Spot InstancesUp to 90 percentAWS, official EC2 Spot Instances pricing page
Google CloudSpot VMsUp to 91 percentGoogle Cloud, Compute Engine Spot VM documentation
AzureSpot Virtual MachinesUp to 90 percentMicrosoft Azure, Spot Virtual Machines pricing page

Spot and preemptible capacity is spare cloud inventory sold at a steep discount, reclaimable by the provider on short notice, typically with a two-minute warning on AWS and Azure. This makes it a poor fit for stateful, single-replica workloads but an excellent fit for anything that is stateless, horizontally replicated, and tolerant of a pod being rescheduled elsewhere within seconds. Batch jobs, CI runners, and horizontally scaled stateless API replicas behind a load balancer are the textbook use cases, provided PodDisruptionBudgets are set so the cluster never evicts too many replicas of the same service at once, and workloads are spread across multiple instance types and availability zones so a single spot-market shortage does not take down an entire deployment simultaneously. For workloads with heavier, less interruption-tolerant compute needs, such as GPU-backed training jobs, the same rent-versus-own trade-off shows up again at a larger scale, covered in this site’s TCO comparison of renting versus owning GPU capacity.

Figure 2: Cumulative Effect of Stacking Cost Levers

A waterfall chart starting at a baseline monthly Kubernetes node bill of 100 percent. Right-sizing resource requests to match observed usage, informed by VPA recommendations, typically removes a large first slice of unnecessary reserved headroom. Bin-packing and node consolidation remove a further slice by eliminating stranded capacity spread across too many nodes. Moving eligible stateless and batch workloads to spot or preemptible instances removes the largest remaining slice, since the discount applies to whatever compute footprint is left after the first two steps. The order matters: applying spot discounts before right-sizing simply buys a steep discount on capacity that was already wasted.

Putting It Together: An Order of Operations That Compounds Savings

Teams that treat these three levers as a menu to pick from tend to under-perform teams that treat them as a sequence. Right-sizing first, so requests reflect real usage. Bin-packing and consolidation second, so the now-accurate requests are packed efficiently onto the fewest nodes. Spot and preemptible capacity last, applied to whatever compute footprint remains once the first two steps have removed the waste that a discount would otherwise just be masking. Skipping straight to spot instances on an over-provisioned cluster still saves money, but it saves a percentage of a number that should have been much smaller to begin with. This same discipline of sequencing the highest-leverage fix first, rather than the most visible one, mirrors the workload-tiering approach covered in this site’s look at cloud repatriation and its real cost trade-offs.

Common Mistakes in Kubernetes Cost Optimization

  • Setting resource limits far above requests “just in case,” which defeats bin-packing since the scheduler reasons primarily about requests, not limits.
  • Running VPA in auto-apply mode on a workload that also has an HPA configured against the same metric, causing oscillating restarts instead of stable sizing.
  • Moving every workload to spot capacity indiscriminately, including stateful, single-replica services that cannot tolerate sudden termination.
  • Optimizing compute aggressively while ignoring cross-zone and cross-region data transfer, which can erase node savings entirely on chatty, distributed workloads.
  • Treating a one-time right-sizing pass as finished, when workload resource needs drift within weeks as code and traffic patterns change.

In Practice

Platform teams that sustain Kubernetes savings over time, rather than seeing costs creep back up within a quarter, tend to build the three levers into automated, continuous processes instead of one-off projects. Right-sizing runs on a schedule, with VPA recommendations reviewed and rolled out to lower-risk namespaces first, rather than a single manual pass across the whole cluster. Bin-packing tools run continuously rather than being triggered by hand, since workload footprints change every deploy. Spot adoption is expanded incrementally, starting with the most interruption-tolerant batch and CI workloads before extending to production-facing stateless services once disruption budgets and multi-AZ spread are proven reliable. And cost data is attributed back to namespaces and teams so that whoever owns a workload sees its actual resource waste directly, closing the same visibility gap that shows up in general cloud spend management, discussed further in this site’s piece on architecting around egress fees and data gravity.

When Kubernetes Cost Tooling Is Worth Adopting Versus Doing It Manually

Manual right-sizing and manual node consolidation are realistic for a single cluster with a small, stable set of workloads, using nothing more than the Kubernetes Metrics Server and VPA in recommendation mode. Past roughly a few dozen workloads or several clusters, the constant drift in what each workload actually needs outpaces what a team can track by hand, which is when dedicated Kubernetes cost and automation platforms earn their subscription cost. Teams evaluating whether to run this infrastructure themselves at all, rather than on a hyperscaler, face a related but distinct calculation covered in this site’s comparison of bare-metal and neocloud alternatives to hyperscalers, and teams unsure whether they need a cluster at all should start with the more basic question addressed in this site’s guide to honest Kubernetes alternatives for smaller teams.

Glossary

Resource request
The amount of CPU or memory a container declares it needs, used by the scheduler to decide which node can host it.
Resource limit
The maximum CPU or memory a container is allowed to use, enforced at the node level, distinct from what the scheduler reasons about when placing pods.
Vertical Pod Autoscaler (VPA)
A Kubernetes component that recommends or automatically applies adjusted resource requests based on a workload’s observed usage history.
Horizontal Pod Autoscaler (HPA)
A Kubernetes component that scales the number of pod replicas up or down based on observed metrics such as CPU utilization or custom signals.
Bin-packing
Scheduling workloads onto the fewest possible nodes to minimize stranded, idle capacity spread across a fleet.
Node consolidation
The process of repacking running workloads onto fewer nodes and terminating emptied nodes, performed continuously by tools like Karpenter.
Spot instance
Spare cloud compute capacity sold at a steep discount, reclaimable by the provider with short notice, suited to stateless and interruption-tolerant workloads.
PodDisruptionBudget
A Kubernetes policy that limits how many replicas of a workload can be voluntarily evicted at once, protecting availability during node consolidation or spot reclamation.

Key Takeaways

  • Kubernetes cost waste hides in the scheduling layer, not on a bill line item, which is why it needs its own optimization discipline separate from general cloud cost management.
  • Cast AI’s benchmark research puts average provisioned CPU utilization at roughly 8 to 10 percent, with the overprovisioning gap widening year over year rather than shrinking.
  • Right-sizing with the Vertical Pod Autoscaler should generally run before bin-packing, since packing efficiency is meaningless if requests do not reflect real usage.
  • Running VPA and HPA against the same metric on one workload commonly causes scaling oscillation; splitting responsibility between the two avoids it.
  • Bin-packing and node consolidation tools like Karpenter reclaim stranded capacity that the default scheduler and cluster autoscaler leave behind.
  • Spot and preemptible instances offer discounts of up to 90 to 91 percent across AWS, Google Cloud, and Azure, but should be applied after right-sizing and bin-packing, not before.
  • Sustainable savings come from running all three levers as continuous, automated processes with per-team cost visibility, not a one-time optimization project.

FAQs

What is the biggest driver of wasted Kubernetes spend?

Over-requested CPU and memory is consistently the largest driver, not traffic growth or node pricing. Cast AI’s benchmark data shows average provisioned CPU utilization sitting around 8 to 10 percent, meaning the overwhelming majority of paid-for compute capacity across a typical cluster sits idle at any given moment.

Should I use the Vertical Pod Autoscaler or the Horizontal Pod Autoscaler first?

Start with VPA in recommendation-only mode to understand real resource usage before changing anything. Once requests are right-sized, add HPA for workloads with variable traffic, ideally scaling on a custom request-driven metric rather than the same CPU metric VPA is managing, to avoid the two autoscalers conflicting.

Are spot instances safe for production Kubernetes workloads?

Yes, for stateless, horizontally replicated workloads with PodDisruptionBudgets configured and pods spread across multiple instance types and availability zones. Stateful, single-replica services, or anything intolerant of a sudden two-minute termination notice, should stay on standard on-demand or reserved nodes instead.

Does the Kubernetes cluster autoscaler already handle bin-packing?

Not fully. The standard cluster autoscaler mainly adds nodes to accommodate pending pods and removes nodes once they are completely empty. Dedicated consolidation tools like Karpenter go further, actively repacking already-running workloads onto fewer nodes to reclaim capacity stranded across a fragmented fleet.

How much can right-sizing alone realistically save?

Savings vary by workload, but given that Cast AI’s data shows average CPU utilization near 8 to 10 percent of what is provisioned, closing even half that gap through accurate requests typically produces the single largest cost reduction available before touching discount programs like spot capacity at all.

Why do Kubernetes costs need separate tooling from regular cloud cost dashboards?

Standard cloud billing shows total node spend, not how that spend breaks down by namespace, team, or workload inside a shared cluster. Kubernetes cost tools attribute usage at the pod level, which is necessary for chargeback, prioritizing right-sizing work, and holding individual teams accountable for their actual resource consumption.

What is the risk of setting resource limits much higher than requests?

The Kubernetes scheduler places pods based primarily on requests, so a large gap between requests and limits does not affect scheduling directly, but it does allow a single noisy pod to consume far more of a node’s actual capacity than planned, indirectly undermining bin-packing efficiency for every other pod sharing that node.

Is Kubernetes cost optimization a one-time project or an ongoing process?

It is ongoing. Workload resource needs drift with every code deploy and every traffic pattern change, so a single right-sizing pass degrades within weeks. Teams that sustain savings run VPA recommendations, bin-packing, and spot allocation as continuous, automated processes rather than periodic manual audits.

References

    Maya Ranganathan
    Maya earned a B.S. in Computer Science from IIT Madras and an M.S. in HCI from Georgia Tech, where her research explored voice-first accessibility for multilingual users. She began as a front-end engineer at a health-tech startup, rolling out WCAG-compliant components and building rapid prototypes for patient portals. That hands-on work with real users shaped her approach: evidence over ego, and design choices backed by research. Over eight years she grew into product strategy, leading cross-functional sprints and translating user studies into roadmap bets. As a writer, Maya focuses on UX for AI features, accessibility as a competitive advantage, and the messy realities of personalization at scale. She mentors early-career designers via nonprofit fellowships, runs community office hours on inclusive design, and speaks at meetups about measurable UX outcomes. Off the clock, she’s a weekend baker experimenting with regional breads, a classical-music devotee, and a city cyclist mapping new coffee routes with a point-and-shoot camera

      Leave a Reply

      Your email address will not be published. Required fields are marked *