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

1.1 调度器在 Kubernetes 集群中的定位

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

角色 说明
决策者 为每个新创建的 Pod 选择目标 Node
约束满足者 保证调度结果满足 Pod 的资源请求、亲和性、污点容忍等约束
资源均衡者 通过评分机制尽量使集群各节点负载均衡,避免热点
可扩展平台 支持调度框架(Scheduling Framework)扩展点,允许自定义调度逻辑
关键认知:调度器只做“决策”而不做“执行”。绑定操作由调度器写入 API Server,kubelet 监听到绑定后才会真正拉取镜像并启动容器。调度器本身不直接与容器运行时交互。

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

一个 Pod 从创建到被调度到某个节点,经历以下四个阶段:

  1. 过滤(Filtering / Predicates):遍历所有 Node,剔除不满足 Pod 硬性约束的节点(如资源不足、端口冲突、污点不匹配)。
  2. 评分(Scoring / Priorities):对通过过滤的 Node 进行打分,分数越高表示越适合运行该 Pod。
  3. 选择(Select):从最高分节点中随机选择一个(若多个节点同分),避免调度结果完全确定。
  4. 绑定(Bind):将 Pod 与选定 Node 的绑定关系写入 API Server 的 etcd 中。
调度流程核心原则:先硬约束(过滤),后软偏好(评分)。过滤阶段保证可行性,评分阶段追求最优性。
Kubernetes 调度流程 Pod 调度流程 Pod 创建 过滤 (Filter) 评分 (Score) 选择 (Select) 绑定 (Bind) 说明: 过滤阶段剔除不满足硬约束的节点;评分阶段对剩余节点打分; 选择阶段从最高分节点中随机选一个;绑定阶段写入 etcd。

1.3 调度器架构组件

Kubernetes 调度器内部采用插件化架构,核心组件包括:

  • 调度队列(Scheduling Queue):管理待调度的 Pod,支持优先级排序、重试、回退机制。
  • 调度框架(Scheduling Framework):定义了一系列扩展点(Extension Points),允许用户注入自定义插件。
  • 插件注册表(Plugin Registry):管理所有已注册的调度插件,包括内置插件和自定义插件。
  • 缓存(Cache):维护集群中 Node 和 Pod 的快照,避免每次调度都从 API Server 拉取全量数据。
  • 绑定器(Binder):负责将调度结果写入 API Server。
组件 职责 关键特性
调度队列 存储待调度 Pod,按优先级排序 支持 Pod 重试、回退、抢占
调度框架 定义扩展点,编排插件执行顺序 QueueSort / PreFilter / Filter / PostFilter / PreScore / Score / NormalizeScore / Reserve / Permit / PreBind / Bind / PostBind
插件注册表 管理内置和自定义插件 支持动态加载、配置启用/禁用
缓存 维护 Node/Pod 快照 增量更新,减少 API Server 压力
绑定器 执行绑定操作 异步写入,支持重试
注意:调度器缓存与 etcd 中的数据可能存在短暂不一致(秒级)。调度器通过监听机制持续同步,但极端情况下可能产生“调度到已满节点”的问题。生产环境建议配合 Node 资源预留 和 调度器抢占策略 来降低风险。
Kubernetes 调度器架构组件 调度器内部架构组件 调度队列 优先级排序 / 重试 调度框架 扩展点编排 Filter / Score / Bind 插件注册表 内置 + 自定义插件 缓存 (Cache) Node / Pod 快照 绑定器 (Binder) 写入 API Server 架构要点: 调度队列提供待调度 Pod;调度框架编排插件执行;缓存提供节点数据;绑定器执行最终绑定。

1.4 调度器扩展点与插件化设计

Kubernetes 调度框架定义了 11 个扩展点,覆盖调度全生命周期:

  • QueueSort:定义 Pod 在调度队列中的排序逻辑。
  • PreFilter / Filter / PostFilter:过滤阶段的预处理、核心过滤、后处理。
  • PreScore / Score / NormalizeScore:评分阶段的预处理、打分、分数归一化。
  • Reserve / Permit:资源预留和准入控制。
  • PreBind / Bind / PostBind:绑定阶段的预处理、核心绑定、后处理。