资源调度泛型 [1] #
调度系统泛型
| 类型 | 资源选择 | 排他性 | 分配粒度 | 集群策略 |
|---|---|---|---|---|
| 中央调度器 | 全局 | 无,时序 | 全局策略 | 严格的优先级(抢占式) |
| 两层调度调度器 | 动态资源集 | 悲观锁 | 增量囤积 | 严格公正 |
| 共享状态 | 全局 | 乐观锁 | 调度器策略 | 优先级抢占 |
表1. 常见调度器的比较
Kubernetes 资源调度[2] #

Kubernetes 调度的两个阶段[4][5] #
基于谓词和优先级的调度器(Predicates and Priorities) · v1.0.0 ~ v1.14.0 #

-
调度器扩展(Scheduler Extender) · v1.2.0 - Scheduler extension
通过调用外部调度器扩展的方式改变调度器的决策; -
Map-Reduce 优先级算法 · v1.5.0 - MapReduce-like scheduler priority functions
为调度器的优先级算法支持 Map-Reduce 的计算方式,通过引入可并行的 Map 阶段优化调度器的计算性能;
基于调度框架的调度器(Scheduling Framework) · v1.15.0 ~ 至今 #

-
调度框架认为 Kubernetes 中目前存在调度(Scheduling)和绑定(Binding)两个循环:
调度循环在多个 Node 中为 Pod 选择最合适的 Node;
绑定循环将调度决策应用到集群中,包括绑定 Pod 和 Node、绑定持久存储等工作; -
除了两个大循环之外,调度框架中还包含 QueueSort、PreFilter、Filter、PostFilter、Score、Reserve、Permit、PreBind、Bind、PostBind 和 Unreserve 11 个扩展点(Extension Point),这些扩展点会在调度的过程中触发。
批量计算[3] #
-
K8s自带的的资源调度器,有一个明显的特点是:依次调度每个容器。
-
Volcano
- DRF(dominant resource fairness): Yarn和Mesos都有
DRF意为:“谁要的资源少,谁的优先级高” - Queue: Yarn调度器的功能
- DRF(dominant resource fairness): Yarn和Mesos都有
实战[11] #
- 服务资源智能推算: crane+Victoria Metrics
- Crane 调度器 [14]
crane-sheduler 基于prometheus集群真实资源负载进行调度,将其应用于调度过程中的 Filter 和 Score 阶段,能够有效缓解集群资源负载不均的问题,真正实现企业的降本增效。
- Crane 调度器 [14]
- 二次调度: descheduler [12][13]
- 弹性调度: OpenKruise-WorkloadSpread + Virtual Kubelet
参考 #
scheduling framework调度器 && 谓词 #
- 调度系统设计精要 linux 调度器, go调度器, k8s调度器
- Kubernetes Scheduler 设计与实现 bili 第 76 期 Kubernetes Scheduler 设计与实现 *** https://github.com/kubernetes/enhancements/issues/895 even pod, 多个region调度
- 进击的 Kubernetes 调度系统(一):Kubernetes scheduling framework 未
- 进击的 Kubernetes 调度系统(二):支持批任务的 Coscheduling/Gang scheduling 未
基于谓词的调度器 #
- Kubernetes集群调度器原理剖析及思考 - v1.11版本 2019
- 深度解析Kubernetes核心原理之Scheduler 未 - KubeCon 2018 ***
- DockOne微信分享(一四九):Kubernetes调度详解 FreeWheel 主任工程师-2017年-***未