CKA – Priority Class的使用

当worker node部署着random-pod和critical-pod的时候,worker node是资源刚好用完,那么新需要部署的prod-pod就无法部署,这个使用就需要淘汰random-pod来让prod-pod能够部署。我们可以设置prod-pod为high priority 和 random-pod为low priority 那么kubernetes就会先淘汰random-pod
PriorityClass的执行功能
- 部署循序排列:如果同时部署low priority和high priority等级的deployment,那么Kubernetes会优先部署high priority的先,然后才部署low priority直到资源使用光
- 抢占策略:如果high priority不够资源部署的话,那么kubernetes就会释放掉low priority的pod先,好让worker node足够资源部署high priority的pod
如何创建PriorityClass
1. 使用命令行创建priorityclass
【如果忘了怎么用可以用--help】
kubectl create priorityclass --help

2. 使用命令行输出yaml
【输出yaml】
kubectl create priorityclass low-priority --value=10 --dry-run=client -o yaml
【把输出的yaml存入文件内】
kubectl create priorityclass low-priority --value=10 --dry-run=client -o yaml > priorityclass.yaml
使用案例
1. 创建low-priority和high-priority的priorityclass
– globalDefault为 true 的话,就是所有未指定 priorityClassName 的 Pod 都会默认使用该 PriorityClass 所定义的优先级值。
– globalDefault为true的话,只能选择一个而已
apiVersion: scheduling.k8s.io/v1
globalDefault: true
kind: PriorityClass
metadata:
name: low-priority
preemptionPolicy: PreemptLowerPriority
value: 10
apiVersion: scheduling.k8s.io/v1
globalDefault: false
kind: PriorityClass
metadata:
name: high-priority
preemptionPolicy: PreemptLowerPriority
value: 100

2. 使用watch的命令查看deployment的创建和摧毁记录
kubectl get deployments -w
3. 首先创建low-priority-deployment先
kubectl apply -f low-dev.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: low-priority-deploy
spec:
replicas: 3
selector:
matchLabels:
app: low-priority-app
template:
metadata:
labels:
app: low-priority-app
spec:
priorityClassName: low-priority
containers:
- name: busybox
image: nginx
resources:
requests:
memory: "900Mi"
cpu: "30m"
4. 接着再创建high-priority-development
kubectl apply -f high-dev.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: high-priority-deploy
spec:
replicas: 3
selector:
matchLabels:
app: high-priority-app
template:
metadata:
labels:
app: high-priority-app
spec:
priorityClassName: high-priority
containers:
- name: busybox
image: nginx
resources:
requests:
memory: "900Mi"
cpu: "30m"
5. 查看结果

抢占策略的使用(preemptionPolicy)
Kubernetes preemptionPolicy
用于控制该优先级类(PriorityClass)下的 Pod 是否可以抢占(驱逐)低优先级 Pod。它共有两种可选值
- PreemptLowerPriority :允许本 PriorityClass 下的 Pod 在资源不足时,驱逐优先级比自己低的 Pod,以腾出资源进行调度。如果在设定priorityclass没有指定的话,那么默认就是使用这个策略。
- Never:所属 Pod 会像普通 Pod 一样排队,但它们不抢占优先级更低的 Pod,只能等资源“自然”释放,绝不会去踢掉别的Pod。若节点资源不足,就一直待在 Pending 状态,直到有其他 Pod 自行终止或新增节点才会被调度。
Facebook评论