Cutting your EKS bill without the risk
Right-sizing, Spot, and Karpenter can halve your Kubernetes spend — if you do them in the right order. A reliability-first playbook.

EKS bills balloon quietly: over-provisioned requests, idle nodes, and on-demand pricing for workloads that could tolerate interruption. You can usually cut 30–50% without touching reliability — in this order.
1. Right-size requests first
Most clusters run at 20–30% utilization because requests are guesses. Pull actual usage and set requests off real percentiles, not vibes:
kubectl top pods -A --sum=true
# then set requests near the p90 of observed usage, with headroom
Do this before anything else. Autoscalers multiply your requests — if the requests are wrong, every other optimization scales the waste.
2. Let Karpenter pack the nodes
Cluster Autoscaler scales node groups; Karpenter provisions the right instance for pending pods and consolidates aggressively:
apiVersion: karpenter.sh/v1
kind: NodePool
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1m
Consolidation alone often reclaims 15–20% by bin-packing pods onto fewer nodes.
3. Spot — for the workloads that can take it
Stateless, replicated, retry-friendly workloads belong on Spot. Keep a small on-demand base for anything stateful.
Rule of thumb: Spot for the web tier and batch, on-demand for the data tier. A 2-minute interruption notice is plenty for a well-behaved Deployment.
What not to do
Don't start with Savings Plans. Locking in a commitment on top of a wasteful baseline just makes you efficient at overspending. Right-size, consolidate, and move to Spot first — then buy a commitment for the steady-state floor you're left with.