https://drive.google.com/file/d/1QTMUPUBy1ik_fnO0AaGF0wPUCn3faDqE/view?usp=sharing

πŸ” YAML Breakdown

apiVersion: v1
kind: LimitRange
metadata:
  name: def-cpu-mem-limit
  namespace: dev
spec:
  limits:
  - default:              # ← Applied if Pod defines NO limits
      cpu: 111m
      memory: 99Mi
    defaultRequest:       # ← Applied if Pod defines NO requests
      cpu: 101m
      memory: 91Mi
    max:                  # ← Hard ceiling (enforced)
      cpu: 200m
      memory: 100Mi
    min:                  # ← Hard floor (enforced)
      cpu: 100m
      memory: 90Mi
    type: Container

πŸ”‘ Key Insight:

This LimitRange does two critical things:

  1. Auto-applies defaults to Pods that don’t define resources
  2. Enforces min/max on Pods that do define resources

πŸ’‘ Why this matters:


πŸ“Œ How LimitRange Works

Scenario Behavior
Pod defines NO resources β†’ defaultRequest + default applied
Pod defines resources within min/max β†’ Pod’s values used
Pod defines resources BELOW min β†’ Rejected (exceeds min limit)
Pod defines resources ABOVE max β†’ Rejected (exceeds max limit)

🎯 Your Rules:

⚠️ Critical Note:

defaultRequest must be ≀ default (your example: 101m ≀ 111m β†’ βœ… valid)


πŸ§ͺ k3s Lab: Test LimitRange Behavior

πŸ”§ Step 1: Create Namespace & Apply LimitRange

# Create namespace
kubectl create namespace dev

# Apply LimitRange
kubectl apply -f limit-ranges.yaml

# Verify
kubectl describe limitrange def-cpu-mem-limit -n dev

πŸ”§ Step 2: Test Case 1 β€” Pod with NO Resources

# pod-no-resources.yaml
apiVersion: v1
kind: Pod
metadata:
  name: no-res-pod
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx

kubectl apply -f pod-no-resources.yaml

# Check applied resources
kubectl get pod no-res-pod -n dev -o jsonpath='{.spec.containers[0].resources}'
# βœ… Output:
# {"limits":{"cpu":"111m","memory":"99Mi"},
#  "requests":{"cpu":"101m","memory":"91Mi"}}

πŸ” Result:

LimitRange auto-applied defaults β†’ Pod is Burstable (not BestEffort)!

πŸ”§ Step 3: Test Case 2 β€” Pod Within Min/Max

# pod-valid-resources.yaml
apiVersion: v1
kind: Pod
metadata:
  name: valid-pod
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      requests:
        cpu: "150m"
        memory: "95Mi"
      limits:
        cpu: "180m"
        memory: "100Mi"