1. 课程导论:网络拓扑感知调度器的背景、价值与课程目标

1.1 背景:传统调度器的“拓扑盲区”

Kubernetes 默认调度器(kube-scheduler)在分配 Pod 时,主要依据节点资源水位(CPU、内存)和用户定义的亲和性规则。它并不感知底层网络拓扑——例如节点所在的机架、交换机层级、跨可用区的链路带宽与延迟。这种“拓扑盲区”在以下场景中会引发严重的性能与成本问题:

  • 分布式训练(ML/DL):Pod 间需要高频 AllReduce 通信,若跨机架或跨交换机调度,通信延迟会显著增加,训练效率下降 30%~50%。
  • 有状态数据库(Cassandra、TiDB):副本应分布在不同的故障域(机架/可用区),但默认调度器可能将多个副本调度到同一机架,导致单点故障。
  • 实时音视频(RTC):媒体流对延迟极其敏感,Pod 应尽量调度到同一交换机下或同一可用区内。
  • 成本优化:跨可用区流量通常需要额外收费,拓扑感知调度可减少不必要的跨区通信。
核心痛点: 默认调度器将集群视为“扁平资源池”,忽略了物理网络拓扑对应用性能、可靠性和成本的决定性影响。

1.2 价值:网络拓扑感知调度带来的收益

通过在调度器中引入网络拓扑感知能力,可以实现以下关键价值:

维度 传统调度 拓扑感知调度 收益量化
通信延迟 Pod 可能跨 3~4 层交换机 Pod 优先同机架/同交换机 延迟降低 40%~70%
训练吞吐 AllReduce 跨机架带宽受限 AllReduce 在机架内完成 吞吐提升 2~5 倍
故障域隔离 副本可能集中在同一机架 副本强制分布到不同机架/可用区 RTO 降低 60%
跨区流量成本 无感知,可能产生大量跨区流量 优先同区调度,减少跨区流量 网络成本降低 20%~40%
适用场景速查: 如果你的集群运行着 MPI 作业、分布式数据库、实时流处理或 AI 推理服务,拓扑感知调度几乎可以立即带来可量化的收益。

1.3 课程目标:从零构建一个 Helm 化的拓扑感知调度器插件

本课程将带领你完成以下核心目标:

  1. 理解调度器扩展机制:掌握 Kubernetes 调度框架(Scheduling Framework)中的 Filter、Score、PreScore、Reserve 等扩展点。
  2. 设计网络拓扑模型:学习如何用 NodeLabel、NodeAnnotation 或自定义 CRD 表达机架、交换机、可用区等拓扑层级。
  3. 实现拓扑感知插件:编写一个自定义调度器插件,在 Filter 阶段过滤拓扑不匹配的节点,在 Score 阶段为拓扑更优的节点加分。
  4. Helm Chart 打包与部署:将插件及其依赖(RBAC、ConfigMap、Deployment)封装为 Helm Chart,实现一键安装与配置。
  5. 集成与验证:在真实或模拟集群中部署插件,通过测试 Pod 验证调度结果是否符合拓扑约束。
前置要求: 本课程假设你已熟悉 Kubernetes 基本概念(Pod、Node、Label)、Helm 基础操作(install/upgrade/template)以及 Go 语言基础。如果你对调度框架完全陌生,建议先阅读 Kubernetes 官方文档中关于“Scheduling Framework”的章节。

1.4 课程知识体系总览

下图展示了本课程的核心知识模块及其依赖关系:

课程知识体系总览 课程知识体系总览 模块1:基础 调度框架 & 拓扑模型 模块2:插件开发 Filter / Score 实现 模块3:Helm打包 Chart 结构与部署 模块4:集成验证 端到端测试 & 调优 模块5:生产化 多集群 & 监控告警 📌 课程路径说明 • 模块1→模块2→模块3 为必修主线,按顺序学习效果最佳 • 模块4 和模块5 可根据实际需求并行学习,或作为进阶参考 • 每章末尾提供动手实验,建议在 minikube 或 kind 集群中完成

1.5 课程产出物

完成本课程后,你将获得以下可直接复用的产出物:

产出物 说明 交付形式
拓扑感知调度器插件 基于 Kubernetes Scheduling Framework 的 Filter + Score 插件 Go 源码 + 编译后的二进制
Helm Chart 包含插件 Deployment、ServiceAccount、RBAC、ConfigMap 的 Chart 包 tgz 归档 + values.yaml
拓扑标签规范 推荐使用的 NodeLabel 命名与层级约定文档 Markdown 文档
集成测试脚本 用于验证调度结果的自动化测试脚本(Shell + Python) Shell / Python 脚本
课程定位: 本课程不是纯理论讲解,而是“手把手带你写一个生产可用的 Helm 化调度器插件”。每章都包含可运行的代码示例和实验步骤,建议你边学边练。