ResourceQuota / LimitRange exceeded — FailedCreate, pods rejected
Events show quota exceeded or limit range exceeded when creating pods
Focused incident mode — strips away everything but this runbook.
Symptoms
- Events show quota exceeded or limit range exceeded when creating pods
- New deployments fail with Forbidden: would exceed quota
- Pod creation returns 403 Forbidden from the API server
ResourceQuota is a hard guardrail — it will reject pod creation with a 403 regardless of node capacity. Monitor quota usage as part of capacity planning.
Evidence to grab
Collect these artifacts before you change anything — they prove (or rule out) each cause.
Quota status
kubectl describe resourcequota -n <namespace>LimitRange configuration
kubectl get limitrange -n <namespace>
Diagnostic flow
Run the steps in order, marking each claim confirmed or refuted. The evidence you gather feeds the ranked causes below.
Guided decision tree is ready.
Steps with commands, expected output, and pass/fail branches.
Ranked root causes
Evidence checklist
- kubectl describe resourcequota shows Used >= Hard
- New pods rejected with Forbidden: would exceed quota
Confirm before fixing
kubectl describe resourcequota -n <namespace>Confirm quota exhaustion
Fix
kubectl patch resourcequota <quota> -n <namespace> --type merge -p '{"spec":{"hard":{"cpu":"40","memory":"80Gi"}}}'Raise the quota limit (requires cluster-admin)
kubectl delete pod <large-pod> -n <namespace>Remove a large pod to free quota
Resolution runbook
Apply from top to bottom after the cause is confirmed. Review every command before running it — risk tags are shown on each.
kubectl describe resourcequota -n <namespace>Check current usage vs limits
kubectl get limitrange -n <namespace> -o yamlReview LimitRange constraints
kubectl describe namespace <namespace> | grep -A10 EventsRead the Forbidden event
kubectl patch resourcequota <quota> -n <namespace> --type merge -p '{"spec":{"hard":{"cpu":"<new>","memory":"<new>"}}}'Raise the quota to accommodate the workload
Prevention
- Alert on quota usage > 80% per namespace.
- Set resource requests/limits on all workloads so quota consumption is predictable.
- Use LimitRange defaults so namespaces without explicit requests still get sensible limits.
- Review quota as part of onboarding for new namespaces.
Related runbooks
Same stack, same failure family — worth a skim.
Commands marked READ CHANGE DESTRUCTIVE — never run DESTRUCTIVE commands against production data you cannot restore. Copy → verify → execute.