Kubernetes Resource Limits: No CPU Limits, Memory Limit = Request
January 15, 2026•Salih Kayiplar
kubernetes
resources
best-practices
performance
The Rule (Tim Hockin, K8s maintainer at Google)
- Memory:
limits = requests(always) - CPU: Never set CPU limits
The Config
# Correct
resources:
requests:
cpu: 500m
memory: 256Mi
limits:
memory: 256Mi # equals request, no CPU limit
# Wrong - causes unnecessary CPU throttling
resources:
requests:
cpu: 500m
memory: 256Mi
limits:
cpu: 1000m # remove this
memory: 512Mi # should equal request
Why
- CPU limits cause CFS throttling even when the node has spare CPU. Your pod gets slower for no reason.
- Memory limit > request = node overcommit. The kernel OOM killer starts randomly evicting pods under pressure.
Check for existing LimitRanges that might override
kubectl get limitrange -A
Gotcha
- VPA (Vertical Pod Autoscaler) sets CPU limits by default in some versions — check the
updatePolicy - If a namespace has a
LimitRangewithdefaultLimitfor CPU, every pod without explicit limits gets one forced on it - GKE Autopilot ignores your settings and enforces its own limits
Ready to scale your cloud infrastructure?
Let's discuss how CloudCops can help you build secure, scalable, and modern DevOps workflows. Schedule a free discovery call today.
Related Snippets
Kubernetes Useful Commands Cheat Sheet
Battle-tested kubectl commands for daily cluster operations — pod cleanup, version checks, network debugging, bulk patching, and more.
Feb 15, 2026
kubernetes
kubectl
bash
Zalando Postgres Operator: Backup & Restore on Azure
Complete guide to setting up WAL-G backups with Azure Blob Storage for the Zalando Postgres Operator, including restore procedures and troubleshooting.
Feb 10, 2026
kubernetes
postgresql
azure
Access Kubernetes Nodes Without SSH
Get a root shell on K8s nodes when SSH is blocked — kubectl debug, nsenter, and systemctl access.
Feb 5, 2026
kubernetes
debugging
security