Bird
Raised Fist0
Kubernetesdevops~10 mins

Priority classes for critical workloads in Kubernetes - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Priority classes for critical workloads
Define PriorityClass
Assign PriorityClass to Pod
Scheduler checks Pod priority
If resources scarce
Yes No
Evict lower priority Pods
Critical workload runs
This flow shows how defining a PriorityClass and assigning it to a Pod affects scheduling and eviction decisions for critical workloads.
Execution Sample
Kubernetes
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
---
apiVersion: v1
kind: Pod
metadata:
  name: critical-pod
spec:
  priorityClassName: high-priority
  containers:
  - name: app
    image: nginx
Defines a high priority class and assigns it to a critical Pod to ensure it is scheduled before lower priority Pods.
Process Table
StepActionPod PriorityScheduler DecisionResult
1Define PriorityClass 'high-priority'--PriorityClass created with value 1000000
2Create Pod with priorityClassName 'high-priority'1000000-Pod marked with high priority
3Scheduler checks available resources--Resources are limited
4Scheduler compares Pod priority with running Pods1000000 vs 1000Pod priority higherLower priority Pod evicted
5Scheduler schedules critical Pod1000000ScheduledCritical Pod runs
6No more Pods to schedule--Scheduling complete
💡 All Pods scheduled or evicted based on priority; critical Pod runs successfully
Status Tracker
VariableStartAfter Step 2After Step 4Final
PriorityClass 'high-priority' valueundefined100000010000001000000
Pod 'critical-pod' priorityundefined100000010000001000000
Running Pods count5 (mixed priorities)54 (one low priority evicted)4
Key Moments - 2 Insights
Why does the scheduler evict a running Pod when a new Pod with higher priority is created?
The scheduler evicts lower priority Pods to free resources for higher priority Pods, as shown in step 4 where the Pod with priority 1000000 causes eviction of a Pod with priority 1000.
What happens if two Pods have the same priority?
If priorities are equal, the scheduler uses other factors like creation time or resource requests to decide scheduling, but priority classes mainly affect eviction order as seen in the execution table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the priority value assigned to the critical Pod at step 2?
A1000
B1000000
C0
DUndefined
💡 Hint
Check the 'Pod Priority' column at step 2 in the execution table.
At which step does the scheduler evict a lower priority Pod?
AStep 3
BStep 5
CStep 4
DStep 6
💡 Hint
Look for the 'Scheduler Decision' column mentioning eviction in the execution table.
If the critical Pod had a lower priority than running Pods, what would happen?
AIt might be pending or evicted itself
BIt would evict higher priority Pods
CIt would be scheduled immediately
DScheduler ignores priority
💡 Hint
Refer to the scheduler behavior in steps 3 and 4 about resource scarcity and eviction.
Concept Snapshot
PriorityClass defines importance of Pods.
Higher priority Pods get scheduled first.
Lower priority Pods can be evicted to free resources.
Assign PriorityClass to Pod via priorityClassName.
Critical workloads use high priority to ensure running.
Full Transcript
Priority classes in Kubernetes help the scheduler decide which Pods are more important. You create a PriorityClass with a numeric value. Then, assign it to a Pod using priorityClassName. When resources are tight, the scheduler evicts lower priority Pods to make room for higher priority ones. This ensures critical workloads run reliably. The execution flow shows defining a PriorityClass, creating a Pod with it, scheduler checking resources, evicting lower priority Pods, and scheduling the critical Pod.

Practice

(1/5)
1. What does a higher value in a Kubernetes PriorityClass mean?
easy
A. The pod will be scheduled on nodes with more memory.
B. The pod will use less CPU resources.
C. The pod has a higher priority and is more important.
D. The pod will restart automatically on failure.

Solution

  1. Step 1: Understand PriorityClass value meaning

    In Kubernetes, the value field in a PriorityClass defines the importance of the pod. Higher values mean higher priority.
  2. Step 2: Relate priority to pod importance

    Pods with higher priority are considered more critical and get scheduled before lower priority pods.
  3. Final Answer:

    The pod has a higher priority and is more important. -> Option C
  4. Quick Check:

    Higher value = higher priority [OK]
Hint: Higher PriorityClass value means more important pod [OK]
Common Mistakes:
  • Confusing priority with resource limits
  • Thinking priority controls pod restart behavior
  • Assuming priority affects node selection by memory
2. Which of the following is the correct YAML snippet to define a PriorityClass named high-priority with value 1000 and globalDefault: false?
easy
A. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000 globalDefault: false description: "High priority class"
B. apiVersion: v1 kind: PriorityClass metadata: name: high-priority priority: 1000 default: false
C. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000 globalDefault: true description: "High priority class"
D. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: "1000" globalDefault: false description: "High priority class"

Solution

  1. Step 1: Check correct apiVersion and kind

    The correct apiVersion for PriorityClass is scheduling.k8s.io/v1 and kind is PriorityClass.
  2. Step 2: Verify fields and types

    The field for priority is value (integer), not priority. globalDefault is a boolean. The value must be an integer, not a string.
  3. Final Answer:

    YAML with apiVersion scheduling.k8s.io/v1, kind PriorityClass, value 1000 as integer, globalDefault false -> Option A
  4. Quick Check:

    Correct apiVersion and value field [OK]
Hint: Use 'value' as integer and correct apiVersion [OK]
Common Mistakes:
  • Using wrong apiVersion or kind
  • Using 'priority' instead of 'value'
  • Setting value as string instead of integer
3. Given this PriorityClass YAML and pod spec, what priority value will the pod have?
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: critical
value: 2000
globalDefault: false
description: "Critical priority"

---

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  priorityClassName: critical
  containers:
  - name: app
    image: nginx
medium
A. 1000
B. 2000
C. 0
D. Pod will fail to schedule

Solution

  1. Step 1: Identify PriorityClass used by pod

    The pod specifies priorityClassName: critical, so it uses the PriorityClass named 'critical'.
  2. Step 2: Find priority value of 'critical'

    The PriorityClass 'critical' has value: 2000, so the pod's priority is 2000.
  3. Final Answer:

    2000 -> Option B
  4. Quick Check:

    Pod priority matches PriorityClass value [OK]
Hint: Pod priority equals PriorityClass value it references [OK]
Common Mistakes:
  • Assuming default priority 0 without PriorityClass
  • Confusing priorityClassName with container image
  • Thinking pod fails without globalDefault
4. You created a PriorityClass with globalDefault: true but pods without priorityClassName still have priority 0. What is the likely cause?
medium
A. The PriorityClass value is set to 0.
B. globalDefault only works for DaemonSets, not pods.
C. Pods must specify priorityClassName to get any priority.
D. The PriorityClass resource was not applied correctly.

Solution

  1. Step 1: Understand globalDefault behavior

    A PriorityClass with globalDefault: true sets the default priority for pods without a specified class.
  2. Step 2: Check why pods have priority 0

    If pods still have priority 0, likely the PriorityClass was not created or applied properly, so Kubernetes does not see it as default.
  3. Final Answer:

    The PriorityClass resource was not applied correctly. -> Option D
  4. Quick Check:

    globalDefault requires correct PriorityClass creation [OK]
Hint: Check if PriorityClass resource is applied when globalDefault fails [OK]
Common Mistakes:
  • Assuming pods need priorityClassName despite globalDefault
  • Setting globalDefault on PriorityClass with value 0
  • Believing globalDefault only applies to DaemonSets
5. You want to ensure that all pods without a specified PriorityClass get a default priority of 500, but also have a critical class with priority 2000. Which YAML snippet correctly sets this up?
hard
A. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: default-priority value: 500 globalDefault: true description: "Default priority" --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: critical value: 2000 globalDefault: false description: "Critical priority"
B. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: critical value: 2000 globalDefault: true description: "Critical priority" --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: default-priority value: 500 globalDefault: false description: "Default priority"
C. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: default-priority value: 500 globalDefault: false description: "Default priority" --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: critical value: 2000 globalDefault: true description: "Critical priority"
D. apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: default-priority value: 500 globalDefault: true description: "Default priority" --- apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: critical value: 2000 globalDefault: true description: "Critical priority"

Solution

  1. Step 1: Identify globalDefault usage

    Only one PriorityClass can have globalDefault: true. This sets the default priority for pods without a class.
  2. Step 2: Assign correct priorities

    Set the default-priority class with value 500 and globalDefault true. Set critical class with value 2000 and globalDefault false.
  3. Final Answer:

    Default priority 500 with globalDefault true, critical 2000 without globalDefault -> Option A
  4. Quick Check:

    Only one globalDefault PriorityClass allowed [OK]
Hint: Only one PriorityClass can have globalDefault true [OK]
Common Mistakes:
  • Setting globalDefault true on multiple PriorityClasses
  • Confusing which class should be default
  • Using same priority value for default and critical