- step 1: 定义PriorityClass
- ">如何使用优先级和抢占
相比传统的单机部署,容器化部署在集群的方式大大提高了资源利用率,但业务上也会担心一些很key的应用无法获得资源保障。这时候就需要PriorityClass。高优先级的负载会优先调度,抢占低优先级负载的资源。
(DCE下个版本会支持界面化配置PriorityClass,当前可以通过yaml文件进行配置)
step 1: 定义PriorityClass
根据业务需要定义不同梯度的PriorityClass资源,将yaml配置导入集群(平台内任意一个导入yaml的入口),其中优先级的范围1~1000000000(数值越大优先级越高)。系统组件的数值为2000000000,而普通pod在无配置时默认的数值为0。比如创建一个10000数值和100数值的优先级资源:
step2:为业务容器设置第一步中设定好的PriorityClassName
在workload的yaml配置里配置
spec: PriorityClassName: high/low
更多原理介绍,见K8S官网链接
Pods 可以有优先级(Priority)。 优先级体现的是当前 Pod 与其他 Pod 相比的重要程度。如果 Pod 无法被调度,则 调度器会尝试抢占(逐出)低优先级的 Pod,从而使得悬决的 Pod 可被调度。
如何使用优先级和抢占
要使用优先级和抢占特性:
- 添加一个或多个 PriorityClasses 对象
- 创建 Pod 时设置其
[priorityClassName](https://kubernetes.io/zh/docs/concepts/configuration/pod-priority-preemption/#pod-priority)
为所添加的 PriorityClass 之一。 当然你也不必一定要直接创建 Pod;通常你会在一个集合对象(如 Deployment)的 Pod 模板中添加priorityClassName
。
PriorityClass 对象可以设置数值小于等于 10 亿的 32 位整数。 更大的数值保留给那些通常不可被抢占或逐出的系统 Pod。 集群管理员应该为每个优先级值映射创建一个 PriorityClass 对象。
PriorityClass
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-nonpreempting
value: 1000000
preemptionPolicy: Never
globalDefault: false
description: "This priority class will not cause other pods to be preempted."
Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority