https://drive.google.com/file/d/132X_P0IKV-zSgNG3ocHXdnwv4ATGxMTz/view?usp=sharing
apiVersion: v1
kind: ResourceQuota
metadata:
name: memory-cpu-quota
namespace: learning
spec:
hard:
requests.cpu: "1" # β Total CPU requests β€ 1 core
requests.memory: 1Gi # β Total memory requests β€ 1 GiB
limits.cpu: "2" # β Total CPU limits β€ 2 cores
limits.memory: 2Gi # β Total memory limits β€ 2 GiB
π Key Insight:
This quota enforces four hard limits on the
learningnamespace:
- Total requested CPU β€ 1 core
- Total requested memory β€ 1 GiB
- Total CPU limits β€ 2 cores
- Total memory limits β€ 2 GiB
π‘ Why both requests and limits?
requestsβ used for scheduling and quota allocationlimitsβ used for runtime enforcement (throttling/OOM) β Both are critical for fair resource sharing
| Quota Type | What It Tracks | Enforcement |
|---|---|---|
requests.cpu |
Sum of all resources.requests.cpu in Pods |
At Pod creation |
requests.memory |
Sum of all resources.requests.memory |
At Pod creation |
limits.cpu |
Sum of all resources.limits.cpu |
At Pod creation |
limits.memory |
Sum of all resources.limits.memory |
At Pod creation |
π― Example:
If you deploy a Pod with:
resources: requests: cpu: "500m" memory: "512Mi" limits: cpu: "1000m" memory: "1Gi"β Quota usage becomes:
requests.cpu: 0.5/1requests.memory: 512Mi/1Gilimits.cpu: 1/2limits.memory: 1Gi/2Gi
β οΈ Critical Rule:
Every container in every Pod must define
resources.requestsandlimitsβ otherwise, quota enforcement fails silently (Pod wonβt be created).
# Create namespace
kubectl create namespace learning
# Apply quota
kubectl apply -f namespace-resourcequota.yml
# Verify
kubectl describe resourcequotas memory-cpu-quota -n learning
# Hard:
# limits.cpu: 2
# limits.memory: 2Gi
# requests.cpu: 1
# requests.memory: 1Gi
# Used: <all 0>
# pod-within-quota.yaml
apiVersion: v1
kind: Pod
meta
name: good-pod
namespace: learning
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
kubectl apply -f pod-within-quota.yaml
# Verify usage
kubectl describe resourcequotas memory-cpu-quota -n learning
# Used:
# requests.cpu: 500m
# requests.memory: 512Mi
# limits.cpu: 1
# limits.memory: 1Gi
requests.memory# pod-exceed-memory.yaml
apiVersion: v1
kind: Pod
metadata:
name: bad-pod-memory
namespace: learning
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "1536Mi" # > 1Gi quota (1024Mi used by good-pod)
limits:
memory: "2Gi"