ydswin

忘记背后,努力面前的,向着标杆直跑

导航

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指定优先级。

posted on 2024-03-02 18:51  dashery  阅读(442)  评论(0编辑  收藏  举报