但在有时候,我们希望的是这样一个场景。当一个高优先级的 Pod 调度失败后,该 Pod 并
不会被“搁置”,而是会“挤走”某个 Node 上的一些低优先级的 Pod 。这样就可以保证
这个高优先级 Pod 的调度成功。这个特性,其实也是一直以来就存在于 Borg 以及 Mesos
等项目里的一个基本功能。
而在 Kubernetes 里,优先级和抢占机制是在 1.10 版本后才逐步可用的。要使用这个机
制,你首先需要在 Kubernetes 里提交一个 PriorityClass 的定义,如下所示:
上面这个 YAML 文件,定义的是一个名叫 high-priority 的 PriorityClass,其中 value 的
值是 1000000 (一百万)。
Kubernetes 规定,优先级是一个 32 bit 的整数,最大值不超过 1000000000(10 亿,
1 billion),并且值越大代表优先级越高。而超出 10 亿的值,其实是被 Kubernetes 保留
下来分配给系统 Pod 使用的。显然,这样做的目的,就是保证系统 Pod 不会被用户抢占
掉。
而一旦上述 YAML 文件里的 globalDefault 被设置为 true 的话,那就意味着这个
PriorityClass 的值会成为系统的默认值。而如果这个值是 false,就表示我们只希望声明使
用该 PriorityClass 的 Pod 拥有值为 1000000 的优先级,而对于没有声明 PriorityClass
的 Pod 来说,它们的优先级就是 0。
在创建了 PriorityClass 对象之后,Pod 就可以声明使用它了,如下所示:
1
2
3
4
5
6
7
apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for high priority service pods only."
文档被以下合辑收录
评论