0
点赞
收藏
分享

微信扫一扫

Pod 优先级和抢占


介绍

Pod 可以有优先级。 优先级表示一个 Pod 相对于其他 Pod 的重要性。 如果一个 Pod 无法被调度,调度程序会尝试抢占(驱逐)较低优先级的 Pod, 使新的 Pod 可以被调度。
在一个并非所有用户都是可信的集群中,恶意用户可能以最高优先级创建 Pod, 导致其他 Pod 被驱逐或者无法被调度。 管理员可以使用 ResourceQuota 来阻止用户创建高优先级的 Pod。

优先级与抢占

优先级是什么?

优先级代表一个Pod相对其他Pod的重要性

优先级有什么用

优先级可以保证重要的Pod被调用运行

如何使用优先级和抢占

  • 配置优先级类PriorityClass
  • 创建Pod是为其设置对应的优先级

PriorityClass

PriorityClass是一个全局资源对象,它定义了从优先级类名称到优先级整数值的映射。优先级在values字段中指定,可以设置小于10亿的整数值,值越大,优先级越高
PriorityClass还有两个可选字段:

  • globaDefault:用于设置默认优先级状态,如果没有任何优先级设置,Pod的优先级为零
  • description:用来配置描述性信息,告诉用户优先级的用途

优先级策略

  • 非抢占优先:指的是在调度阶段优先进行调度分配,一旦容器调度完成就不可以抢占,资源不足时,只能等待,对应 preemptionPolicy: Never
  • 抢占优先:强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占(删除)较低优先级的Pod的资源,来保证高优先级Pod的运行,对应 preemptionPolicy: PreemptLowerPriority

实践

PriorityClass

声明

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority-nonpreempting
value: 1000000
preemptionPolicy: Never(Never 表示非抢占,PreemptLowerPriority表示抢占)
globalDefault: false
description: "This priority class will not cause other pods to be preempted."

pod 使用

kind: Pod
apiVersion: v1
metadata:
  name: php2
spec:
  nodeSelector:
    kubernetes.io/hostname: node-01
  priorityClassName: high-priority-nonpreempting      # 指定优先级的名称
  containers:
  - name: php
    image: myos:phpfpm
    resources:
      requests:
        cpu: "1500m"

参考

https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/


举报

相关推荐

0 条评论