Why Kubernetes Clusters Are Expensive
The root cause: Kubernetes schedules pods based on resource requests, not actual usage. For a deeper dive into specific reduction tactics, see our 12 proven strategies to reduce Kubernetes costs. If your pod requests 4 CPU but uses 0.5 CPU, the scheduler reserves a full 4 CPU on the node. That node fills up faster, requiring more nodes — even though actual utilization is low.
Average Kubernetes cluster CPU utilization in production: 13–25% (CNCF annual survey). That means 75–87% of compute is reserved but unused.
Getting Resource Requests Right
The single highest-impact optimization: right-size your resource requests. Use kubectl top pods or a monitoring tool (Datadog, Prometheus) to measure P95 CPU and memory usage over 14+ days. Set requests at P95 usage; set limits at 1.5–2x requests.
Result: the same number of pods fit on 60% fewer nodes. A team running 20 nodes can often reduce to 12 with zero performance impact.
Bin Packing & Node Efficiency
Karpenter (AWS) and Cluster Autoscaler handle node provisioning. Karpenter is significantly better at bin packing — it selects the optimal instance type for each batch of pending pods, rather than scaling a fixed instance type. Enable Karpenter's Consolidation feature to continuously repack running workloads onto fewer nodes.
Spot Node Pools
Run interruptible workloads (batch jobs, non-critical services) on Spot/Preemptible nodes. In EKS, use a Karpenter NodePool with Spot as the primary capacity type and on-demand as fallback. AWS Node Termination Handler ensures graceful pod eviction on Spot reclaim. Typical savings: 60–80% on eligible workloads.
Vertical Pod Autoscaler (VPA)
VPA automatically adjusts resource requests based on observed usage. Run in Recommendation mode first — it suggests right-sized values without making changes. Promote to Auto mode for non-critical workloads once you've validated recommendations. Warning: VPA and HPA should not manage the same resource dimension simultaneously.
Cost Visibility Tools for K8s
Kubecost: The standard for K8s cost allocation. Free open-source, paid enterprise. Namespace/workload/team breakdowns with configurable shared cost allocation.
Harness CCM: Strong K8s cost allocation, especially if using Harness for CI/CD.
Spot Ocean: Full K8s cost optimization + Spot automation in one product.