NewFresh guides on DevOps, AI, cloud and security — read the latest
Cloud
Cloud

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.

Kubernetes node pools and cloud cost telemetry in a dark technical scene.

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.

Share
All articles