Bird
Raised Fist0
Kubernetesdevops~5 mins

Priority classes for critical workloads in Kubernetes - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is a PriorityClass in Kubernetes?
A PriorityClass is a Kubernetes resource that defines the priority level for pods. It helps the system decide which pods to schedule or evict first when resources are limited.
Click to reveal answer
intermediate
How does Kubernetes use PriorityClasses during resource contention?
Kubernetes schedules pods with higher priority classes before lower priority ones. If resources run out, it evicts lower priority pods first to make room for higher priority pods.
Click to reveal answer
beginner
What is the significance of the 'value' field in a PriorityClass?
The 'value' field is a number that defines the priority level. Higher numbers mean higher priority. For example, a PriorityClass with value 1000 is more important than one with 500.
Click to reveal answer
intermediate
Can you create a PriorityClass for a critical workload? What key fields must it include?
Yes. A PriorityClass must include: metadata.name (unique name), value (priority number), and optionally description and globalDefault (if it should be default).
Click to reveal answer
beginner
What happens if a pod does not specify a PriorityClass?
If a pod does not specify a PriorityClass, it gets the default priority, which is usually zero or the globalDefault PriorityClass if set. It will be scheduled and evicted with lower priority compared to pods with higher PriorityClasses.
Click to reveal answer
What does a higher 'value' in a PriorityClass mean?
AHigher priority for scheduling and eviction decisions
BLower priority for scheduling
CNo effect on pod scheduling
DOnly affects pod labels
Which pods are evicted first when the node runs out of resources?
APods with the lowest PriorityClass value
BPods with the highest PriorityClass value
CPods with the most CPU usage
DPods created last
What is the purpose of the 'globalDefault' field in a PriorityClass?
AMakes the PriorityClass apply only to global pods
BMarks this PriorityClass as the default for pods without a specified priority
CDisables the PriorityClass
DSets the priority to zero
How do you assign a PriorityClass to a pod?
AUse an annotation 'priority-class' on the pod
BSet a label 'priorityClass' on the pod
CSpecify 'priorityClassName' in the pod spec
DPriorityClass is assigned automatically
What happens if two pods have the same PriorityClass value?
ABoth pods are scheduled simultaneously always
BPods with the same value are evicted immediately
CPods with the same value cannot exist
DKubernetes uses other factors like creation time to decide scheduling
Explain how PriorityClasses help Kubernetes manage critical workloads during resource shortages.
Think about how Kubernetes decides which pods to keep or remove when resources are tight.
You got /4 concepts.
    Describe the steps to create and use a PriorityClass for a critical workload pod.
    Focus on resource creation and pod specification.
    You got /4 concepts.

      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