污点与容忍度
使用污点阻止 Pod 被调度到特定节点,并允许某些 Pod 容忍这些污点。
污点与容忍度 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 4 节课。
什么是污点?
假设您的 Kubernetes 集群中有一些特殊节点,可能配备了 GPU 等特定硬件,或专门用于运行某些工作负载。您不会希望任意容器组都部署到这些节点上,对吧?
这就是污点的作用!污点是应用于节点的一种属性,除非容器组明确“容忍”该污点,否则会阻止容器组被调度到此节点上。
使用污点的原因
污点对于管理容器组的运行位置非常有用:
- 专用节点:为特定团队或应用保留节点。
- 特殊硬件:将配备 GPU 或高性能 SSD 的节点隔离出来,供需要这些硬件的容器组使用。
- 维护:将节点标记为维护中,暂时阻止新的容器组被调度到该节点。
污点的工作方式
可以把污点想象成节点上的“禁止入内”标志。只有拥有匹配“通行证”(称为容忍度)的容器组,才能忽略这个标志。
污点由键、值和效果组成。例如:key=value:effect。
理解污点效果
污点中的“效果”部分会告诉 Kubernetes 如何处理不容忍该污点的容器组。主要有三种效果:
NoSchedulePreferNoScheduleNoExecute
下面分别进行介绍。
污点效果: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 反馈 — 无需本地设置。