⌂ Home

Resource Quotas and Limits

Interactive guide to requests, limits, namespace quotas, and how Kubernetes enforces resource fairness in shared clusters.

Requests, limits, and namespace ResourceQuota solve different but connected problems: scheduling guarantees, runtime protection, and namespace-level governance.

Core Model

Understand the Concept First

Requests

Requests define the minimum resources the scheduler must reserve for a container.

Limits

Limits cap how much CPU or memory the container may consume at runtime.

ResourceQuota

ResourceQuota restricts aggregate consumption across a namespace.

Lifecycle Flow

Admission and Enforcement Flow

Request vs Limit: CPU and Memory CPU Resources Request: 500m Guaranteed minimum Limit: 1000m Maximum allowed 0m 500m (Request) 1000m (Limit) CPU: Throttled at Limit Container gets 500m guaranteed Can burst up to 1000m if node has capacity Memory Resources Request: 256Mi Guaranteed Limit: 512Mi OOMKilled if exceeded 0Mi 256Mi (Request) 512Mi (Limit) Memory: OOMKilled at Limit Container gets 256Mi guaranteed Killed if it tries to use more than 512Mi Namespace Quota Enforcement ResourceQuota namespace: dev-team requests.cpu: 4 requests.memory: 8Gi limits.cpu: 8 limits.memory: 16Gi pods: 20 Pod Submitted resources: requests: cpu: 1 memory: 2Gi limits: memory: 4Gi Quota Check? ✓ ALLOWED Quota available Pod created ✗ DENIED Quota exceeded Admission rejected
Requests influence scheduling, limits influence runtime behavior, and quotas influence namespace admission decisions.
YAML and Commands

Examples You Can Recognize Quickly

Quota Exceeded: What Are Your Options? ✗ Error: ResourceQuota "compute-quota" exceeded Requested: cpu=2, memory=4Gi Available: cpu=0.5, memory=1Gi (already used 3.5 CPU, 7Gi memory) Choose Your Solution: 1. Reduce Pod Requests resources: requests: cpu: 2 cpu: 500m memory: 4Gi memory: 1Gi Fits within quota ✓ Quick fix 2. Delete Unused Pods $ kubectl get pods -n dev old-app-1 (not needed) old-app-2 (not needed) test-pod (completed) $ kubectl delete pod old-app-1 test-pod Free up quota ✓ Reclaim resources 3. Increase Quota $ kubectl edit resourcequota -n dev requests.cpu: "4" requests.cpu: "8" Requires admin approval May have budget implications ⚠ Last resort
ResourceQuota Example
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
namespace: quotaz
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
Pod with Resource Specs
apiVersion: v1
kind: Pod
metadata:
name: resource-demo
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: 500m # Scheduler reserves 500m
memory: 256Mi # Scheduler reserves 256Mi
limits:
cpu: 1000m # Throttled if exceeding
memory: 512Mi # OOMKilled if exceeding
Useful Commands
# Check namespace quota
kubectl get resourcequota -n quotaz
kubectl describe resourcequota mem-cpu-demo -n quotaz

# Check current usage
kubectl describe namespace quotaz

# View pod resource requests/limits
kubectl describe pod resource-demo
Decision Guide

Requests, Limits, and Quotas

Layer Scope Purpose
Request Container Guarantee minimum resources for scheduling
Limit Container Prevent a container from exceeding allowed resources
ResourceQuota Namespace Control total resource consumption across workloads
Most confusion disappears when you remember that requests are about placement, limits are about runtime, and quotas are about aggregate namespace policy.
Use It Well

Practice and Real-World Thinking

Multi-tenant governance

Keep one namespace or team from consuming the whole cluster.

Cost boundaries

Enforce budget-oriented ceilings in development or shared environments.

Stability protection

Prevent runaway workloads from destabilizing other workloads.