CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kubernetes 进阶/课时/污点和容忍度
RawBlame
课时目录12 节

Kubernetes 进阶

  1. 01K8s 进阶概览
  2. 02托管集群选型
  3. 03自建 vs 托管
  4. 04控制平面与工作节点
  5. 05多集群管理
  6. 06污点和容忍度
  7. 07拓扑分布约束
  8. 08CRD 与自定义控制器
  9. 09资源管理与驱逐
  10. 10集群可观测性
  11. 11资源监控与优化
  12. 12综合练习

污点和容忍度

taints-and-tolerations 调度隔离。

30 分钟

污点和容忍度

默认 Scheduler 把 Pod 放到 资源够、.selector 匹配 的任意节点。污点(Taint) 与 容忍度(Toleration) 让节点 拒绝 不含对应容忍的 Pod——实现专用节点池、GPU 隔离、控制平面保护。本课对应路线图 taints-and-tolerations。

学习目标

  • 解释 Taint 的 key=value:Effect 语法与三种 Effect
  • 为专用节点池设计 Taint + Toleration 配对
  • 区分 Taint/Toleration 与 Node Affinity 的分工

基本概念

Taint 打在 Node 上:「除非你能容忍,否则别来」。

Toleration 写在 Pod 上:「我可以忍受这种污点」。

# Node 示例
taints:
  - key: dedicated
    value: gpu
    effect: NoSchedule

# Pod 示例
tolerations:
  - key: dedicated
    operator: Equal
    value: gpu
    effect: NoSchedule

与 k8s-pods 的 nodeSelector 相比,Taint 是 推(节点拒 Pod),Affinity 是 拉(Pod 选节点),常 组合使用。

Effect 三种

Effect行为
NoSchedule新 Pod 不调度上来(已在跑的不受影响)
PreferNoSchedule软拒绝,实在没节点才可能上来
NoExecute不调度 + 驱逐 已运行且无 toleration 的 Pod

NoExecute 配合 tolerationSeconds 可做过渡驱逐,与 k8a-resources 的节点压力驱逐不同——这是 策略性 隔离。

典型场景

场景Taint 示例
控制平面节点node-role.kubernetes.io/control-plane:NoSchedule(内置)
GPU 节点池nvidia.com/gpu=present:NoSchedule
批处理 Spotworkload=batch:NoSchedule + 容忍的 Job Pod
新节点预热临时 taint,测完再去掉
单租户硬隔离专用 taint + namespace 级准入(进阶)

托管集群节点池创建时可 启动时带 taint;Helm values 里为特定 Deployment 加 tolerations,见 helm-templates。

与 Affinity 配合

Toleration  →  允许「进入」该节点
Node Affinity →  偏好 / 必须「去」某类节点
Topology      →  跨 AZ 均匀(见 k8a-topology)

仅 toleration 不保证 Pod 只跑 GPU 节点——还需 requiredDuringScheduling 的 affinity 或专用 nodeSelector。

运维注意

  • 给 Deployment 加 toleration 后,误 toleration 宽泛(如 operator: Exists)可能让普通 Pod 涌入专用池
  • kubectl taint nodes 改 taint 不滚动 Pod;已有 Pod 可能仍占坑直到重建
  • 监控各节点池 利用率,避免 GPU 池空转——指标见 prometheus-essentials

练习

  • 为 CodeRoadMap「高内存 batch 导出 Job」设计 taint + toleration YAML 片段
  • 解释控制平面节点默认 taint 的作用
  • 对比:只用 nodeSelector vs taint+toleration 各适合什么场景

小结

Taint 守节点,Toleration 给 Pod 通行证。 下一课用拓扑分布约束把副本 摊开 到多个 AZ。

加载本节练习…
← 上一课多集群管理下一课 →拓扑分布约束