Pod的优先级(priorityClass)和抢占策略(preemptionPolicy)
Pod优先级
Pod优先级是一个用于指示Pod相对重要程度的整数值。优先级高的Pod在调度时会优先被考虑,并且在资源不足时,优先级较低的Pod可能会被驱逐以释放资源给优先级较高的Pod。Pod优先级的值范围是从0到1000000000,其中0是默认优先级,而大于1000000000的优先级值预留给系统级的关键Pod。
在定义Pod时,可以通过在Pod规范中设置priorityClassName
来指定Pod的优先级类。优先级类是一个资源对象,它包含了一个或多个Pod的优先级值。Pod将根据其所属的优先级类来获得相应的优先级。如果没有明确指定优先级类,Pod将使用默认优先级0。
抢占策略
抢占策略是指在资源不足时,调度器是否允许驱逐低优先级的Pod以释放资源给高优先级的Pod。抢占策略可以通过设置Pod的preemptionPolicy
字段来指定。
Never
:表示Pod不会被驱逐,即使资源不足也无法被调度。这意味着Pod将一直处于等待状态,直到有足够的资源可用。PreemptLowerPriority
:表示如果资源不足,调度器会尝试驱逐优先级较低的Pod以释放资源给当前Pod。这样可以确保高优先级的Pod能够顺利运行。
需要注意的是,抢占策略只适用于具有不同优先级的Pod之间。如果两个Pod具有相同的优先级,那么它们之间不会发生抢占。
Pod优先级和抢占策略可以通过在Pod的配置文件(YAML)中设置相应的字段来实现。下面是一个示例YAML文件,展示了如何为Pod指定优先级和抢占策略:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
# 其他容器配置
priorityClassName: high-priority # 指定Pod优先级类
preemptionPolicy: PreemptLowerPriority # 指定抢占策略
# 其他Pod配置
在这个示例中,priorityClassName
字段用于指定Pod的优先级类。high-priority
是一个已经定义的PriorityClass的名称,它包含了Pod的优先级值。你需要确保已经创建了相应的PriorityClass资源对象,并且其名称与priorityClassName
字段的值匹配。
preemptionPolicy
字段用于指定Pod的抢占策略。在这个示例中,PreemptLowerPriority
表示如果资源不足,Pod将尝试驱逐优先级较低的Pod以释放资源。
请注意,Pod优先级和抢占策略在Kubernetes 1.11版本之后默认启用。如果你使用的是较旧的版本,可能需要为kube-scheduler指定--feature-gates=PodPriority=true
来启用这些功能。
另外,你还需要确保PriorityClass资源对象已经正确创建,并且其优先级值设置合理。PriorityClass可以通过以下YAML文件进行创建:
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000 # 设置优先级值
globalDefault: false # 是否设置为默认优先级类
description: "This priority class should be used for high priority pods." # 描述信息
在这个示例中,high-priority
是一个PriorityClass的名称,value
字段设置了该优先级类的优先级值。globalDefault
字段指示是否将该PriorityClass设置为默认优先级类,description
字段提供了关于该优先级类的描述信息。
创建PriorityClass后,你可以在Pod的配置文件中通过priorityClassName
字段引用它,从而为Pod指定优先级。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18049073