Back to Glossary
FinOps

Kubernetes Resource Waste

The gap between what Kubernetes workloads reserve in resource requests and what they actually consume at runtime.

What is Kubernetes Resource Waste?

Kubernetes resource waste is the difference between resources requested (and thus reserved) by Pods and resources actually consumed. Because Kubernetes schedules Pods based on declared resource requests — not actual usage — nodes must be sized to accommodate the sum of all requests, even when actual usage is far lower. This gap between reserved and consumed resources is the primary driver of Kubernetes compute waste, and it is endemic: industry data consistently shows that average CPU utilization across Kubernetes clusters sits around 13% and memory around 20%, meaning 80–87% of provisioned capacity is paid for but unused.

Waste takes several forms. Idle waste occurs when Pods with correct requests simply aren't doing work — dev/staging environments running at full production capacity overnight and on weekends. Request waste occurs when Pod resource requests are set far above actual peak usage — a container requesting 4 CPU cores that never uses more than 200m. Orphan waste occurs when resources (PVCs, Services, ConfigMaps, Secrets) persist after the workload they served is deleted, incurring ongoing costs with zero utilization.

Quantifying waste requires correlating Kubernetes resource request data (from the API server) with actual utilization metrics (from Metrics Server or Prometheus). The waste percentage for a namespace or workload is: (sum of requests - sum of actual peak usage) / sum of requests. For storage, waste is simpler: any PVC with no active Pod mount is 100% waste.

Example

# Find pods with high CPU request but low actual usage
kubectl top pods --all-namespaces --containers | sort -k4 -rn

# Compare requests vs usage for a namespace
kubectl get pods -n production -o json | \
  jq '.items[].spec.containers[].resources.requests'

# List all PVCs that are not mounted by any pod (pure storage waste)
kubectl get pvc --all-namespaces -o json | \
  jq '.items[] | select(.status.phase == "Bound") | .metadata.name'

Cost & Waste Implications

Resource waste directly translates to over-provisioned and over-paid cloud infrastructure. A cluster where Pods collectively request 100 CPU cores but only use 13 cores is paying for 87 idle CPU cores. At $0.048/vCPU-hour (m5.xlarge equivalent on AWS), 87 idle cores cost ~$36,000/month. Rightsizing those requests to match actual usage would reduce the node count needed and eliminate most of that waste.

KorPro— Kubernetes Cost Optimization

How KorPro Helps

KorPro's waste analysis compares declared resource requests against actual CPU and memory utilization metrics for every workload in your clusters, surfacing the workloads with the highest absolute waste in dollar terms for prioritized remediation.

Scan Your Cluster Free

Stop Wasting Money on Orphaned Kubernetes Resources

KorPro connects to your clusters across GCP, AWS, and Azure — no agents, no installation — and surfaces every orphaned resource with its monthly cost estimate.