1. Kubernetes 调度器概述

Kubernetes 调度器(kube-scheduler)是控制平面中负责 Pod 与节点绑定 的核心组件。它监听尚未分配节点的 Pod,根据一系列调度策略与约束条件,为每个待调度 Pod 选择最合适的 Worker 节点,并将绑定结果写入 API Server。调度器不直接管理 Pod 生命周期,而是专注于“将 Pod 放到哪里”这一决策问题。

1.1 调度器在 K8s 架构中的位置

在 Kubernetes 控制平面中,调度器位于 API Server 与 kubelet 之间,是 Pod 生命周期中“调度阶段”的决策中枢。下图展示了调度器在集群中的逻辑位置与交互关系:

Kubernetes 调度器在集群架构中的位置 Kubernetes 调度器在集群架构中的位置 控制平面 (Control Plane) API Server etcd kube-scheduler Controller Manager 工作节点 (Worker Nodes) Node-1 kubelet kube-proxy Pod A / Pod B Node-2 kubelet kube-proxy Pod C / Pod D Node-3 kubelet kube-proxy Pod E / Pod F 调度决策 (绑定) 调度器通过 API Server 监听未调度的 Pod,结合节点资源与约束条件做出绑定决策,并将结果写回 API Server
关键交互链路: 调度器不直接与 kubelet 或容器运行时通信。所有调度状态(Pod 待调度、节点资源、绑定结果)均通过 API Server 读写,保证了控制平面的一致性与可审计性。

1.2 调度器核心职责

调度器的职责可以归纳为以下四个核心维度:

职责维度 说明 典型场景
资源匹配 确保所选节点满足 Pod 的 CPU、内存、GPU 等资源请求 Pod 声明 2 核 4Gi,调度器过滤掉资源不足的节点
约束满足 执行 nodeSelector、亲和性/反亲和性、污点容忍等调度约束 Pod 必须调度到带有 disk=ssd 标签的节点
负载均衡 通过评分算法将 Pod 分散到不同节点,避免热点 优先选择已分配资源比例最低的节点
拓扑感知 考虑节点地域、可用区、机架等拓扑信息,优化网络与容灾 将 Pod 调度到同一可用区以减少跨区延迟
调度器 vs. 控制器: 控制器(如 Deployment Controller)负责确保 Pod 副本数符合期望,而调度器负责为每个 Pod 选择具体节点。两者分工明确,协作完成 Pod 的完整生命周期管理。

1.3 调度器工作流程简介

Kubernetes 调度器采用 两阶段调度 架构:过滤(Filtering) 与 评分(Scoring)。整体流程如下:

  1. 监听与排队: 调度器通过 Informer 机制监听 API Server 中 spec.nodeName 为空的 Pod,将其加入内部调度队列。
  2. 过滤阶段(Predicates): 遍历所有节点,逐一执行预选策略(如资源充足、端口不冲突、满足亲和性等),生成候选节点列表。
  3. 评分阶段(Priorities): 对候选节点执行多维度评分(如资源利用率、Pod 分布均匀度),计算每个节点的综合得分。
  4. 绑定阶段: 选择得分最高的节点,将 Pod 的 spec.nodeName 更新为该节点名称,完成绑定。
  5. 异步确认: 目标节点的 kubelet 监听到绑定事件后,拉取镜像并启动容器。若启动失败,调度器不会重新调度,而是由控制器负责处理。

下图展示了调度器内部的核心工作流程:

Kubernetes 调度器工作流程 Kubernetes 调度器工作流程 1. 监听未调度 Pod Informer 机制 2. 过滤 (Filtering) 预选策略 → 候选节点 3. 评分 (Scoring) 优先级策略 → 综合得分 4. 绑定 (Binding) 选择最优节点 → 写回 API Server 5. kubelet 异步执行 拉取镜像 → 启动容器 调度流程关键说明 • 过滤阶段是“硬约束”:不满足条件的节点直接被排除,不进入评分阶段 • 评分阶段是“软约束”:每个候选节点获得 0-100 分,得分最高者胜出 • 绑定是幂等操作:即使 kubelet 后续启动失败,调度器也不会回滚绑定
注意: 调度器默认使用 抢占式调度(Priority & Preemption)。当高优先级 Pod 无法调度时,调度器可以驱逐低优先级 Pod 以释放资源。这一机制在过滤阶段之后、评分阶段之前触发,属于调度流程的扩展路径。

1.4 调度器与网络拓扑的关联