1
votes

In Kubernetes we can set the priority of a pod to Guaranteed, Burstable or Best-Effort base on requests and limits. Another method to assign priorities in Kubernetes is to define a priorityClass object and assign a priorityClassName to a pod. How are these methods different and when we have to choose one method over another? According to https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#interactions-of-pod-priority-and-qos:

The scheduler’s preemption logic does not consider QoS when choosing preemption targets. Preemption considers Pod priority and attempts to choose a set of targets with the lowest priority.

So if the Kubernetes has to choose between a pod with Guaranteed QoS which has a lower "priorityClass" Value than a Burstable pod, does it put the Guaranteed pod in Preempting state?

2

2 Answers

3
votes

Quality of Service determines scheduling and eviction priority of pods. When a pod is not given any resources requests/ limits it is considered as low-priority pod (best effort). If node is out of resources it is the first pod to be evicted.

Medium priority (burstable) when a pod has any resource/limits specified (does not meet guaranteed class requirements).

Highest priority (guaranteed) when a pod has requests and limits set to the same value (both CPU and memory).

PriorityClass is used to determine pod priority when it comes to eviction. Sometimes you may want one pod to be evicted before another pod. Priority is described by integer in it's value field and the higher the value, the higher the priority.

When Pod priority is enabled, the scheduler orders pending Pods by their priority and a pending Pod is placed ahead of other pending Pods with lower priority in the scheduling queue. If there are no nodes with resources to satisfy high-priority node it will evict pods with lower priority. The highest priority is system-node-critical.

  • QoS is used to control and manage resources on the node among the pods. QoS eviction happens when there are no available resources on the node.
  • The scheduler considers the PriorityClass of the Pod before the QoS. It does not attempt to evict Pods unless higher-priority Pods need to be scheduled and the node does not have enough room for them.
  • PriorityClass- when pods are preempted, PriorityClass respects graceful termination period but does not guarantee pod disruption budget to be honored.
0
votes

The scheduler would simply ignore the QoS as mentioned. Preemption only takes into consideration the priorityClass, QoS has not effect here.