1. 课程导论:K8s调度体系概述、污点与容忍的核心价值、课程目标与前置知识

1.1 Kubernetes 调度体系全景

Kubernetes 调度器(kube-scheduler)是控制平面的核心组件之一,负责将新创建的 Pod 绑定到最合适的节点上。调度决策并非随机,而是经过一套严谨的过滤(Predicates / Filtering)与打分(Priorities / Scoring)两阶段流程。

调度两阶段模型:
  • 过滤阶段(Filtering): 剔除不满足 Pod 运行要求的节点,例如节点资源不足、端口冲突、节点选择器(nodeSelector)不匹配、污点(Taints)不兼容等。
  • 打分阶段(Scoring): 对通过过滤的节点进行优先级排序,考量资源利用率、亲和性规则、拓扑分布等策略,选出最优节点。

污点(Taints)与容忍(Tolerations)机制正是过滤阶段的关键一环,它决定了哪些 Pod 可以“忍受”节点的特殊标记,从而被允许调度到该节点上。

Kubernetes 调度两阶段流程 阶段一:过滤(Filtering) 剔除不满足硬性条件的节点 • 资源不足(CPU/内存) • 端口冲突 • 节点选择器不匹配 • 污点不兼容 通过 阶段二:打分(Scoring) 对候选节点进行优先级排序 • 资源利用率均衡 • Pod 亲和性/反亲和性 • 拓扑分布约束 • 节点标签匹配度 输出:最优节点绑定

1.2 污点与容忍的核心价值

污点(Taint)是节点上的一种属性标记,表示该节点具有某种“缺陷”或“特殊用途”。容忍(Toleration)是 Pod 上的属性,表示 Pod 愿意“容忍”节点上的特定污点。只有当 Pod 的容忍规则匹配节点的所有污点时,Pod 才有可能被调度到该节点上。

概念 作用对象 核心作用 类比
污点(Taint) Node 标记节点,拒绝不匹配的 Pod 调度 “此车位已预留”
容忍(Toleration) Pod 声明 Pod 可以“忍受”特定污点 “我有该车位通行证”
核心价值总结:
  • 节点隔离: 将专用节点(如 GPU 节点、SSD 节点)与普通工作负载隔离。
  • 故障管理: 标记异常节点(如磁盘故障、网络问题),阻止新 Pod 调度上来。
  • 弹性伸缩: 配合 NoExecute 效果,驱逐已运行的非容忍 Pod,实现节点腾空。
  • 精细化调度: 与节点亲和性互补,形成“白名单+黑名单”的完整调度策略。

1.3 课程目标

通过本课程,你将掌握以下核心能力:

  1. 理解污点与容忍的完整语法: 包括三种效果(NoSchedule、PreferNoSchedule、NoExecute)及其行为差异。
  2. 掌握实战配置方法: 通过 YAML 清单为节点添加污点、为 Pod 添加容忍规则。
  3. 诊断调度异常: 使用 kubectl describe、kubectl get events 等工具定位因污点导致的调度失败。
  4. 设计生产级策略: 结合节点亲和性、容忍、拓扑分布约束,构建高可用、高资源利用率的集群。
  5. 处理驱逐场景: 理解 NoExecute 的驱逐机制,以及 tolerationSeconds 的优雅退出控制。

1.4 前置知识要求

为获得最佳学习体验,建议你具备以下基础:

领域 具体要求
Kubernetes 基础 了解 Pod、Node、Deployment 等核心资源;能使用 kubectl 进行基本操作
YAML 语法 能阅读和编写 Kubernetes 资源清单
调度基础 了解 nodeSelector、节点亲和性(nodeAffinity)的基本概念
实验环境 拥有一个可操作的 K8s 集群(minikube、kind 或云厂商集群均可)
⚠️ 注意: 如果你对 Pod 调度完全陌生,建议先学习 nodeSelector 和 nodeAffinity 的基础用法,再进入本课程。污点与容忍是调度体系中的进阶内容,需要前置知识支撑。
污点与容忍在调度体系中的位置 kube-scheduler 过滤阶段(Filtering) 资源检查 端口检查 污点检查 选择器检查

本课程将从基础概念出发,逐步深入到生产环境中的复杂调度异常排查与策略设计。准备好了吗?让我们开始第一段实战旅程。