1. 调度器概述:Kubernetes 调度器的作用、调度流程、调度器架构组件

1.1 调度器在 Kubernetes 中的核心作用

Kubernetes 调度器(kube-scheduler)是控制平面的核心组件之一,负责将待调度的 Pod 绑定到最合适的节点上。其本质是一个资源匹配与约束满足系统,在集群资源碎片化、节点异构性、用户自定义约束等多维条件下,做出最优的调度决策。

维度 调度器职责 典型场景
资源匹配 确保节点剩余资源满足 Pod 的 requests 声明 CPU、内存、GPU、临时存储
约束满足 执行 nodeSelector、亲和性、污点容忍等策略 专用 GPU 节点、合规区域部署
负载均衡 通过评分机制分散 Pod,避免节点过载 资源利用率均衡、故障域分散
拓扑感知 考虑节点拓扑分布,优化跨 AZ/Region 部署 高可用多副本、地域亲和
关键认知:调度器不负责运行 Pod,也不管理节点生命周期。它只做“绑定决策”——将 Pod 与 Node 的绑定关系写入 etcd,由 kubelet 在目标节点上完成实际创建。

1.2 调度流程:从 Pod 创建到绑定

调度流程分为两个阶段:过滤(Filtering) 和 评分(Scoring)。过滤阶段选出所有满足条件的候选节点;评分阶段对候选节点打分,选出最优节点。整个流程在调度器内部以“调度周期”为单位串行或并发执行。

  1. Pod 入队:kube-scheduler 通过 informer 监听 API Server,发现未调度(spec.nodeName 为空)的 Pod,将其加入调度队列。
  2. 过滤阶段(Predicates):对每个节点执行一系列预选策略,剔除不满足条件的节点。例如:端口冲突、资源不足、污点不匹配。
  3. 评分阶段(Priorities):对通过过滤的节点执行加权评分,计算每个节点的综合得分。
  4. 绑定阶段:选择得分最高的节点,通过 API Server 将 Pod 与 Node 的绑定关系写入 etcd。
  5. 异步确认:kubelet 监听到绑定事件后,在目标节点上启动 Pod。
Kubernetes 调度器核心流程 Pod 入队 过滤阶段 评分阶段 绑定阶段 过滤阶段(Predicates) • 节点资源是否满足 Pod requests • 节点选择器 / 亲和性匹配 • 污点容忍度检查 • 端口冲突检测 评分阶段(Priorities) • 资源利用率均衡(MostRequested / LeastRequested) • 节点亲和性权重 • 跨故障域分散(SelectorSpread) • 自定义扩展评分
性能要点:过滤阶段是“硬约束”,一旦节点不满足条件立即淘汰;评分阶段是“软约束”,通过权重组合选出最优节点。调优时优先优化过滤阶段的效率,减少不必要的评分计算。

1.3 调度器架构组件

kube-scheduler 内部采用插件化架构,核心组件包括调度队列、调度框架(Scheduling Framework)、缓存与绑定器。从代码层面看,调度器由以下模块构成:

组件 职责 关键数据结构 / 接口
Scheduler Queue 管理待调度 Pod 的优先级队列,支持重试、回退 PriorityQueue、activeQ / backoffQ / unschedulableQ
Scheduling Framework 定义插件扩展点(PreFilter、Filter、Score、Reserve 等) Plugin 接口、CycleState、FrameworkHandle
Node Cache 缓存集群节点最新资源状态,减少 API Server 请求 NodeInfo、Resource、ImageStates
Binder 将调度结果写入 API Server(Pod 与 Node 绑定) Binding 子资源、异步更新
Extender 外部扩展调度逻辑,支持自定义过滤与评分 HTTP/HTTPS 回调、JSON 格式
kube-scheduler 架构组件 Scheduling Framework 插件扩展点容器 Scheduler Queue activeQ / backoffQ / unschedulableQ Node Cache NodeInfo / Resource / ImageStates Binder 写入 Binding 到 API Server Extender 外部 HTTP 回调扩展 插件化扩展点:PreFilter → Filter → PostFilter → Score → NormalizeScore → Reserve → Permit → PreBind → Bind → PostBind

1.4 调度框架的扩展点

Kubernetes 1.19+ 引入的 Scheduling Framework 将调度流程拆分为多个扩展点,每个扩展点可以插入一个或多个插件。这种设计使得调度器的行为高度可定制,也是参数调优的核心入口。

  • PreFilter / Filter:预选阶段,检查 Pod 与节点的基本兼容性。
  • PostFilter:当所有节点都被过滤掉时执行,用于抢占或报错。
  • Score / NormalizeScore:评分阶段,计算节点优先级。
  • Reserve / Unreserve:预留资源,确保调度决策的原子性。
  • Permit:允许或拒绝调度决策,常用于多调度器协调。
  • PreBind / Bind / PostBind:绑定阶段,执行绑定操作及后续处理。
调优注意:调度器参数调优主要围绕 Filter 和 Score 插件展开。例如调整 NodeResourcesFit 的评分策略(LeastRequested / MostRequested)直接影响节点资源分配的均衡性。后续章节将深入每个插件的参数配置与效果分析。