1. Kubernetes Pod优先级与抢占式调度概述
在Kubernetes集群中,资源调度一直是影响集群效率和稳定性的关键因素。想象一下这样的场景:你的生产集群同时运行着核心支付服务和后台日志处理任务,当节点资源紧张时,你肯定希望支付服务能优先获得资源,而不是和日志任务"平等竞争"。这正是Pod优先级和抢占式调度要解决的问题。
Kubernetes 1.8版本之前,所有Pod在调度时都是"平等"的——当资源不足时,新创建的Pod只能被动等待。这就像急诊室里所有病人都按先来后到排队,突发心脏病的患者可能要在感冒患者后面等待,显然不够合理。1.8版本引入的优先级机制,相当于给Pod发放了"VIP通行证",允许重要Pod在必要时"插队"获取资源。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心概念深度解析
2.1 优先级(Priority)与抢占(Preemption)机制
优先级机制的核心是两个关键数字:
- PriorityClass中定义的value值(范围0-1亿,系统保留1亿以上)
- Pod实际使用的资源量与申请量的比值
当资源紧张时,系统会按照以下决策树进行判断:
- 首先比较PriorityClass的value值,高优先级Pod总是优先
- 当优先级相同时,比较(实际使用量/申请量)的比值
- 比值更大的Pod会被优先驱逐(因为这类Pod通常"超售"更严重)
2.2 驱逐(Eviction) vs 抢占(Preemption)
虽然最终效果都是释放资源,但两者触发场景不同:
| 机制类型 | 触发者 | 触发条件 | 作用范围 |
|---|---|---|---|
| 驱逐 | kubelet | 节点资源不足(如内存压力) | 仅当前节点 |
| 抢占 | scheduler | 新Pod无法调度 | 整个集群 |
实际生产中最常见的驱逐场景:
- 节点内存不足触发OOM Killer
- 节点磁盘空间不足
- kubelet主动驱逐(根据--eviction-hard参数)
3. PriorityClass配置详解
3.1 字段全解析
PriorityClass的配置看似简单,但每个字段都有其设计考量:
yaml复制apiVersion: sched
