0%

Preparing the page

Kubernetes Cost Optimization: How to Reduce EKS, AKS and GKE Costs

Kubernetes costs are hard to see and easy to waste. Learn how to allocate, rightsize and reduce EKS, AKS and GKE costs with requests, autoscaling and Spot.

Nidhish Joy

Nidhish Joy · Co-founder & CEO

· 4 min read

Share
Placeholder illustration

Kubernetes made deployment easier and cost management harder. Your cloud bill shows EC2 instances or VMs, not the 40 teams sharing them. Engineers set generous resource requests "just in case." Clusters scale up and rarely scale back down.

This guide explains Kubernetes cost optimization step by step for EKS, AKS and GKE.

Kubernetes made deployment easier and cost management harder.

Why are Kubernetes costs hard to manage?

Three reasons:

  • Shared infrastructure. Many teams share the same nodes, so cloud tags cannot show who used what.
  • Requests drive cost, not usage. The scheduler reserves capacity based on requests. A pod requesting 2 CPUs but using 0.2 still blocks 2 CPUs.
  • Layers of abstraction. Nodes, node groups, pods, namespaces and persistent volumes all contribute to cost in different ways.

How do you allocate Kubernetes costs to teams?

Use a Kubernetes cost allocation tool such as OpenCost (a CNCF project) or Kubecost. These tools combine cloud pricing with cluster metrics to calculate cost per namespace, deployment, label or pod.

Cost allocation by namespace

Make namespaces and labels match your cloud tagging schema, for example team, application and environment. Then decide how to allocate shared costs such as idle capacity, system namespaces and control plane fees. See our cost allocation guide.

How do you reduce Kubernetes costs?

Follow this order, from highest impact to fine-tuning:

Savings from rightsizing, autoscaling and Spot
  1. Rightsize requests and limits. Compare requested CPU and memory with actual usage over two to four weeks. The Vertical Pod Autoscaler in recommendation mode can suggest values.
  2. Enable Horizontal Pod Autoscaler (HPA) so replicas follow demand rather than staying sized for peak.
  3. Use cluster autoscaling. Cluster Autoscaler or Karpenter (on EKS) add and remove nodes as pods need them. Karpenter can also choose cheaper instance types automatically.
  4. Improve bin-packing. Use a mix of node sizes and let the scheduler consolidate workloads onto fewer nodes.
  5. Run interruptible workloads on Spot. Stateless services, batch jobs and CI runners are good candidates. Use pod disruption budgets and multiple instance types.
  6. Scale down non-production clusters outside working hours.
  7. Clean up orphaned volumes and load balancers. Deleted workloads can leave persistent volumes and cloud load balancers running.
  8. Cover the baseline with commitments. After rightsizing, use Savings Plans or reservations for steady node capacity.

Requests vs usage: what good looks like

MetricWarning signHealthy target
CPU request utilisationUnder 30%50–70%
Memory request utilisationUnder 40%60–80%
Cluster idle costOver 30% of cluster spendUnder 15–20%
Spot share (eligible workloads)0%Majority of stateless and batch

These are general guidelines. Latency-sensitive or bursty workloads may need more headroom.

How does Kubernetes cost relate to observability?

You cannot rightsize what you cannot measure. Prometheus metrics for container CPU and memory are the input to every rightsizing decision. Teams that already run a good Kubernetes observability stack find cost optimisation much faster.

How Crozaint approaches Kubernetes costs

Crozaint runs Kubernetes on AWS, Azure and Google Cloud, as well as OpenShift, for clients across retail, financial services and technology. Our FinOps engagements bring cluster-level allocation into the same view as the rest of your cloud bill, so a team sees its namespaces and its managed services together.

Because we also deliver observability and 24/7 managed operations, we can rightsize with confidence: performance and reliability data sit next to cost data, so savings do not come at the expense of SLOs.

Common mistakes to avoid

  • Copying the same large requests into every deployment
  • Setting CPU limits that cause throttling, then raising requests to compensate
  • Running stateful databases on Spot without a plan
  • Ignoring idle cluster capacity in cost reports
  • Optimising cost without watching latency and error rates

Conclusion

Kubernetes cost optimisation is mostly about honest requests, elastic scaling and clear ownership. Get visibility by namespace, fix requests, then automate scaling and Spot.

Running Kubernetes at scale? Book a 30-minute discovery call and we will review your cluster costs with you.

Frequently Asked Questions

What is the biggest source of Kubernetes waste?

Over-provisioned resource requests are usually the biggest source. Kubernetes reserves node capacity based on requests, not real usage, so pods that request far more CPU or memory than they use force the cluster to run more nodes than needed. Rightsizing requests often delivers the largest savings.

What is OpenCost?

OpenCost is an open-source, vendor-neutral project under the Cloud Native Computing Foundation that measures and allocates Kubernetes costs. It combines cloud pricing data with cluster metrics to show cost by namespace, workload, label and pod across AWS, Azure, Google Cloud and on-premises clusters.

Is Karpenter better than Cluster Autoscaler?

Karpenter, originally built for EKS, provisions nodes directly based on pending pod requirements and can choose from many instance types, often improving bin-packing and Spot usage. Cluster Autoscaler works with predefined node groups and is widely supported. The better choice depends on your platform and operating model.

Can production workloads run on Spot instances?

Yes, if they are stateless, replicated and tolerant of interruption. Use multiple instance types, spread across zones, pod disruption budgets and graceful shutdown handling. Keep stateful and latency-critical components on On-Demand or committed capacity.

How do you allocate shared Kubernetes costs?

Allocate direct costs by namespace and labels, then distribute shared costs, such as idle capacity, system components and control plane fees, using a proportional or usage-based rule. Document the rule and agree it with finance so teams trust the numbers.

Nidhish Joy

Written by

Nidhish Joy

Co-founder & CEO · 10 articles

Nidhish co-founded Crozaint in 2018 and leads it as CEO — 250+ cloud engagements, a 35-strong team running 24/7 operations for 100+ critical applications, and AWS Advanced and Microsoft Gold partner status along the way. He works where technology, strategy and investment meet: AI-first businesses, FinOps and technology economics, and the partnerships that make them real. He is also the first call on any new engagement.

JosephReviewed for technical accuracy by Joseph, Cloud Consulting.

After the reading

Reading About FinOps Is the Easy Part.Doing It in Your Estate Is Ours.

Thirty minutes with the people who wrote this. We look at your setup, say what we would fix first and leave you with a plan, whether or not you go further with us.

  • A look at your estate, not a demo
  • What we would fix first, and why
  • A plan you keep, whether or not you hire us
Nidhish Joy

Talk to Nidhish

Wrote this article · Co-founder & CEO

Thirty minutes on your estate. Nidhish looks at what you have and tells you what we would do first.

Book 30 Minutes

No deck, no pitch, no commitment.