0Pricing
Kubernetes Basics · 课时

污点与容忍度

使用污点阻止 Pod 被调度到特定节点,并允许某些 Pod 容忍这些污点。

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

什么是污点?

假设您的 Kubernetes 集群中有一些特殊节点,可能配备了 GPU 等特定硬件,或专门用于运行某些工作负载。您不会希望任意容器组都部署到这些节点上,对吧?

这就是污点的作用!污点是应用于节点的一种属性,除非容器组明确“容忍”该污点,否则会阻止容器组被调度到此节点上。

使用污点的原因

污点对于管理容器组的运行位置非常有用:

  • 专用节点:为特定团队或应用保留节点。
  • 特殊硬件:将配备 GPU 或高性能 SSD 的节点隔离出来,供需要这些硬件的容器组使用。
  • 维护:将节点标记为维护中,暂时阻止新的容器组被调度到该节点。

污点的工作方式

可以把污点想象成节点上的“禁止入内”标志。只有拥有匹配“通行证”(称为容忍度)的容器组,才能忽略这个标志。

污点由键、值和效果组成。例如:key=value:effect。

理解污点效果

污点中的“效果”部分会告诉 Kubernetes 如何处理不容忍该污点的容器组。主要有三种效果:

  • NoSchedule
  • PreferNoSchedule
  • NoExecute

下面分别进行介绍。

污点效果:NoSchedule

NoSchedule 效果最为严格。如果节点带有 NoSchedule 污点,那么除非容器组具有匹配的容忍度,否则不会有容器组被调度到该节点上。

已经在节点上运行的容器组不受新添加的 NoSchedule 污点影响。

污点效果:PreferNoSchedule

PreferNoSchedule 是 NoSchedule 的“软性”版本。Kubernetes 会尽量避免将容器组调度到带有污点的节点上,但这不是硬性要求。

如果没有其他合适的节点,即使没有容忍度,容器组仍可能被调度到带有 PreferNoSchedule 污点的节点上。

污点效果:NoExecute

NoExecute 效果很特殊,因为它会影响已经在运行的容器组。如果节点带有 NoExecute 污点:

  • 没有匹配容忍度的容器组会被立即驱逐。
  • 没有匹配容忍度的新容器组无法被调度。

这通常用于排空节点或处理节点故障。

介绍容忍度

污点应用于节点,而容忍度应用于容器组。容器组的容忍度允许它被调度到带有匹配污点的节点上。

如果没有匹配的容忍度,容器组就无法(或不愿意)被调度到带有污点的节点上。

容器组清单中的容忍度

您可以在容器组的 YAML 清单中、spec 部分下定义容忍度。以下示例展示了容器组如何容忍 key=value:NoSchedule 污点:

apiVersion: v1
kind: Pod
metadata:
  name: my-tolerated-pod
spec:
  containers:
  - name: nginx
    image: nginx
  tolerations:
  - key: "special-purpose"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

污点与容忍度如何匹配

要将容器组调度到带有污点的节点上,其容忍度必须与节点的污点匹配。匹配条件包括:

  • 键:必须相同。
  • 值:当 operator: Equal 时必须相同。
  • 效果:必须相同。
  • 运算符:可以是 Equal 或 Exists(表示该键可以取任意值)。

特殊容忍度 key: "" operator: Exists 可以容忍任意污点。

快速检查:污点

某个节点带有污点 env=production:NoSchedule。哪种容器组配置可以使它被调度到该节点上?

回顾:污点与容忍度

您已经学习了污点和容忍度!

  • 污点应用于节点,用于排斥容器组。
  • 容忍度应用于容器组,允许它们被调度到带有污点的节点上。
  • 主要的污点效果包括 NoSchedule、PreferNoSchedule 和 NoExecute。
  • 容忍度必须与污点的键、值和效果匹配,容器组才能被调度。

这些工具让您能够精细控制容器组的部署位置!

常见问题解答

「污点与容忍度」课时是免费的吗?

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

「污点与容忍度」这节课中我会学到什么?

使用污点阻止 Pod 被调度到特定节点,并允许某些 Pod 容忍这些污点。 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kubernetes Basics 需要有经验吗?

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

「污点与容忍度」课时需要多长时间?

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

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

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

此课程中的所有课时

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