1. 课程导论:K8s调度体系概述、污点与容忍的核心价值、课程目标与前置知识
1.1 Kubernetes 调度体系全景
Kubernetes 调度器(kube-scheduler)是控制平面的核心组件之一,负责将新创建的 Pod 绑定到最合适的节点上。调度决策并非随机,而是经过一套严谨的过滤(Predicates / Filtering)与打分(Priorities / Scoring)两阶段流程。
调度两阶段模型:
- 过滤阶段(Filtering): 剔除不满足 Pod 运行要求的节点,例如节点资源不足、端口冲突、节点选择器(nodeSelector)不匹配、污点(Taints)不兼容等。
- 打分阶段(Scoring): 对通过过滤的节点进行优先级排序,考量资源利用率、亲和性规则、拓扑分布等策略,选出最优节点。
污点(Taints)与容忍(Tolerations)机制正是过滤阶段的关键一环,它决定了哪些 Pod 可以“忍受”节点的特殊标记,从而被允许调度到该节点上。
1.2 污点与容忍的核心价值
污点(Taint)是节点上的一种属性标记,表示该节点具有某种“缺陷”或“特殊用途”。容忍(Toleration)是 Pod 上的属性,表示 Pod 愿意“容忍”节点上的特定污点。只有当 Pod 的容忍规则匹配节点的所有污点时,Pod 才有可能被调度到该节点上。
| 概念 | 作用对象 | 核心作用 | 类比 |
|---|---|---|---|
| 污点(Taint) | Node | 标记节点,拒绝不匹配的 Pod 调度 | “此车位已预留” |
| 容忍(Toleration) | Pod | 声明 Pod 可以“忍受”特定污点 | “我有该车位通行证” |
核心价值总结:
- 节点隔离: 将专用节点(如 GPU 节点、SSD 节点)与普通工作负载隔离。
- 故障管理: 标记异常节点(如磁盘故障、网络问题),阻止新 Pod 调度上来。
- 弹性伸缩: 配合
NoExecute效果,驱逐已运行的非容忍 Pod,实现节点腾空。 - 精细化调度: 与节点亲和性互补,形成“白名单+黑名单”的完整调度策略。
1.3 课程目标
通过本课程,你将掌握以下核心能力:
- 理解污点与容忍的完整语法: 包括三种效果(NoSchedule、PreferNoSchedule、NoExecute)及其行为差异。
- 掌握实战配置方法: 通过 YAML 清单为节点添加污点、为 Pod 添加容忍规则。
- 诊断调度异常: 使用
kubectl describe、kubectl get events等工具定位因污点导致的调度失败。 - 设计生产级策略: 结合节点亲和性、容忍、拓扑分布约束,构建高可用、高资源利用率的集群。
- 处理驱逐场景: 理解
NoExecute的驱逐机制,以及tolerationSeconds的优雅退出控制。
1.4 前置知识要求
为获得最佳学习体验,建议你具备以下基础:
| 领域 | 具体要求 |
|---|---|
| Kubernetes 基础 | 了解 Pod、Node、Deployment 等核心资源;能使用 kubectl 进行基本操作 |
| YAML 语法 | 能阅读和编写 Kubernetes 资源清单 |
| 调度基础 | 了解 nodeSelector、节点亲和性(nodeAffinity)的基本概念 |
| 实验环境 | 拥有一个可操作的 K8s 集群(minikube、kind 或云厂商集群均可) |
⚠️ 注意: 如果你对 Pod 调度完全陌生,建议先学习
nodeSelector 和 nodeAffinity 的基础用法,再进入本课程。污点与容忍是调度体系中的进阶内容,需要前置知识支撑。
本课程将从基础概念出发,逐步深入到生产环境中的复杂调度异常排查与策略设计。准备好了吗?让我们开始第一段实战旅程。