K8s 调度算法仿真

一、简介

假设目标是 Kubernetes 中对 pod 的调度优化,通过仿真测试的方式评估调度算法的优劣,算法包括随机调度(RAND)、先来先服务(FCFS)、公平调度(DRF)、模拟退火(SA)。以 RAND 和 FCFS 为基本调度算法,主要分析对比 DRF 和 SA 的优劣。

二、实验设计

2.1.测试环境

采用 java 进行仿真(代码:https://github.com/Happy1215225/Scheduler),对比在单 node 多 pod 的情况下,不同调度算法对资源利用率的影响。以五种 CPU 资源请求量和内存请求量不同的 pod 作为待调度 pod。

POD类型CPU requestRAM request
a150
b530
c1515
d305
e501

2.2.调度流程

用以上五种 pod 随机组成调度队列,调度算法每次选择一个 pod 进行调度,将 pod 放入 node 中,node 将分配 pod 其对应请求资源。调度完成的 pod 将移出队列,再选择新的 pod 进行调度,直到 node 再也无法装下任何一个 pod 为止。
假设 node 节点的 cpu 总资源量和 ram 总资源量相同,以 50 为间隔,分别设置 node 节点资源为 50~2500,进行 50 次测试,以分析在不同 node 资源的情况下不同算法的资源利用率。

2.3.待测算法

2.3.1 随机调度(RAND)

随机调度,每次从队列中随机选取 pod 进行调度。该调度算法只作为评价其他算法的参考。

2.3.2 先来先服务(FCFS)

每次从队列中选取最先进入队列的 pod 进行调度;

2.3.3 绝对公平调度(DRF)

DRF 算法,每次从队列中选取主导资源占比最低的 pod 进行调度。在介绍 DRF 算法之前,先介绍 Max-min Fairness (最大化最小公平算法)和主导资源的概念。

2.3.3.1 Max-min Fairness

假设我们将一个资源分配给多个用户,我们要公平的将资源分配给每一个用户,也就是说每个用户获取资源的权利是相等的。但是很多时候,有一些用户并不需要别的用户那么多的资源。我们采用最大最小化公平策略,也即满足每个用户的最小需求,并将多余的资源分配给其他的用户。
最大最小公平分配算法的形式化定义如下:

  • 资源按照需求递增的顺序进行分配
  • 不存在用户得到的资源超过自己的需求
  • 未得到满足的用户等价的分享资源

举个例子:有一四个用户的集合,资源需求分别是2,2.6,4,5,其资源总能力为 10,为其计算最大最小公平分配。
解决方法:我们通过几轮的计算来计算最大最小公平分配。第一轮,我们暂时将资源划分成 4 个大小为 2.5 的。由于这超过了用户 1 的需求,这使得剩了 0.5 个均匀的分配给剩下的 3 个人资源,给予他们每个 2.66。这又超过了用户 2 的需求,所以我们拥有额外的 0.066… 来分配给剩下的两个用户,给予每个用户 2.5+0.66…+0.033…=2.7。因此公平分配是:用户 1 得到 2,用户 2 得到 2.6,用户 3 和用户 4 每个都得到 2.7。

2.3.3.2 主导资源(Dominant Resource)

对一个用户所有资源类型分配的最多的分配叫做主导分配,与之对应的资源就是主导资源。那么不同用户的主导资源可能是不同的。比如对 CPU 繁忙型作业来说,它的主导资源就是 CPU;而对于 I/O 繁忙型作业,主导资源就是内存。DRF 只在每个主导资源上进行最大化最小分配。

2.3.3.3 DRF

DRF 认为,Max-min 虽然在公平调度方面做了大量的拓展,但是仍然局限于单一的资源分配。DRF 是 Max-min 算法在多资源环境下的拓展。DRF 算法满足以下四个特性:

  • 共享激励(Sharing incentive):相比每个用户只使用自己的集群分区,用户之间共享集群是更好的选择。考虑一个具有相同节点和n个用户的集群。如果不共享集群的话,用户就不能在一个由所有资源的 1/n 的组成的集群分区中分配更多的任务。
  • 防护策略(Strategy-proofness):用户不能通过谎报资源的方式去获取更多的资源分配。
  • 无嫉妒(Envy-freeness):一个用户不会更喜欢另一个用户的分配,即自己得到的分配永远是对自己而言最佳的。这一属性体现了公平的概念。
  • 帕累托效率(Pareto efficiency):从一种分配状态到另一种状态的变化中,在没有使任何用户境况变坏的前提下,使得至少一个用户变得更好,这就是帕累托改进或帕累托最优化。当一个状态下不在存在任何帕累托改进的可能时,即达到了帕累托效率,或帕累托最优。

DRF 算法流程如下:
DRF算法
我们假设一个拥有资源 9CPUs,18GB RAM 的系统,用户 A 的 task 需要资源为 <1 CPU,4 GB RAM>,则用户 A 的资源占比分别为 CPU 1/9,RAM 2/9,则用户 A 的主导资源就是 RAM。用户 B 的 task 需要资源 <3CPUs, 1GB RAM>,则用户 B 的主导资源为 CPU。最后 DRF 要求的结果就是平等权利的用户的主导资源占的份额是一样的,在这个基础上,尽可能最大化给每个用户的分配。分配给 A<3CPUs,12GB RAM> 运行 3 个 task;分配给 B<6CPUs,2GB> 资源可以运行两个 task。这样 A 的主导资源占的份额为 12/18=2/3,B 的主导资源占比 6/9 = 2/3。
在这里插入图片描述
我们模拟一下分配过程:在最开始,系统首先选择B执行任务。那么 B 的资源占比就变为了<3/9,1/18>,主导资源占比变为了 max<3/9,1/18>=3/9。接下来系统选择 A 执行任务,因为A 的主导资源占比为 0。在 A 执行完毕后,A 的资源占比变为了 <1/9,4/18>,主导资源占比为 max<1/9,4/18>=4/18。接下来系统继续选择 A 执行任务,因为 A 的主导资源占比更小(4/18<3/9)。以此类推,直至不能有新任务进行为止。

2.3.4 模拟退火(SA)

模拟退火算法(Simulated Annealing,SA)是迭代求解策略的一种随机寻优算法,其基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能。
模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。
模拟退火算法可以分解为解空间、目标函数和初始解 3 部分。其基本思想是:

  1. 初始化:初始温度 T T T (充分大),初始解状态 s s s (是算法迭代的起点),衰减准则 r r r ,终止温度 T m i n Tmin Tmin
  2. T > T m i n T>Tmin T>Tmin ,做第(3)至第(6)步;
  3. 产生新解 s ′ s' s(产生新解的方法可根据问题来设计);
  4. 计算增量 Δ t = c o s t ( s ′ ) − c o s t ( s ) \Delta t=cost(s')-cost(s) Δt=cost(s)cost(s),其中 c o s t ( s ) cost(s) cost(s) 为评价函数(最小化);
  5. Δ t \Delta t Δt 则接受 s ′ s' s 作为新的当前解,否则以概率 e x p ( − Δ t T ) exp(-{{\Delta t} \over{T}}) exp(TΔt) 接受 s ′ s' s 作为新的当前解;
  6. 如果满足终止条件则输出当前解作为最优解,结束程序。否则 T T T 逐渐减少: T = r × T T=r \times T T=r×T ,并转第3)步运算。

设计的调度算法利用 SA 和 FCFS 两种算法,算法流程图如下:
在这里插入图片描述

2.4. 测试指标

本次实验以最终调度结果的 CPU 资源利用率,内存利用率,调度 pod 个数,调度时间作为测试指标。

三、结果对比

3.1 四种算法对比

以下四个图片展示了四种指标随节点资源的变化,以及不同算法的对比。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • DRF:DRF 在 cpu 利用率、ram 利用率和调度 pod 数上,都要明显优于最基本的 FCFS 算法,且其所用时间与 FCFS 算法基本相同,因此初步证明了DRF 算法在提高资源利用率方面的可行性。
  • 模拟退火算法:在资源利用率上,模拟退火的优化效果很好,但是其运行时间过长,并且随着问题规模的增加呈上升趋势,这可能会影响集群整体性能。这是因为模拟退火采用迭代求解,在得到最优解之前,需要进行多次模拟调度。这也是启发式算法的缺点之一,遗传算法、蚁群算法等应该也存在该问题。

因此总体来看,DRF 算法效果可能会更好。

3.2 模拟退火结果

分别设置模拟退火算法的优化目标为:CPU 利用率、RAM 利用率、(CPU 利用率 + RAM 利用率)/2。得到其结果对比如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,模拟退火算法总能根据设置的目标函数,找到针对该目标的最优解。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值