1 定义
优先级可以作为除QOS之外另一个标识Pod重要程度的属性。在集群中若Pod PreemitionPodA
使用了抢占式priorityClass,如果该pod在集群中无法调度,则scheduler会尝试抢占驱逐低优先级的pod,以使PreemitionPodA完成调度。
2 priorityClass的基本结构
name: 优先级类的名称,用于标识该类。
value: 优先级的数值,数值越大,优先级越高,最大值为1000000000。
globalDefault: 是否将该优先级类设为全局默认,即在没有为Pod指定PriorityClass的情况下使用该类的优先级。
description: 对优先级类的描述。
3 priorityClass分类
3.1 非抢占式priorityClass
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-nonpreempting //priority名字
value: 1000000 //priority 对应的值,自定义值不能大于1000000
preemptionPolicy: Never //声明此Priority是否为抢占式,可选值:Never(非抢占时代)、PreemptLowerPriority(抢占式)。 如果未设置,则默认为PreemptLowerPriority。
globalDefault: false //指定是否应将此 PriorityClass 视为没有任何优先级类的 Pod 的默认优先级。 只有一个 PriorityClass 可以标记为 globalDefault。 但是,如果存在多个 PriorityClasses 且其 globalDefault 字段设置为 true, 则将使用此类全局默认 PriorityClasses 的最小值作为默认优先级。
description: "This priority class will not cause other pods to be preempted."
3.2 抢占式priorityClass
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-nonpreempting //priority名字
value: 1000000 //priority 对应的值,自定义值不能大于1000000
preemptionPolicy: PreemptLowerPriority //声明此Priority是否为抢占式,可选值:Never(非抢占时代)、PreemptLowerPriority(抢占式)。 如果未设置,则默认为 PreemptLowerPriority。
globalDefault: false //指定是否应将此 PriorityClass 视为没有任何优先级类的 Pod 的默认优先级。 只有一个 PriorityClass 可以标记为 globalDefault。 但是,如果存在多个 PriorityClasses 且其 globalDefault 字段设置为 true, 则将使用此类全局默认 PriorityClasses 的最小值作为默认优先级。
description: "This priority class will cause other pods to be preempted."
4 使用
4.1 定义priorityClass
使用priorityClass之前要在集群中进行声明,以下是一个自定义priorityclass的定义文件。另外集群中会默认创建两个priorityClass system-node-critical以及system-cluster-critical 优先级类。
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 9000
globalDefault: false
description: "This is a custom priorityClass"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: low-priority
value: 2000
globalDefault: false
description: "This is a custom priorityClass"
上述文件中声明了两个priorityClass,分别为 high-priority 和 low-priority,优先级分别为9000和2000,且都为抢占式。
4.2 声明pod
apiVersion: v1
kind: Pod
metadata:
name: high-priority-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
priorityClassName: high-priority
在此案例中,pod high-priority-pod使用优先级high-priority。
4.3 验证
使用命令 kubectl describe pod high-priority-pod 或者 kubectl get pod high-priority-pod -o jsonpath=‘{.spec.priority}’,验证是否优先级为9000。
2469

被折叠的 条评论
为什么被折叠?



