Kubernetes资源调度2-资源动态调度

1.基于SLA驱动的资源动态调度算法

将应用分为不同类型,将不同应用调度到不同资源状态节点上,减少应用因资源不足带来的问题,根据SLA协议实时监控应用资源使用状况,动态调整应用资源占用率,提高资源使用率。

SLA协议:Service-Level Agreement的缩写,意思是服务等级协议。是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语。

监控容器在一段时间内资源使用率数据,使用拟合函数来拟合数据(机器学习回归),通过拟合函数来计算容器虚拟资源到达使用率上限的时间,根据时间对容器进行排序。

1. tj时刻容器i的cpu使用率cij, 内存使用率mij

    

2.线性回归得到cpu使用率与时间的拟合函数Ztjc  预测容器icpu使用率到达上限Ciu的时间ticu,令Ztjc=Ciu,解得ticu

3.根据每个容器的ticu升序排列,得到排序方案Sc,容器i在排序方案中的序列号为Sic

4.求得内存使用率与时间的拟合函数Ytjm    预测内存使用达到上限Miu的时间timu 令 Ytjm=Miu  得到timu

5.根据每个容器的timu升序排列,得到排序方案Sm,容器i在排序方案中的序列号为Sim

6.对于排序方案Sc, Sm进行整合:

7.考虑SLA处理问题的优先级pre

S为最终排序,每次选择S中第一位作为资源调度的目标

8.根据容器资源使用率的下限,确定容器资源是否可以回收

一段时间内cpu的平均使用率c`i  内存平均使用率m`i

cid  mid为cpu,内存使用率下限   ciu  cmu  cpu内存使用率上限

Ci已经分配的资源   deltaC 要回收的资源

物理机节点K可分配的资源

若任务所需资源小于物理机节点的资源,则执行节点内调度,否则执行节点间调度。

总结一下,利用容器的cpu,内存的预测情况以及SLA协议来对容器进行排序,根据资源使用率上下限进行节点内以及节点间的调度

参考论文:

[1]边俊峰. 基于Docker的资源调度及应用容器集群管理系统设计与实现[D].山东大学,2017.

2.基于Kubernetes-on-EGO的两级资源调度器

目前的 Kubernetes 调度器是单进程的同步调度,当系统调度任务大量增加时,调度器会发生阻塞延时,不能满足调度效率高的要求;调度计划是不对外暴露的,不能满足大规模数据中心中用户自己通过配置调配资源的问题。第一个问题应该是存在的,第二个问题现在应该支持了吧,需要研究一下。

单体调度:

单体式调度指调度器是单一进程运行在某台主机上,调度器经过内置的算法将任务分派给集群中的某台主机,所有任务都服从一个调度器的安排,这种架构简单,但是这种调度器存在着缺陷,对于长时间运行的服务如 Web 服务和批处理任务如 Map Reduce 任务没有区分调度;应对不同场景,调度器应有不同的调度逻辑;调度器是单进程设计,在集群规模增大调度任务增多时,调度会导致队列阻塞。

二级调度;

二级调度是指资源调度和任务调度分离,这样任务调度逻辑就可以更加灵活,根据不同的应用需求配置不同的调度逻辑,集群之间资源还可以保证处于共享状态。Mesos 使用二级调度架构,在 Mesos 中资源会主动提供给上层应用层调度,在二级调度逻辑,待调度的任务跟资源管理器交互,资源管理器主动给任务分配动态资源。用户能够灵活使用调度策略。二级调度也存在问题:应用层调度隐藏了全局资源调度,调度器无法看到全局资源的配置情况,只看到资源管理器提供的资源,因此会导致资源调度不合理,降低资源的使用效率。

首先用户创建 Pod,向系统提交创建 Pod 的请求,Kubernetes 组件 APIServer接受用户的资源请求,将资源请求的信息逻辑层存储到 
Etcd 中保存,二级调度系统的上层调度也就是一级调度首先接受并初始处理用户的资源请求,比如将用户的资源格式化为调度系统所能识别的资源格式,这里会将 Memory 的资源请求除以 1000,并进行取整,以此来增大资源的利用率;上次调度接受用户请求并进行处理后,接下来进入下层的二级调度系统,首先登陆到 EGO 的系统中,登陆成功则进行 Client 的信息注册,进而进入最主要的资源分配阶段,首先进行资源分配,调度系统查找资源池中可用的资源,查找到可用的资源则进入到构建调度结果阶段,将可用的资源信息,创建 
Pod 的信息,用户注册的 Client 信息组织到一起,而后调度系统读取调度结果,最后将调度结果返回给整个云平台系统,本次任务调度资源分配结束,调度系统成功为用户分配到可用的资源。接下来就是Kubernetes 系统得知调度结束,使用系统分配的资源为用户的任务启动服务。

k8s自身的调度系统是接受待调度任务,然后根据待调度任务资源情况以及物理机节点情况来进行进行节点选择,最终执行任务调度。二级调度系统是将资源分配与任务调度分离,资源调度系统为任务分配资源,根据分配结果再进行任务调度。通过将资源调度和任务调度分离,使得资源调度提高调度效率,下层任务调度可以灵活的接入用户定义的任务调度算法和调度机制,这使得任务调度逻辑不仅可以根据不同应用要求而进行裁剪,而且保留了在集群之间共享资源的可能性。

参考论文:

[1]台慧敏. 基于Kubernetes-on-EGO的两级资源调度器的设计与实现[D].西安电子科技大学,2017.

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/84422613