在Kubernetes中,我们可以根据请求和限制将pod的优先级设置为Guaranteed
、Burstable
或Best-Effort
。在Kubernetes中分配优先级的另一种方法是定义priorityClass
对象并将priorityClassName
分配给pod。这些方法有何不同?当我们不得不选择一种方法而不是另一种方法时?根据https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#interactions-pod优先级和qos:
调度程序的抢占逻辑在选择抢占目标时不考虑QoS。抢占会考虑Pod的优先级,并尝试选择一组优先级最低的目标。
因此,如果Kubernetes必须在具有Guaranteed
QoS的pod(其"priorityClass"值低于Burstable
pod(之间进行选择,它是否会将Guaranteed
pod置于抢占状态?
Quality of Service
确定pod的调度和驱逐优先级。当一个pod没有得到任何资源请求/限制时,它被认为是low-priority pod (best effort)
。如果节点资源不足,它将是第一个被逐出的pod。
当pod指定了任何资源/限制(不满足保证类要求(时,Medium priority (burstable)
。
当pod的请求和限制设置为相同值(CPU和内存(时,Highest priority (guaranteed)
。
PriorityClass
用于在驱逐时确定pod优先级。有时,您可能希望一个吊舱在另一个吊舱之前被驱逐。优先级在其value
字段中由整数描述,值越高,优先级越高。
当Pod优先级被启用时,调度程序根据其优先级对未决Pod进行排序,并且在调度队列中,一个未决Pod被放置在优先级较低的其他未决Pod之前。如果没有资源满足高优先级节点的节点,它将驱逐优先级较低的pod。最高优先级为system-node-critical
。
QoS
用于控制和管理豆荚。当上没有可用资源时,会发生QoS逐出节点- 调度器在QoS之前考虑Pod的CCD_ 17。它不会试图驱逐Pod,除非需要调度优先级更高的Pod,并且节点没有足够的空间容纳它们
PriorityClass
-当吊舱被抢占时,PriorityClass
尊重优雅的终止期,但不保证吊舱中断预算得到遵守
调度程序会忽略前面提到的QoS。抢占仅考虑priorityClass
,QoS在此不起作用。