1. 课程导论:Kubernetes 调度器概述、调度流程、调度性能瓶颈、网络拓扑感知与亲和性配置的重要性

1.1 Kubernetes 调度器概述

Kubernetes 调度器(kube-scheduler)是控制平面的核心组件之一,负责将待调度的 Pod 绑定到最合适的 Node 上。它并非执行容器运行时操作,而是通过一系列算法和策略,为每个未调度的 Pod 选择一个最优的 Node,并将绑定决策写入 etcd。

调度器以插件化架构运行,默认调度框架(Scheduling Framework)包含多个扩展点,允许用户通过自定义插件实现调度策略的定制化。

核心职责: 监听未调度的 Pod,根据资源需求、约束条件、亲和性规则和拓扑信息,从候选 Node 中选出最优节点。

1.2 调度流程详解

Kubernetes 调度流程分为两个主要阶段:过滤(Filtering) 和 打分(Scoring)。调度框架在此基础上增加了排序、预留、预绑定、绑定等扩展点。

阶段 名称 说明
1 PreFilter 预处理 Pod 信息,检查 Pod 是否满足基本条件
2 Filter 过滤掉不满足调度约束的 Node(如资源不足、端口冲突、污点容忍)
3 PostFilter 当过滤后无可用 Node 时,执行抢占或失败处理
4 PreScore 运行评分前的预处理逻辑
5 Score 对通过过滤的 Node 进行打分,分值越高越优先
6 NormalizeScore 对评分结果进行归一化处理
7 Reserve 预留资源,防止并发调度冲突
8 Permit 批准或延迟绑定决策
9 PreBind 绑定前的预处理(如挂载卷)
10 Bind 将 Pod 绑定到选定的 Node

默认调度器使用 LeastRequestedPriority、BalancedResourceAllocation 等策略进行打分,但生产环境中往往需要更精细的拓扑感知能力。

Kubernetes 调度流程(Scheduling Framework) PreFilter Filter PostFilter PreScore Score Normalize Reserve Permit PreBind Bind 调度框架扩展点说明 • Filter 阶段:Node 资源不足、端口冲突、污点/容忍、节点选择器、亲和性规则 • Score 阶段:资源利用率、Pod 分布均衡、拓扑亲和性、自定义打分策略 • Bind 阶段:将 Pod 与 Node 的绑定关系写入 etcd,完成调度决策

1.3 调度性能瓶颈

在大规模集群中,调度器可能面临以下性能瓶颈:

  • 调度延迟: 当集群节点数超过 1000 时,过滤和打分阶段的循环计算耗时显著增加。
  • 资源竞争: 多个调度器实例或并发 Pod 调度可能导致 etcd 写入冲突。
  • 拓扑感知缺失: 默认调度器不考虑网络拓扑距离,导致 Pod 可能被调度到跨可用区或跨机架的 Node 上,增加网络延迟。
  • 亲和性规则计算开销: 复杂的 Pod 亲和性/反亲和性规则需要遍历大量 Node 和 Pod,消耗 CPU 和内存。
  • 调度队列阻塞: 高优先级 Pod 可能长时间阻塞低优先级 Pod 的调度。
常见误区: 很多团队只关注 CPU 和内存资源,却忽略了网络拓扑对应用性能的影响。在微服务架构中,跨机架或跨可用区的 Pod 通信延迟可能比同机架高出 3-5 倍。

1.4 网络拓扑感知与亲和性配置的重要性

网络拓扑感知调度是指调度器在决策时考虑节点之间的网络距离、可用区分布、机架位置等拓扑信息,将 Pod 调度到网络距离最近的 Node 上。亲和性配置则通过规则约束 Pod 与 Pod、Pod 与 Node 之间的部署关系。

两者的结合能带来以下收益:

场景 问题 拓扑感知 + 亲和性方案
微服务通信 服务 A 与服务 B 跨可用区调用,延迟高 使用 Pod 亲和性将相关服务调度到同一可用区
数据本地性 Pod 需要访问本地 SSD,但被调度到远端节点 使用 Node 亲和性 + 拓扑键约束
高可用部署 所有副本集中在同一机架,单点故障风险 使用 Pod 反亲和性 + 拓扑分布约束
GPU 集群 跨 NVLink 通信的 Pod 被分散到不同 GPU 节点 使用拓扑感知调度 + 自定义打分插件

Kubernetes 从 1.21 版本开始引入 拓扑管理策略(Topology Manager),结合 CPU 管理器和设备管理器,实现更细粒度的拓扑感知。同时,NodeTopology 和 TopologySpreadConstraints 等 API 对象为调度器提供了拓扑信息输入。

网络拓扑感知与亲和性配置的价值 无拓扑感知调度 Pod A (可用区1) Pod B (可用区2) 高延迟 Pod C (可用区1) Pod D (可用区3) 高延迟 拓扑感知 + 亲和性调度 Pod A (可用区1) Pod B (可用区1) 低延迟 Pod C (可用区2) Pod D (可用区2) 低延迟 通过拓扑感知调度,将通信密集的 Pod 调度到同一可用区或机架,显著降低网络延迟

1.5 课程目标与学习路径

本课程将深入讲解以下核心内容:

  • 调度框架扩展: 如何编写自定义调度插件实现拓扑感知。
  • 亲和性配置实战: Pod 亲和性、Node 亲和性、反亲和性的 YAML 配置与最佳实践。
  • 拓扑分布约束: 使用 topologySpreadConstraints 实现跨可用区均匀分布。
  • Topology Manager 集成: 结合 CPU 和 GPU 拓扑实现高性能计算调度。
  • 性能调优: 调度器参数优化、缓存策略、并发控制。
  • 生产案例: 大规模集群中的拓扑感知调度方案设计与故障排查。
学习建议: 建议先掌握 Kubernetes 基础调度概念(Pod、Node、污点/容忍),再深入本课程的拓扑感知与亲和性专题。每章都配有可运行的 YAML 示例和调度器插件代码片段。