Blog
Cloud Optimizationbluebill.io — Mirco Francioni

Kubernetes right-sizing without breaking things

Most Kubernetes clusters run at under 30% utilisation. Here is how to reclaim that headroom without waking anyone up at night.

Kubernetes right-sizing without breaking things

The gap between requested and used

Every pod asks for CPU and memory up front. Teams pad those requests because a throttled service is far more visible than an expensive one. Multiply that padding across hundreds of workloads and you get clusters running at 20-30% real utilisation while you pay for 100%.

Start with data, not opinions

Pull two weeks of actual usage per workload, at the 95th percentile rather than the peak. One-off spikes should be handled by headroom in the node pool, not by permanently oversized requests on every replica.

A safe sequence

1. Right-size requests first, limits second. Requests drive scheduling and therefore cost.

2. Move stateless, non-critical workloads before anything customer-facing.

3. Change one namespace per week and watch latency and restart counts.

4. Only then tune the cluster autoscaler and node instance families.

Make it stick

Right-sizing is not a project, it is a habit. Put utilisation per namespace in the same weekly review as your error budget, and give each team the cost of their own namespace. Once engineers can see the number, they manage it themselves.

What good looks like

Healthy scaleup clusters land around 60-70% average CPU utilisation with autoscaling absorbing the rest. Getting there typically removes 25-40% of compute spend, and it is the single highest-leverage change we make in the first 90 days of an engagement.