首页/云/Kubernetes 速查/PriorityClass 与 Pod 优先级
调度与资源52 条

PriorityClass 与 Pod 优先级

用 PriorityClass 声明优先级数值(越大越优先):调度队列先高后低,资源紧张时高优先级可抢占低优先级 Pod。

Kubernetes 速查云更新于 2026-10-13

优先级决定谁先被满足

优先级类给工作负载一个数值:数值越大越优先。调度时队列按优先级排序,高优先级副本先获得资源;集群资源紧张时,高优先级工作负载可以抢占低优先级工作负载的配额,被抢占的副本进入等待状态等待重新调度。这是一把双刃剑,用错会造成在线服务被离线任务挤掉。

基本信息

所属接口组scheduling.k8s.io/v1
数值含义数值越大优先级越高
全局默认全集群只应有一个默认优先级类
系统内置控制面与节点关键组件使用更高数值
抢占后果被抢占的副本被终止并重新排队

典型使用场景

  • 为在线核心服务设置高优先级,保证资源紧张时优先获得配额
  • 为离线批处理设置低优先级,使用集群空闲容量
  • 为监控与日志组件设置中间优先级,避免被完全挤掉
  • 多团队共用集群时用优先级表达业务重要性
  • 排查副本被突然终止:确认是否发生了抢占

声明与使用

声明与使用
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: business-critical
value: 1000000          # 数值越大越优先
globalDefault: false    # 不要随意设为全局默认
description: core online services
---
spec:
  template:
    spec:
      priorityClassName: business-critical

查看

查看
kubectl get priorityclass                                  # 现有优先级类与数值
kubectl get pod web-x -o jsonpath='{.spec.priorityClassName} {.spec.priority}'
kubectl get events -A --field-selector reason=Preempted | tail -10   # 抢占记录
kubectl describe pod batch-xxx | grep -i -A3 'Preempt'

分层建议

层级典型对象取值思路
系统关键控制面与节点组件使用内置最高层,不随意改动
在线核心对外业务服务高于批处理,低于系统组件
常规业务内部服务与中间件中间层,与在线核心拉开差距
离线任务批处理与数据任务最低层,利用空闲容量
优先级越高越容易被满足,但抢占会终止正在运行的副本。为在线服务配置高优先级时,应同时确认副本数与中断预算能承受被抢占带来的波动。
把批处理任务的优先级设得高于在线服务,资源紧张时被挤掉的会是在线副本,故障表现与业务高峰重合,排查时很容易误判成流量问题。

易错点

  • 离线任务优先级高于在线服务:抢占挤掉在线副本,故障时间点与批处理窗口重合
  • 随意设置全局默认优先级:所有未声明的负载都被抬高,分层设计失效
  • 数值贴得过于接近:层级差不足时抢占行为难以预测
  • 忽略被抢占事件:副本被终止却没有排查方向,误以为是崩溃

数据来源与参考

  • Kubernetes 官方文档 · Pod 优先级与抢占
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌