
Kubernetes SIG Scheduling 2024 年度报告解读调度器性能、异步抢占与 DRA 结构化参数的技术演进【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community导读本文基于 sig-scheduling/annual-report-2024.md 年度报告系统梳理 Kubernetes SIG Scheduling 在 2024 年对应 v1.30 至 v1.32 版本周期的核心工作调度队列与调度框架层面的性能优化QueueingHints、异步抢占、DRA 结构化参数调度、以及一批 KEP 从 Alpha/Beta 走向 Stable 的完整历程。结合 sig-scheduling/charter.md、contributors/devel/sig-scheduling/scheduler_queues.md 等仓库文档你将理解这些特性背后的调度架构变化、如何在实际集群中启用以及 SIG 当前的子项目与工作组成立情况。一、SIG Scheduling 的职责边界与 2024 年总体定位SIG Scheduling 负责所有与Pod 放置决策Pod placement decisions相关的组件其章程明确定义了职责范围构建 Kubernetes 调度器kube-scheduler及面向 Pod 的调度特性设计与实现允许用户自定义 Pod 在集群节点上放置方式的特性包括提升工作负载可靠性、更高效利用集群资源、以及强制执行放置策略与 sig-scalability 共同负责 kube-scheduler 的性能与可扩展性与 sig-api-machinery 共同负责 Pod 调度 API与 sig-node 共同负责节点与集群资源管理与 sig-auth 共同负责 Pod 调度策略网络管理、持久化存储管理、资源配额与准入策略的强制执行不在SIG Scheduling 范围内。在 2024 年度报告中SIG 将年度工作重心归纳为三大主线性能改进、DRADynamic Resource Allocation动态资源分配调度、以及集群环境的生态建设子项目与工作组。二、2024 年重点成果三大性能与调度架构改进2.1 QueueingHints调度队列的精确重排队机制KEP-4247Per-plugin callback functions for efficient requeueing in the scheduling queue是 2024 年 SIG 在调度队列方向上的核心工作。报告中明确说明SIG 在这一年持续推进 QueueingHints目标是重新启用该特性Iterated on QueueingHints towards re-enabling the feature。要理解 QueueingHints 的价值需要先理解调度队列的基本机制。根据 contributors/devel/sig-scheduling/scheduler_queues.md 的说明kube-scheduler 内部依赖三队列结构队列类型作用activeQ堆heap提供立即可调度的 Pod默认优先级最高的 Pod 在堆顶可通过 QueueSort 扩展点自定义排序unschedulableQ映射map停放等待某些条件满足的 Pod如等待 PV 就绪、满足反亲和规则、容忍节点污点podBackoffQ堆heap对调度失败但预期最终可调度的 Pod 进行指数级退避默认初始退避 1 秒、最大退避 10 秒Kubernetes 调度队列activeQ / backoffQ / unschedulableQ之间 Pod 流转示意此外调度队列还有两个周期性的后台 goroutine 负责把 Pod 移回 active 队列flushUnschedulableQLeftover每 30 秒运行一次将未被任何事件移动的 unschedulable Pod 移回重试Pod 至少需在队列中停留 30 秒最坏情况下最长 60 秒才被移动flushBackoffQCompleted每 1 秒运行一次将退避期满的 Pod 移回 active 队列此外节点增删改、已有 Pod 被删除等事件会调用MoveAllToActiveOrBackoffQueue触发批量移动。QueueingHints 要解决的核心问题正是这种事件驱动 周期清扫机制的低效之处某类事件如新增一个节点可能只与少数插件的调度结果相关但默认情况下它会触发 unschedulableQ 中大量 Pod 的重新入队造成无谓的调度尝试。KEP-4247 引入per-plugin 回调函数让每个插件声明哪些事件类型会影响我的调度结果从而让调度器只重排真正受该事件影响的 Pod实现更高效的 requeueing。该 KEP 在 2024 年v1.32进入 Beta。2.2 异步抢占Asynchronous PreemptionKEP-4832抢占preemption是调度器在节点资源不足时为高优先级 Pod 腾挪空间的机制。传统实现中抢占是同步进行的调度器先选出被抢占的 Pod 并发起删除然后继续完成剩余调度流程整个过程中调度器线程被占用。KEP-4832Asynchronous Preemption在 v1.32 进入 Alpha其核心思路是当存在需要被抢占的 Pod 时将抢占过程异步化——调度器发起抢占操作后不必同步等待其完成而是可以继续处理其他调度工作待被抢占 Pod 实际终止、资源释放后再完成对被抢占者所让资源的分配。这种方式显著减少了高优先级 Pod 抢占低优先级 Pod 场景下对调度吞吐的影响。报告中指出该特性的引入条件正是when there are pods to be preempted存在需要被抢占的 Pod 时。2.3 调度器性能测试套件 scheduler-perf 的强化除了功能特性SIG 还持续改进了内部的调度性能测试套件 scheduler-perf位于 Kubernetes 仓库的test/integration/scheduler_perf其目标有二覆盖更多场景增加更多节点规模、已有 Pod 数量与调度压力组合性能退化预警当性能劣化被引入时能够及时发出告警alert us when the degradation is introduced。关于该套件的用法contributors/devel/sig-scheduling/scheduler_benchmarking.md 给出了可直接复用的操作方式。在 Kubernetes 源码目录内运行集成基准测试make test-integration WHAT./test/integration/scheduler_perf KUBE_TEST_VMODULE KUBE_TEST_ARGS-run^$$ -bench.如需运行特定名称的基准例如BenchmarkSchedulingmake test-integration WHAT./test/integration/scheduler_perf KUBE_TEST_VMODULE KUBE_TEST_ARGS-run^$$ -benchBenchmarkScheduling基准测试位于./test/integration/scheduler_perf/scheduler_bench_test.go函数名以BenchmarkScheduling开头测试用例通过结构体数组定义集群规模tests : []struct{ nodes, existingPods, minPods int }{ {nodes: 100, existingPods: 1000, minPods: 100}, {nodes: 1000, existingPods: 1000, minPods: 100}, {nodes: 5000, existingPods: 1000, minPods: 1000}, }其中nodes表示测试集群节点数existingPods表示初始化阶段已创建并调度的 Pod 数minPods表示基准测试实际阶段需创建并调度的 Pod 数。例如要测量 5000 节点集群调度 10000 个 Pod 的性能可加入{nodes: 5000, existingPods: 1000, minPods: 10000}也可通过-benchBenchmarkScheduling/5000Nodes/1000Pods只运行特定配置。用-cpuprofile cpu.out获取 CPU 剖析信息后可用go tool pprof -web cpu.out在浏览器中查看。需要说明的是该测试套件位于 Kubernetes 主仓库而非本 community 仓库以上命令需在 Kubernetes 源码目录中执行本仓库仅存放其使用文档。报告中提到的覆盖率提升 退化预警即是对这套基准体系的持续投资。2.4 DRA 结构化参数调度KEP-43812024 年另一项重要成果是DRADynamic Resource Allocation调度的升级引入结构化参数structured parameters并以此取代经典 DRAreplacing classic DRA。该工作由 KEP-4381 定义落在 kube-scheduler 一侧的实现由 SIG Scheduling 负责。结构化参数方案改变了 DRA 资源的表达与分配方式经典 DRA 依赖 resource driver 通过ResourceClass的 parameters 字段承载驱动自定义的参数调度器难以直接理解这些参数结构化参数则将分配语义如如何选择设备、如何划分设备以结构化的方式内建到 API 中调度器可以直接解析并对节点进行过滤与打分从而把 DRA 的选择哪个设备、分配哪个设备纳入调度决策这一演进是后续 DRA 系列 KEP如 Prioritized List、Partitionable Devices 等的基础。三、2024 年 KEP 全景v1.30 / v1.31 / v1.32 各阶段特性年度报告按成熟度阶段完整列出了 2024 年的 KEP 工作如下表所示3.1 Alphav1.32KEP主题里程碑4816 - DRA Prioritized ListDRA 优先级列表允许用户为资源分配指定设备偏好顺序v1.324832 - Asynchronous Preemption异步抢占将抢占过程从调度主路径中解耦v1.323.2 Betav1.31 / v1.32KEP主题里程碑3633 - MatchLabelKeys / MismatchLabelKeys to PodAffinity为 PodAffinity / PodAntiAffinity 引入标签键匹配与不匹配语义支持按滚动更新批次pod-template-hash分组亲和v1.314247 - QueueingHints调度队列的 per-plugin 回调实现高效 requeueingv1.323.3 Stablev1.30本年度集中转正KEP主题里程碑3022 - Tuning the number of domains in PodTopologySpread为 PodTopologySpread 引入minDomains允许设置拓扑域数量的下限避免少量域被过度打散v1.303521 - Pod Scheduling ReadinessPod 调度就绪门控通过schedulingGates字段推迟 Pod 进入调度队列直到外部条件如配额分配、数据就绪满足v1.303838 - Pod Mutable Scheduling Directives允许在 Pod 运行期间原地更新调度指令nodeSelector 等而无需重建 Podv1.30其中KEP-3521Pod Scheduling Readiness与调度队列机制密切相关带schedulingGates的 Pod 在门控被移除前不会进入 activeQ这正是调度队列可以按条件推迟调度动作设计哲学在 API 层的体现KEP-3838Pod Mutable Scheduling Directives则允许nodeSelector等指令在 Pod 已创建后修改调度器据此重新评估放置。这两者分别从何时进入队列和指令可变两个维度增强了调度的灵活性。四、子项目与工作组生态2024 年的变化4.1 子项目Subprojects2024 年 SIG 旗下继续运作的子项目包括cluster-capacity集群容量评估工具descheduler驱逐/重调度工具负责在节点上重新平衡 Pod 分布kube-scheduler-simulator调度器模拟器可在本地以可视化方式调试调度行为kube-scheduler-wasm-extension允许用 WebAssembly 扩展调度器逻辑kueue面向批处理与 AI/ML 工作负载的排队与配额管理控制器kwokKubernetes WithOut Kubelet用于轻量级大规模集群模拟scheduler核心 kube-scheduler 及其pkg/scheduler代码库scheduler-plugins调度器插件仓库承载各类社区扩展插件。以上子项目的归属与 OWNERS 信息可在 sigs.yaml 的sig-scheduling段落约第 2969-3009 行中核对也可在 sig-scheduling/README.md 的 Subprojects 一节查看。从当前 sig-scheduling/README.md 看2025 年又新增了dra-driver-topology子项目体现了 DRA 生态的持续扩张。4.2 工作组Working Groups2024 年新成立的两个工作组Device Management设备管理WG Device Management聚焦设备GPU、加速器等资源的管理与调度ServingWG Serving聚焦服务类工作负载。继续运作的工作组BatchWG Batch批处理工作负载PolicyWG Policy调度策略2025 年已退休Structured LoggingWG Structured Logging结构化日志。当前 sig-scheduling/README.md 显示SIG Scheduling 目前赞助的工作组包括 WG Batch、WG Checkpoint Restore、WG Device Management、WG Node Lifecycle 与 WG Workload-aware Scheduling。4.3 需要帮助的领域年度报告中明确指出以下子项目需要社区帮助例如活跃 OWNERS 不足 2 人scheduler-plugins调度插件生态kwok轻量级集群模拟工具对于希望参与 SIG Scheduling 的贡献者这是优先选择的方向。五、社区沟通与会议机制2024 年 SIG 在社区层面发布了两次重要更新KubeCon EU 2024SIG Scheduling Intro Deep DiveKubeCon NA 2024SIG Scheduling Intro Updates日常协作方面SIG 维持双周例会机制详见 sig-scheduling/README.md亚太/欧洲时段周二 9:00 CET自 2025-02-11 起双周举行北美/欧洲时段周四 9:00 PT自 2018-06-07 起双周举行descheduler 双周会周二 14:30 CET欧洲时段与周二 19:30 CET北美时段均自 2024 年 3 月起启动。会议纪要与录制均归档在 sig-scheduling/README.md 的 Meetings 一节供无法实时参会的贡献者异步跟进。六、运营治理与文档健康度年度报告的最后一部分记录了 SIG 的运营任务完成情况依据 committee-steering/governance/sig-governance.md 中定义的流程✅ sig-scheduling/README.md 已复核并更新✅ sig-scheduling/CONTRIBUTING.md 已复核并更新⬜ 其他贡献类文档devel 目录或 contributor guide尚未复核更新✅ sigs.yaml 中的子项目列表及关联 OWNERS 文件已复核更新✅ SIG 领导chairs、tech leads、subproject leads在 sigs.yaml 中准确且活跃✅ 2024 年会议纪要与录制已从 sig-scheduling/README.md 链接并可访问。根据 sigs.yaml 的记录2024 年 SIG Scheduling 的领导层为ChairsMaciej SkoczeńGoogle、Kensei NakadaIndependentTechnical LeadsDominik MarcińskiGoogle、Kensei NakadaIndependentEmeritus LeadsWei Huang、Abdullah Gharaibeh、Aldo Culquicondor、Bobby (Babak) Salamat、Klaus Ma七、2024 年度技术脉络总结从 sig-scheduling/annual-report-2024.md 可以提炼出 SIG Scheduling 2024 年的清晰技术主线性能是长期主线从 QueueingHints 的推进v1.32 Beta到异步抢占v1.32 Alpha再到 scheduler-perf 测试套件的持续强化SIG 在调度吞吐与排队效率两个维度持续投入DRA 是新兴增长点结构化参数调度取代经典 DRA 落地后DRA 生态进入快速迭代期Prioritized List 等后续 KEP 相继立项并催生了 Device Management 工作组与 dra-driver-topology 子项目成熟特性批量转正v1.30 一举将 PodTopologySpread minDomains、Pod Scheduling Readiness、Pod Mutable Scheduling Directives 三个 KEP 推至 StablePodAffinity 的 MatchLabelKeys 语义则在 v1.31 进入 Beta生态协作持续扩展新增 Device Management、Serving 两个工作组scheduler-plugins 与 kwok 被列为最需要社区帮助的子项目为外部贡献者指明了投入方向。对于希望深入源码的读者本仓库还提供了三份高价值的开发文档scheduler_queues.md调度队列机制详解、scheduler_framework_plugins.md调度框架插件开发指南、scheduler_benchmarking.md性能基准测试方法可作为理解上述年度工作底层实现的第一手材料。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考