背景介绍
在3.10的版本中,Dataphin推出了基于K8s的调度系统R.S-3.0,并在产品中支持了自定义资源组功能,用于实现资源的隔离。该功能支持用户在创建租户和资源组时设置可用的CPU和内存,但是也存在一个问题:
现有的调度资源是按照固定配额进行分配,租户或资源组被创建后将长期持有该资源。因为不同租户或资源组使用资源的周期可能不同,所以会出现某一时刻A资源不足,但是B资源闲置的现象,从而导致整个集群的资源利用率下降。
方案介绍
为了有效提升整体的资源利用率,Dataphin在5.0版本推出了“调度资源支持弹性伸缩”的功能。在确保资源组能够获取保障资源的前提下,通过资源共享的方式来提升整体集群的资源利用率。如下图所示,Dataphin支持设置租户和资源组的可用范围,以资源组为例进行介绍:
- Min资源:又称可用下限,代表资源组的保障资源
- 所有资源组可用下限相加不可超过100%(当前租户的可用下限);
- 当整个集群资源紧张时(每个资源组都需要超过下限额度的资源来运行任务),所有资源组优先获得所设置的下限额度;
- Max资源:又称可用上限,本资源组可向其他资源组借用其空闲的资源额度,但借用后可使用的资源总量不可超过所设置的上限;
现以资源组1中的任务A所需CPU为例,展开介绍资源组获取资源的逻辑。假设任务A运行需要内存为5C,资源组1设置的可用下限为20C,可用上限为50C。当任务A下发到资源组1中,有如下三种场景:
- 场景1:资源组已分配资源+任务所需资源<=资源组的可用下限
- 资源组已分配(12C)+任务A运行需要(5C)=17C,小于资源组的可用下限(20C)
- 所以资源组1会优先获取5C来支持任务A的运行。
- 场景2:资源组已分配资源+任务所需资源>资源组的可用下限
- 资源组已分配(16C)+任务A运行需要(5C)=21C,大于资源组的可用下限(20C)
- 所以资源组会优先获取4C(可用下限(20C)-已分配资源(16C)),剩下的1C会排队获取。
- 场景3:资源组已分配资源>=资源组的可用下限
- 资源组已分配资源(30C)>资源组的下限值(20C)
- 所以集群释放的资源会优先分给资源分配未达下限的资源组,任务A需要的5C会排队获取。
功能概览
- 支持设置租户和资源组的可用范围:
- 可用下限:当资源紧张时(所有资源组都需要超过下限额度的资源来运行任务),所有资源组优先获得所设置的下限额度;
- 可用上限:资源组可以借用其他资源组中的空闲资源,但是借用后可用总量不得超过所设置的上限值。
- 支持查看租户和资源组在当前时刻的具体使用量