July 7, 2026

Kubernetes Cost Optimization in 2026: Where the Waste Actually Comes From

July 7, 2026
CTO at Plus8Soft
Pavel Popov
CTO
K8s logo on grey background

The Real Kubernetes Cost Problem Is Not What Most Teams Think

Most Kubernetes overspend is structural waste on clusters that are otherwise healthy. Autoscalers configured, services running, dashboards green, bill climbing. The waste compounds quietly because the default resource model rewards overprovisioning and provides no feedback loop connecting pod requests to cloud spend.

The 2026 State of Kubernetes Optimization Report from Cast AI, measured across tens of thousands of production clusters, found that average CPU utilization sits at 8% and memory at 20%, both figures down from the previous year. Datadog’s State of Cloud Costs report puts it more starkly: 83% of container costs go to idle resources, split between overprovisioned cluster infrastructure (54%) and oversized workload requests (29%).

Resource requests are hard reservations. Engineers set them for worst-case scenarios and rarely revisit them. The cluster autoscaler provisions nodes to match those inflated requests. Most teams have monitoring dashboards showing exactly this; they lack the operational cadence to act on them continuously.

This guide covers where Kubernetes costs come from, which fixes return the most, how autoscaling and Spot instances work in 2026, and when the problem is architectural rather than a missing tool. The order matters: teams that buy optimization tooling before fixing request sizing are paying to observe waste, not eliminate it.

Where Kubernetes Costs Actually Come From

Kubernetes cluster spend breaks down into four layers. Which one dominates determines where optimization effort pays off.

Compute, typically 60 to 80% of total cluster spend, comes down to two things: how many nodes are running and how much of each node is actually used. A cluster that looks full to the scheduler (because pod requests are high) can run nodes at 10 to 15% actual CPU utilization. Full-price compute, fraction of the value.

Storage accumulates silently. Persistent Volumes for deleted or scaled-to-zero workloads keep billing. Snapshots created for DR and never cleaned up keep billing. Storage’s rarely the largest cost category, but a cleanup pass is essentially free savings.

Networking is the hardest to model in advance. Cross-AZ traffic within a cluster runs $0.01 per GB on AWS and GCP, negligible until a high-throughput service is routing inter-pod traffic across AZs by default. In a 100-node cluster analysis, NAT gateway charges alone ran $134 per month before any application traffic, and egress costs exceeded compute costs once external traffic scaled. For data-intensive workloads, networking deserves explicit architecture attention, not an afterthought.

Managed control plane fees are fixed overhead. EKS and GKE charge $73 per cluster per month. AKS’s free tier covers this with a best-effort SLA. Organizations running many small clusters (dev, staging, feature branches) accumulate control plane fees fast. Consolidating non-production workloads onto fewer clusters is one of the least-discussed, highest-return architectural changes available.

Non-production environments are a significant and often invisible cost driver. 44% of cloud spend covers non-production resources that are needed only during working hours but left running for the remaining 76% of the week. Dev, staging, and CI clusters that run 24/7 when they are used for 40 hours represent a straightforward reduction: schedule them to scale to zero outside business hours.

The Biggest Cost Drivers: Where Teams Lose the Most Money

These five patterns account for the majority of Kubernetes overspend. Most teams are experiencing at least two of them simultaneously, which is why the savings from a structured optimization pass tend to be larger than expected.
Oversized Resource Requests

Resource requests in Kubernetes are hard reservations. When a pod requests 2 CPU cores, the scheduler treats those cores as unavailable to other pods, even if the application is using 0.1 cores under normal load. The Cast AI 2026 report found CPU overprovisioning jumped from 40% to 69% year over year, and memory overprovisioning sits at 79%. This is not carelessness. Engineers set generous requests to avoid throttling and OOM evictions, and there is no immediate feedback loop connecting those decisions to the cloud bill. The result is clusters that look full to the scheduler while the underlying nodes run at single-digit CPU utilization.

Cluster Autoscaler Scaling to Inflated Requests

The Cluster Autoscaler provisions nodes to satisfy pending pod requests. When those requests are inflated, it provisions more and larger nodes than workloads need, and waste compounds upward from pod to node level. Most clusters waste 20 to 45% of requested CPU and memory, and the Cluster Autoscaler’s reactive, request-based provisioning is one of the structural reasons. Fix request sizing before tuning the autoscaler: accurate inputs produce far better results than a sophisticated autoscaler working from inflated ones.

Idle Non-Production Environments

Development and staging clusters that run around the clock are one of the most consistent sources of avoidable spend. A staging environment used during a 40-hour work week but running for 168 hours pays for 128 hours of idle compute per week. Multiply that across multiple clusters and the savings from scheduled scale-down become significant quickly. The fix is operational, not architectural: a CronJob or cluster scheduler that scales non-production node pools to zero outside working hours, and a process for ensuring feature-branch clusters are deleted when branches are merged.

Orphaned and Unattached Resources

Persistent Volumes, load balancers, static IP addresses, and snapshots created for workloads that have since been deleted or scaled down continue to accrue charges. These resources are invisible in most cost dashboards because they are not associated with a running pod. A periodic audit using cloud provider cost tools or OpenCost to identify unattached storage and networking resources typically surfaces meaningful savings with no performance impact.

On-Demand Pricing for Interruptible Workloads

Fault-tolerant workloads on on-demand instances when Spot capacity is available is straightforward overspend. Spot instances are 60 to 90% cheaper than on-demand for equivalent compute. Stateless web services, batch jobs, CI runners, and ML training workloads with checkpointing are all candidates. Pod Disruption Budgets, readiness probes, and retry logic are prerequisites, not afterthoughts.

Right-Sizing: The Highest-ROI Fix

Right-sizing resource requests to match actual workload behavior is the highest-impact Kubernetes cost optimization available. The Cast AI report found clusters with automated rightsizing dropped from 40 to 50 OOM kills per measurement interval to near zero: the same mechanism that eliminates padding catches memory-starved workloads humans miss.
How to Establish a Baseline

Pull 30-day actual utilization for every workload and compare it to current requests. The ratio of P95 actual usage to requested resources is the key figure: any workload above 3x overprovisioned is a candidate for rightsizing; above 5x is severely overprovisioned and should be addressed first. Tools for collecting this data include Prometheus with kube-state-metrics, Kubecost, OpenCost, and cloud-native monitoring (CloudWatch Container Insights, Google Cloud Monitoring, Azure Monitor). The friction is acting on the data: most teams have dashboards and lack the operational cadence to rightsize top offenders each month.

Vertical Pod Autoscaler (VPA)

VPA observes actual resource usage and recommends, or automatically applies, adjusted requests and limits. Recommend mode surfaces data without making changes, the right starting point before enabling automatic updates. In Auto mode, VPA can restart pods to apply new requests, which introduces disruption for stateful or latency-sensitive workloads. The practical pattern for production: run VPA in Recommend mode, review recommendations weekly, and apply them manually or through a GitOps workflow that creates an audit trail. Auto mode works well for stateless, horizontally-scaled services where a pod restart is low-risk.

Goldilocks for Team-Level Visibility

Goldilocks, from FairwindsOps, runs VPA in Recommend mode across all workloads and presents the recommendations through a dashboard that is readable by application teams, not just platform engineers. It answers the question “what should this deployment’s requests actually be?” in a format that does not require deep Kubernetes expertise to act on. For organizations where application teams own their own resource configurations, Goldilocks is an effective way to give those teams accurate data without centralizing every rightsizing decision in the platform team.

Setting Limits Correctly

Limits define the maximum resources a container can use. Setting CPU limits too low causes throttling without any visible error; the application just runs slower. Setting memory limits too low causes OOM kills. The common mistake is setting limits equal to requests, which means any workload that briefly spikes above its baseline request gets throttled or killed. A reasonable starting point is limits at 1.5 to 2x of the P99 actual usage, with requests set at P95 plus 20 to 30% headroom. This gives workloads room to absorb traffic spikes without reserving permanent capacity for worst-case scenarios that happen rarely.

Autoscaling Done Right: HPA, VPA, KEDA, and Karpenter

Autoscaling in Kubernetes operates at two levels: pod autoscaling adjusts how many pods run, and node autoscaling adjusts how many nodes the cluster has. Getting both right requires understanding what each tool is actually optimizing for.
Horizontal Pod Autoscaler (HPA)

HPA scales pod replicas based on CPU utilization, memory, or custom metrics. It works for stateless, horizontally-scalable services where adding replicas reduces per-pod load. Setting target utilization too low (scaling out when any pod exceeds 50% CPU) keeps replica counts inflated and blocks node consolidation. A target utilization of 70 to 80% is more appropriate for most workloads and allows the cluster to run pods more densely before triggering scale-out.

KEDA for Event-Driven Workloads

KEDA (Kubernetes Event-Driven Autoscaling) extends HPA to scale based on external event sources: queue depth, message lag, database query counts, HTTP request rate, and dozens of other sources through its connector ecosystem. For batch processing, message queue consumers, and scheduled jobs, KEDA enables scaling to zero when there is no work to do, which HPA alone cannot accomplish. Scaling to zero for appropriate workloads is one of the highest-impact changes available for non-production and event-driven workloads, because it eliminates the idle baseline entirely.

Karpenter vs Cluster Autoscaler

The Cluster Autoscaler is reactive by design: it watches for pending pods and provisions new nodes to satisfy them, selecting from predefined node groups. Karpenter provisions right-sized instances based on the actual requirements of pending pods, choosing from thousands of instance types rather than a predefined set, and can consolidate underutilized nodes more aggressively. The practical advantage is that Karpenter avoids the over-provisioning that comes from selecting the next-largest node group size when a smaller instance type would suffice. Karpenter is AWS-native; GKE Autopilot provides similar behavior natively on Google Cloud, and Node Autoprovision (NAP) brings Karpenter-style provisioning to GKE standard clusters.

Multi-Dimensional Autoscaling

Running HPA and VPA simultaneously on the same workload causes conflicts: HPA scales out based on CPU percentage, while VPA adjusts CPU requests, which changes the denominator HPA uses to calculate utilization. The practical resolution is to run HPA on custom metrics (queue depth, request rate) rather than CPU when VPA is also active, so the two controllers are not competing for the same signal. GKE’s Multidimensional Pod Autoscaling handles this natively; on other platforms it requires explicit configuration to avoid instability.

Spot and Preemptible Instances: What Actually Works in 2026

Spot instances are the most consistently high-return cost lever available for fault-tolerant workloads, but the savings are only realized if the application and cluster are configured to handle interruptions without reliability incidents. The table below covers how each provider implements Spot for Kubernetes.

Dimension
Discount vs on-demand
Interruption notice
Interruption handling
Recommended workloads
Not recommended for
Kubernetes integration
AWS EKS (Spot)
Azure AKS (Spot)
GKE (Preemptible/Spot)
60 to 90% off
Up to 90% off (largest gap between x86 and Arm)
Up to 80% off (preemptible); Spot VMs vary
2 minutes
30 seconds (eviction notice)
30 seconds
Node termination handler (open source) + PDB
Spot eviction handler + PDB
Built-in graceful termination + PDB
Stateless services, batch, CI, ML training with checkpoints
Same; Azure Spot best for x86 cost reduction
Same; GKE Spot well-integrated with Autopilot
Stateful databases, long-running jobs without checkpoints, anything without replicas
Same
Same
Karpenter handles Spot natively; mix on-demand/Spot per node group
Spot node pools as separate AKS node pools; mix with on-demand system pool
GKE Autopilot handles Spot automatically; Standard mode via node pool config

GPU Spot is a different story in 2026. Spot adoption for GPU workloads was essentially nonexistent through most of 2025, with fewer than 2% of GPUs running on Spot. Early 2026 showed T4 availability improving in specific regions (some showing 90%+ survival over 30 minutes), but H100 and H200 Spot capacity remains scarce and prices are rising: AWS raised H200 Capacity Block prices 15% in January 2026. For GPU-heavy workloads, Reserved capacity or Committed Use Contracts are the more reliable savings lever than Spot.

Kubernetes Cost Optimization Tools: What Each One Actually Does

The Kubernetes cost tooling landscape divides into two categories: visibility tools that show you where the waste is, and optimization platforms that act on it. Most teams need both, and in that order.
OpenCost: Open-Source Cost Visibility

OpenCost is the CNCF-maintained open-source standard for Kubernetes cost allocation. It attributes cloud costs to namespaces, deployments, pods, and labels in real time, using actual cloud provider pricing. For teams that want cost visibility without a commercial tool, OpenCost is the baseline: it installs as a Prometheus exporter and integrates with Grafana for dashboarding. It does not make optimization recommendations or take automated action; it shows you what things cost so you can decide what to do about it.

Kubecost: Cost Monitoring with Recommendations

Kubecost builds on OpenCost with a richer UI, rightsizing recommendations, and multi-cluster support. The free tier covers a single cluster; enterprise features include cost governance policies, SAML/SSO, and deeper multi-cloud support. For teams that want recommendations alongside visibility without moving to a fully automated platform, Kubecost is the most commonly deployed tool in this space. The limitation is the same as any recommendation-based system: the recommendations do not implement themselves, and most teams find their savings drift back as workloads change and the recommendations go unreviewed.

Karpenter: Open-Source Node Provisioning

Karpenter is AWS-native, open-source, and focused specifically on node provisioning. It selects the right instance type and size for each batch of pending pods, consolidates underutilized nodes, and supports Spot interruption handling natively. For EKS clusters, Karpenter is the most impactful single tool for reducing node-level waste, and it requires no commercial license. GKE Autopilot provides equivalent behavior natively; AKS Node Autoprovision (NAP) brings Karpenter to Azure in preview as of 2026.

Autonomous Platforms: Cast AI, Scaleops, PerfectScale

Autonomous platforms go beyond recommendations: they continuously rightsize pod requests, manage node provisioning, automate Spot adoption, and handle commitment purchasing, without manual intervention between the dashboard and the savings. These platforms commonly report 50 to 75% cost reductions on clusters they manage autonomously. The trade-off is that they require granting write access to the cluster, which raises governance questions for security-sensitive environments. PerfectScale, acquired by DoiT International, is positioned as the reliability-aware option: its optimization is calibrated to avoid configurations that are cost-efficient but operationally fragile. Cast AI and ScaleOps are more aggressive on automation. The right choice depends on risk tolerance and how much the team wants to own the optimization logic versus delegate it.

When Tools Are Not Enough: Architectural Cost Problems

Optimization tools work best on architecturally sound clusters. On broken architecture, they surface symptoms without fixing causes, and reported savings don’t hold.

Cross-AZ traffic architecture. A service that routes inter-pod traffic across availability zones by default will generate cross-AZ data transfer charges regardless of how well its pods are rightsized. The fix requires topology-aware routing (Kubernetes topology spread constraints or topology-aware service routing, available from Kubernetes 1.27) so pods prefer communicating with endpoints in the same AZ. This is an architectural change, not a configuration tweak, and it requires understanding which services generate high east-west traffic volumes before deciding where to apply it.

Too many small clusters. Organizations that provision a dedicated cluster for every team, environment, or service pay $73 per month per cluster in control plane fees on EKS and GKE, plus the minimum node overhead required to run system components. A platform that runs 20 clusters pays $1,460 per month in control plane fees alone, before any workload compute. Consolidating non-production and low-traffic workloads onto shared clusters with proper namespace isolation reduces this overhead significantly. The architectural question is how to enforce isolation between teams on a shared cluster, which is a network policy and RBAC design problem, not a cost tool problem.

Stateful workloads blocking node consolidation. Stateful services with Persistent Volumes, or services with PodAntiAffinity rules that prevent co-location, can block node consolidation even when Karpenter or an autonomous platform is handling node lifecycle. If a node cannot be drained because a pod cannot be moved (stateful) or cannot be scheduled elsewhere (anti-affinity), the node stays running regardless of its utilization. Addressing this requires reviewing which workloads actually need dedicated nodes versus which inherited that configuration from a template.

GPU workload architecture. At an average utilization of 5% across measured clusters, GPU spend is the fastest-growing waste category in Kubernetes environments that run AI or ML workloads. GPU sharing through time-slicing (available in NVIDIA’s device plugin) or MIG (Multi-Instance GPU) partitioning allows multiple pods to share a single GPU, which is the right architecture for inference workloads with bursty, intermittent request rates. One case study showed 20% savings immediately from GPU time-slicing, growing to 70% total savings after consolidating models onto shared instances and rightsizing CPU and memory alongside. This requires re-architecting how GPU workloads are deployed, not just adding an optimization tool.

If the cost problem on your cluster traces back to architecture rather than configuration, the right starting point is an infrastructure audit that maps actual spend to its structural causes. That audit is the foundation for a remediation plan that tools can then execute against.

Common Mistakes in Kubernetes Cost Optimization

Buying optimization tooling before fixing resource requests.

A cost optimization platform working from inflated requests will provision better-sized nodes to serve those inflated requests, and report savings against a baseline that was itself wasteful. The sequence matters: measure actual utilization, rightsize requests, then evaluate whether an optimization platform adds further value. Skipping the first two steps means paying for a tool to manage waste rather than eliminate it.

Setting CPU limits too low to save money.

CPU limits that are lower than actual peak usage cause throttling, not OOM kills: the application keeps running but processes requests more slowly. This is invisible in most monitoring unless CPU throttle rate is explicitly tracked. Teams that aggressively cut CPU limits to reduce request size often create latency problems that get attributed to application code rather than resource configuration.

Treating Spot instances as a drop-in replacement for on-demand.

Spot instances can be interrupted with two minutes notice. Applications holding in-flight transactions at interruption time, or running without replicas to absorb traffic during a drain, will produce reliability incidents. Pod Disruption Budgets, readiness probes, and graceful shutdown handling are prerequisites for Spot adoption.

Ignoring non-production environments.

Development and staging clusters are often the easiest savings available because the workloads running on them have no SLA requirements. A scheduled scale-to-zero for non-production node pools outside working hours, combined with a process for deleting feature-branch clusters after merge, can reduce non-production spend by 60 to 70% with no impact on development velocity.

Optimizing for cost without shared ownership.

Platform teams that rightsize workloads owned by application teams create friction and often see their changes reverted at the next deployment, because the application team’s Helm values still contain the original inflated requests. Durable cost optimization requires application teams to own their resource configurations: give them accurate utilization data and clear targets.

Frequently Asked Questions

How much can Kubernetes cost optimization actually save?

Industry data consistently shows that unmanaged clusters waste 30 to 50% of their total spend, with the Cast AI 2026 report finding average CPU utilization of 8% and memory utilization of 20% across production clusters. Structured optimization programs, covering rightsizing, autoscaler tuning, Spot adoption for appropriate workloads, and non-production cleanup, typically recover 30 to 50% of cluster spend. Autonomous optimization platforms report 50 to 75% reductions on clusters they manage continuously. The actual number depends on how overprovisioned the starting point is.

What is the most impactful Kubernetes cost optimization technique?

Right-sizing resource requests is the highest single-impact change for most clusters. Because resource requests are hard reservations in Kubernetes, inflated requests propagate up to cause inflated node provisioning, which means the cluster autoscaler provisions more and larger nodes than workloads actually need. Correcting requests first produces downstream improvements in node utilization and autoscaling behavior. The counterintuitive finding from Cast AI’s data is that rightsizing also improves reliability: OOM kills dropped from 40 to 50 per measurement interval to near zero in clusters that moved from static to automated rightsizing.

Should we use Spot instances for production Kubernetes workloads?

Spot instances are appropriate for production workloads that are stateless, horizontally scalable, and designed to handle graceful shutdown on two minutes notice. Stateless web services, API servers with multiple replicas, batch jobs, CI runners, and ML training workloads with checkpointing are all strong candidates. Stateful databases, services with no replicas, and workloads with strict latency SLOs during rescheduling are not. The prerequisite is that the application handles interruption gracefully through Pod Disruption Budgets, readiness probes, and proper shutdown signal handling.

What is the difference between Karpenter and the Cluster Autoscaler?

The Cluster Autoscaler scales from predefined node groups, selecting the next available size when pods are pending. Karpenter selects instance types directly based on the requirements of pending pods, choosing from thousands of instance types rather than a predefined set. In practice, Karpenter provisions better-matched instances (avoiding the over-provisioning that comes from rounding up to the next node group size), consolidates underutilized nodes more aggressively, and handles Spot interruption natively. For EKS clusters, Karpenter is the recommended replacement for the Cluster Autoscaler; GKE Autopilot provides equivalent behavior natively.

What tools are best for Kubernetes cost visibility?

OpenCost is the open-source baseline: it attributes cloud costs to namespaces, pods, and labels in real time and integrates with Prometheus and Grafana. Kubecost builds on OpenCost with a richer UI and rightsizing recommendations; its free tier covers a single cluster. Cloud-native tools (AWS Cost Explorer with container cost allocation, Google Cloud Cost Management, Azure Cost Management) provide cost breakdowns without an additional agent but vary in namespace-level granularity. For recommendations that include reliability context, PerfectScale is designed to surface rightsizing opportunities that do not create fragile configurations.

How do we handle Kubernetes cost allocation across teams?

Cost allocation requires labeling at the workload level: namespaces, deployments, and pods should carry labels identifying the owning team, service, and environment. OpenCost and Kubecost both support label-based cost allocation. The harder problem is governance: ensuring those labels are applied consistently as workloads are deployed, and that application teams have visibility into their own spending so they have the context to make resource decisions. Cost allocation without team visibility tends to centralize optimization in the platform team, which does not scale.

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

It is ongoing work. Workloads change, traffic patterns shift, new services are deployed with default resource configurations, and the savings from a one-time rightsizing pass drift back within a few months as the cluster evolves. The most effective approach treats cost efficiency as an operational property, maintained continuously through automated rightsizing, regular audits of idle resources, and team-level cost visibility, rather than a project that is complete when the first bill reduction is achieved.

When should we consider an autonomous cost optimization platform?

An autonomous platform makes sense when the optimization work exceeds the bandwidth of the platform team to do manually, when workloads change frequently enough that static configurations degrade quickly, or when the potential savings justify the tooling cost and the governance trade-off of granting the platform write access to the cluster. Teams that have done a first-pass optimization and found that savings drift back without continuous attention are the clearest candidates. Teams that are still establishing their monitoring baseline are better served by starting with OpenCost or Kubecost before adding automation.