PriorityClass 是 Kubernetes 中用于定义 Pod 调度优先级的集群级资源,它通过数值(value)表示优先级高低,数值越大优先级越高。当集群资源不足时,调度器会优先调度高优先级的 Pod,并可能驱逐低优先级的 Pod 以腾出资源,从而确保关键业务在资源紧张时仍能正常运行。


实验要求

  • 请执行以下任务:
    • 为用户工作负载创建一个名为 high-priority 的新 PriorityClass ,其值比用户定义的现有最高优先级类值小一。
    • 修改在 priority namespace 中运行的现有 busybox-logger Deployment ,以使用 high-priority 优先级类。
    • 确保 busybox-logger Deployment 在设置了新优先级类后成功部署。
  • 请勿修改在 priority namespace 中运行的其他 Deployment,否则可能导致分数降低。

参考链接: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/
难度:⭐⭐


# 0. 环境确认

# 1. 查找用户自定义 priorityClass(pc)


kubectl get priorityclass

其中 system-cluster-criticalsystem-node-critical 是集群默认带的,而最有一个 max-user-priority 是用户自定义的。其值为 1000000000(十位数),所以小一就是九个 9(999999999)

# 2 .创建 pc.yaml 并应用

# 3. 修改 deployment


kubectl edit deployment busybox-logger -n priority

spec.template.spec 中添加:priorityClassName: high-priority

# 4. 验证

真正考试时,一开始这个 Pod 是非 Running 的异常状态。等修改完上一步后,大约等 2 分钟,新生成的 Pod busybox-logger 会是 Running 状态。


# 补充内容

# Pod 优先级和抢占

Pod 可以有优先级。 优先级表示一个 Pod 相对于其他 Pod 的重要性。 如果一个 Pod 无法被调度,调度程序会尝试抢占驱逐)较低优先级的 Pod, 以使悬决 Pod 可以被调度。

特性

非抢占式

抢占式

preemptionPolicy

Never

PreemptLowerPriority (默认)

行为

资源不足时等待

资源不足时驱逐低优先级 Pod

安全性

✅ 高(不影响其他 Pod)

⚠️ 低(可能影响其他 Pod)

适用场景

重要但不紧急的任务

关键任务(必须立即运行)


apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority-nonpreempting
value: 1000000
preemptionPolicy: Never        # 抢占式配置:PreemptLowerPriority
globalDefault: false
description: "This priority class will not cause other pods to be preempted."