kube-batch--简介

背景

K8s本身的调度器具有一些缺陷:
(1) 默认的调度器是以 pod 为粒度的,对机器学习任务很不利。
(2)默认的调度器无法提供队列调度的功能

kube-batch简介:

Kube-batch 目前是 Kubernetes SIGs 旗下的一个孵化项目,是一个运行在 Kubernetes 上面向机器学习 / 大数据 /HPC 的批调度器(batch scheduler)。kubeflow中gang scheduler的实现就使用的是kube-batch.

Kube-batch 关注点

"Batch" scheduling
Resource sharing between multi-tenant

kube-batch的一些概念

自定义资源

(1)PodGroup
简单理解:一个PodGroup就是一个job中的所有Pod


image.png

(2)PodGroup
简单理解:一个PodGroup就是一个job中的所有Pod


image.png

Actions

Reclaim: 回收
Allocate: 分配
Backfill: 回填
Preempt: 抢占

kube-batch新增的插件

Drf:维护了集群资源使用情况
Gang:实现了batch调度的一个核心逻辑,只有满足数量要求的PodGroup,才可
以调度
Predicates:注册预选函数
Priority:job优先级

kube-batch 基本流程

Kube-batch 的基本流程如下图,它通过 list-watch 监听 Pod, Queue, PodGroup 和 Node 等资源,在本地维护一份集群资源的全局缓存,依次通过如下的策略(reclaim, allocate, preemption,predict) 完成资源的调度。


image.png
image.png

(1) Kube-batch向集群注册自己定义的Action和插件
(2) list-watch 监听 Pod, Queue, PodGroup 和 Node 等资源,在本地维护一份集群资源的全局缓存
(3) 间隔一秒,执行调度,开启会话
(4) 执行Action

总结

(1)Kube-batch如何Gang-Scheduler
a. 增加一个PodGruop的CRD。调度以PodGroup为单位。同时对应还有一个PodGroupController进行PodGroup的管理
b. 整个调度过程采用延迟创建Pod的过程。只有当PodGroup中的所有Pod都有合适的Node绑定时,才开始创建
c. 定义了一种新的Action-BackFill.当PodGroup还有Pod没绑定时,之前绑定Pod的资源会释放。

(2) Kube-batch如何共享多租户资源
a. 多租户的实现:Queue + Namespace
b. 租户间资源的共享:每个租户对应一个Namespace,以及一个Queue.每个Namespace的资源是按比例分配的。

优缺点

优点:
Gang Scheduler 的调度方式
多租户的设计思想
缺点:
和默认的调度器冲突
没有优选就没有soft亲和性
目前还是孵化项目,文档不全面,特别是多租户这块,没有实例以及文档

推荐阅读更多精彩内容