优先级和抢占机制解决的是 Pod 调度失败之后应该怎么办的问题
默认情况下,当一个Pod调度失败之后,它会被先 搁置,直到 Pod 被更新或者集群状态发生变化时,调度器才会重新调度这个Pod。
但是有时候我们会希望让某个优先级较高的Pod,挤走 某个优先级较低的Pod
首先需要在Kubernetes里提交一个 PriorityClass的定义
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority-10000
value: 10000
globalDefault: false
description: "my desc 10000"
如果不标识 PriorityClass ,那么它的优先级是 0
如果你设置了 globalDefault: false 那么这个PC的值就会变成系统的默认值
我们的集群状态是 3个节点,每个有4内核,8GB内存
我部署3个nginx,标记每个需要3个内核
resources:
limits:
cpu: 3
memory: 2Gi
requests:
cpu: 3
memory: 2Gi
这样我们就把所有的cpu资源都吃掉了
然后再来部署一个用来竞争的nginx
同样的requests同样的limits,在不使用优先级和抢占机制时,调度器是无法完成调度的
加入优先级之后的情况
最终 nginx1 挤掉了 所有的 nginx0