Bird
Raised Fist0
Kubernetesdevops~10 mins

Resource quotas per namespace in Kubernetes - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Resource quotas per namespace
Create Namespace
↓
Define ResourceQuota YAML
↓
Apply ResourceQuota to Namespace
↓
Kubernetes Enforces Limits
↓
Pods/Resources Created Within Quota
↓
Quota Usage Updated
↓
Reject Excess Resource Requests
This flow shows how a resource quota is created and applied to a namespace, then Kubernetes enforces resource limits on pods and other objects within that namespace.
Execution Sample
Kubernetes
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: dev
spec:
  hard:
    pods: "3"
    requests.cpu: "2"
    requests.memory: "4Gi"
This YAML defines a resource quota named 'compute-quota' in the 'dev' namespace limiting pods to 3, CPU requests to 2 cores, and memory requests to 4Gi.
Process Table
StepActionNamespace StateQuota UsageResult
1Create namespace 'dev'Namespace 'dev' created0 pods, 0 CPU, 0 MemoryNamespace ready
2Apply ResourceQuota 'compute-quota'Quota set: pods=3, CPU=2, Memory=4Gi0 pods, 0 CPU, 0 MemoryQuota active
3Create Pod1 requesting 1 CPU, 1Gi memoryPods=1CPU=1, Memory=1GiPod1 created
4Create Pod2 requesting 1 CPU, 2Gi memoryPods=2CPU=2, Memory=3GiPod2 created
5Create Pod3 requesting 1 CPU, 1Gi memoryPods=2CPU=2, Memory=3GiRejected: CPU quota exceeded
6Delete Pod1Pods=1CPU=1, Memory=2GiPod1 deleted, quota freed
7Create Pod3 requesting 1 CPU, 1Gi memoryPods=2CPU=2, Memory=3GiPod3 created
8Create Pod4 requesting 1 CPU, 3Gi memoryPods=2CPU=2, Memory=3GiRejected: Memory quota exceeded
9Create Pod4 requesting 1 CPU, 1Gi memoryPods=2CPU=2, Memory=3GiRejected: CPU quota exceeded
💡 Pods quota limit of 3 and CPU/memory limits enforced, excess requests rejected
Status Tracker
VariableStartAfter Step 3After Step 4After Step 5After Step 6After Step 7After Step 8After Step 9
Pods Count01221222
CPU Requests (cores)01221222
Memory Requests (Gi)01332333
Key Moments - 3 Insights
Why was Pod3 creation rejected at step 5 even though pods quota was not exceeded?
At step 5, CPU requests would exceed the quota of 2 cores (would become 3), so Kubernetes rejected Pod3. See execution_table row 5.
Why can Pod3 be created after deleting Pod1 at step 7?
Deleting Pod1 frees CPU and memory quota, so Pod3 fits within limits now. See execution_table rows 6 and 7.
Why was Pod4 rejected at step 9 despite requesting only 1 CPU and 1Gi memory?
CPU quota is 2 cores total. After step 7 (and 8), 2 CPU cores are in use by Pod2 and Pod3. Adding Pod4's 1 CPU exceeds it. See execution_table row 9.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the CPU requests usage after step 4?
A1 core
B2 cores
C3 cores
D0 cores
💡 Hint
Check the 'Quota Usage' column at step 4 in the execution_table.
At which step does the first pod rejection occur?
AStep 5
BStep 7
CStep 3
DStep 9
💡 Hint
Check the 'Result' column in the execution_table for the first 'Rejected'.
If Pod2 requested only 0.5 CPU instead of 1 CPU, what would happen at step 5?
APod3 creation would still be rejected
BPod2 creation would be rejected
CPod3 creation would succeed
DPods quota would be exceeded
💡 Hint
Consider CPU usage after step 4 and how it affects step 5 in execution_table.
Concept Snapshot
Resource Quotas limit resource use per namespace in Kubernetes.
Define a ResourceQuota YAML with 'hard' limits.
Apply it to a namespace to enforce limits on pods, CPU, memory.
Kubernetes rejects resource requests exceeding quota.
Quota usage updates dynamically as pods are created/deleted.
Full Transcript
Resource quotas in Kubernetes control how many resources like pods, CPU, and memory can be used in a namespace. First, you create a namespace, then define a ResourceQuota YAML specifying limits. When you apply this quota to the namespace, Kubernetes tracks resource usage. If you try to create pods or request resources beyond the quota, Kubernetes rejects those requests. Deleting pods frees quota, allowing new pods within limits. This ensures fair resource sharing and prevents one namespace from using too much.

Practice

(1/5)
1. What is the main purpose of a ResourceQuota in a Kubernetes namespace?
easy
A. To limit the amount of resources like CPU and memory used in that namespace
B. To increase the CPU speed of all pods in the namespace
C. To delete unused pods automatically
D. To backup data stored in the namespace

Solution

  1. Step 1: Understand ResourceQuota purpose

    A ResourceQuota sets limits on resource usage like CPU, memory, pods, and storage within a namespace.
  2. Step 2: Compare options with purpose

    Only To limit the amount of resources like CPU and memory used in that namespace correctly describes limiting resource usage. Other options describe unrelated actions.
  3. Final Answer:

    To limit the amount of resources like CPU and memory used in that namespace -> Option A
  4. Quick Check:

    ResourceQuota limits resources = D [OK]
Hint: ResourceQuota controls resource limits per namespace [OK]
Common Mistakes:
  • Thinking ResourceQuota speeds up pods
  • Confusing quotas with backups
  • Assuming quotas delete pods automatically
2. Which of the following is the correct YAML snippet to define a CPU limit of 2 cores in a ResourceQuota?
easy
A. hard: limits.cpu: "2"
B. resources: limits: cpu: "2"
C. hard: cpu: "2"
D. hard: limits.cpu: 2

Solution

  1. Step 1: Recall ResourceQuota syntax for limits

    ResourceQuota uses the hard field with resource names like limits.cpu as keys and string values.
  2. Step 2: Check each option's syntax

    hard: limits.cpu: "2" correctly uses hard: with limits.cpu: "2". resources: limits: cpu: "2" uses wrong keys, C misses limits., D uses number instead of string.
  3. Final Answer:

    hard: limits.cpu: "2" -> Option A
  4. Quick Check:

    ResourceQuota hard limits use string values with resource keys [OK]
Hint: ResourceQuota limits use 'hard' with string values [OK]
Common Mistakes:
  • Using numeric values instead of strings
  • Omitting 'limits.' prefix in resource keys
  • Placing limits under wrong YAML keys
3. Given this ResourceQuota YAML applied to namespace dev:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: dev
spec:
  hard:
    pods: "3"
    requests.cpu: "1"
    requests.memory: "1Gi"
What happens if you try to create a 4th pod in dev namespace?
medium
A. The pod will be created normally without any error
B. The pod will be created but with limited CPU
C. The pod creation will fail due to exceeding the pod count quota
D. The pod will be created but memory will be limited to 1Gi

Solution

  1. Step 1: Understand pod count limit in ResourceQuota

    The quota limits pods to 3 in the dev namespace.
  2. Step 2: Effect of creating 4th pod

    Creating a 4th pod exceeds the pod count quota, so Kubernetes rejects the creation with an error.
  3. Final Answer:

    The pod creation will fail due to exceeding the pod count quota -> Option C
  4. Quick Check:

    Pod count quota exceeded = creation fails [OK]
Hint: Pod count quota blocks pods beyond limit [OK]
Common Mistakes:
  • Assuming pod is created with limited resources
  • Thinking quota only warns but allows creation
  • Confusing CPU/memory limits with pod count
4. You applied this ResourceQuota YAML but it fails to create:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: test-quota
  namespace: test
spec:
  hard:
    cpu: "2"
    memory: "4Gi"
What is the likely error?
medium
A. Missing 'apiVersion' field
B. Namespace 'test' does not exist
C. Values should be numbers, not strings
D. Resource keys 'cpu' and 'memory' are invalid; should use 'limits.cpu' and 'limits.memory'

Solution

  1. Step 1: Check resource keys in ResourceQuota

    ResourceQuota requires full resource names like limits.cpu or requests.memory, not just cpu or memory.
  2. Step 2: Validate YAML fields

    API version is present, namespace existence is unrelated to syntax error, and values must be strings (which they are).
  3. Final Answer:

    Resource keys 'cpu' and 'memory' are invalid; should use 'limits.cpu' and 'limits.memory' -> Option D
  4. Quick Check:

    Use full resource keys like limits.cpu [OK]
Hint: Use full resource keys like limits.cpu in quotas [OK]
Common Mistakes:
  • Using short keys like 'cpu' instead of 'limits.cpu'
  • Assuming missing namespace causes syntax error
  • Using numeric values instead of strings
5. You want to limit a namespace to 5 pods and 2Gi memory requests, but allow unlimited CPU. Which ResourceQuota YAML snippet achieves this?
hard
A. spec: hard: pods: "5" requests.memory: "2Gi" requests.cpu: "0"
B. spec: hard: pods: "5" requests.memory: "2Gi"
C. spec: hard: pods: "5" requests.memory: "2Gi" limits.cpu: "unlimited"
D. spec: hard: pods: "5" requests.memory: "2Gi" requests.cpu: "-1"

Solution

  1. Step 1: Understand ResourceQuota limits

    To limit pods and memory requests, specify those keys under hard. Omitting CPU means no limit on CPU.
  2. Step 2: Evaluate options for CPU limits

    spec: hard: pods: "5" requests.memory: "2Gi" omits CPU limits, allowing unlimited CPU. Options A, C, D try to set CPU limits with invalid or restrictive values.
  3. Final Answer:

    spec: hard: pods: "5" requests.memory: "2Gi" -> Option B
  4. Quick Check:

    Omit CPU limit to allow unlimited CPU [OK]
Hint: Omit resource in quota to allow unlimited usage [OK]
Common Mistakes:
  • Setting CPU limit to 0 or negative disables pods
  • Using 'unlimited' as a value (not valid)
  • Trying to limit CPU when unlimited is desired
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard