0Pricing
Kubernetes Basics · 课时

Pod 优先级与抢占

学习 PriorityClasses 如何对 Pod 排序,以及调度器如何抢占低优先级 Pod,为关键工作负载腾出空间

Pod 优先级与抢占 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 4 节课。

容器组并非一视同仁

当集群已满时,有些工作负载比其他工作负载更重要。容器组优先级让您可以告诉 Kubernetes,哪些容器组应在资源竞争中优先获得资源。

什么是 PriorityClass?

PriorityClass 是一个集群范围的对象,用于将名称映射到整数值。数值越大,优先级越高。

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: 'For critical production workloads'

为容器组分配优先级

容器组通过 priorityClassName 选择一个类别。调度器会从所引用的类别中读取数值。

apiVersion: v1
kind: Pod
metadata:
  name: critical-app
spec:
  priorityClassName: high-priority
  containers:
  - name: app
    image: myapp:1.0

优先级如何影响调度

当有多个容器组处于等待状态时,调度器会尝试先放置优先级较高的容器组。优先级会影响容器组获得调度的顺序。

什么是抢占?

如果集群已满,导致高优先级容器组无法调度,调度器可能会抢占(驱逐)低优先级容器组,以释放空间。

被驱逐的容器组会回到 Pending 状态,并可能在其他位置重新调度。

抢占实践

假设某个节点已被优先级为 100 的容器组占满,此时又来了一个优先级为 1000000 的容器组。调度器可以移除足够多的低优先级容器组,为这个关键容器组腾出空间。

kubectl get events --field-selector reason=Preempted
# Pod default/batch-job was preempted by critical-app

禁用抢占

PriorityClass 可以通过 preemptionPolicy: Never 选择不抢占其他容器组。此类容器组仍会按优先级顺序调度,但不会驱逐任何容器组。

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-no-preempt
value: 1000000
preemptionPolicy: Never

全局默认类别

在 PriorityClass 上设置 globalDefault: true 后,其值会应用于所有未指定优先级类别的容器组。全局默认类别只能有一个。

内置系统类别

Kubernetes 自带了 system-cluster-critical 和 system-node-critical 等保留类别,供关键组件使用。请不要将这些类别用于您的应用。

kubectl get priorityclass
# system-node-critical     2000001000
# system-cluster-critical  2000000000

最佳实践

  • 定义少量清晰的层级(例如:关键、普通、批处理)
  • 仅为真正重要的工作负载启用抢占
  • 结合资源请求使用,以确保调度决策准确
  • 避免将所有内容都设为高优先级,否则会失去优先级机制的意义

优先级与 QoS

优先级控制调度和抢占。服务质量类别(来自资源请求和限制)控制节点压力下的驱逐。两者有关联,但属于不同的机制。

快速检查

测试您对抢占的理解。

回顾

您了解到,PriorityClass 使用整数值为容器组排序,并影响调度顺序。当集群已满时,抢占允许关键容器组驱逐低优先级容器组。请使用少量清晰的层级,并将优先级与准确的资源请求结合起来。

常见问题解答

「Pod 优先级与抢占」课时是免费的吗?

是的 — 「Pod 优先级与抢占」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。

「Pod 优先级与抢占」这节课中我会学到什么?

学习 PriorityClasses 如何对 Pod 排序,以及调度器如何抢占低优先级 Pod,为关键工作负载腾出空间 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kubernetes Basics 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Pod 优先级与抢占」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kubernetes Basics 课中编写并运行代码吗?

能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 资源请求与限制
  2. 节点选择器与亲和性
  3. 污点与容忍度
  4. Pod 优先级与抢占
← 返回 Kubernetes Basics