基于Kubernetes负载特征的资源预测模型研究

2018-04-10 01:46谢文舟孙艳霞
网络安全技术与应用 2018年4期
关键词:租户配额内存

◆谢文舟 孙艳霞



基于Kubernetes负载特征的资源预测模型研究

◆谢文舟1孙艳霞2

(1.四川大学计算机学院 四川 610065;2.海康威视数字技术股份有限公司 浙江 310051)

Kubernetes是当前最流行的容器云管理平台。它是将计算机集群资源包括CPU、内存、网络带宽等整合之后按需供应给租户使用,在资源管理方面能满足租户动态的资源需求,因此减少了租户在基础设施以及系统维护上的成本。但是Kubernetes在管理租户资源动态需求时,是根据节点当前资源使用量来调整资源配额,这种方法是基于已经出现资源告警情况下进行调整,存在着应用程序由于资源超出限额暂时退出的问题。本文提出了一种基于过去一段时间的资源负载特征序列预测未来资源负载特征模型,该预测模型经过实验验证对未来资源负载情况有一定的预测作用,减少了租户应用程序出现暂时退出的情况,并且提高了资源利用率。

云计算;Kubernetes;预测

0 引言

Kubernetes是由Google公司开发并开源的用于管理跨宿主机容器集群的云计算管理工具,是目前PaaS(平台即服务)中最受关注的容器云平台。它构建在Docker之上,租户可以在其上创建和管理Docker容器集群,并为容器化的应用集群提供资源调度、自动化部署、服务发现、弹性伸缩、资源监控等一整套功能。

1 Kubernetes资源配额方法及优缺点分析

Kubernetes是一个容器集群管理平台。Kubernetes需要统计平台的资源使用情况,合理地将资源分配给容器使用,并且保证容器生命周期内有足够的资源可用。Kubernetes通过创建Namespace来隔离不同类型的应用程序,应用程序则通过Pod来供Kubernetes Scheduler调度和运行。Scheduler在调度Pod时会根据Pod的配置文件yaml中资源需求来选择合适的节点启动Pod。

1.1Kubernetes资源配额方法

在默认的情况下,运行中的Pod可以无限制的使用节点上的CPU和Memory资源,这意味着任意一个Pod都可以无限制地使用宿主节点上的计算资源,Pod可能导致Node上的CPU/Memory资源耗尽。Kubernetes1.2版本中发布了一新功能Resource Quota和Limit Range,即资源上限和资源配额。Resource Quota为每个Namespace申请资源配额,代表了Namespace拥有的计算资源总量;Limit Range则给每个待调度的Pods设置了一个资源使用上限,这个上限不能超过Namespace的资源配额。

Pod的资源请求能够保证有足够的资源供程序运行,资源的Limit Range防止Pod无限制地使用节点资源,导致其他Pod崩溃退出;Resource Quota则约束了同一个Namespace下Pod的Limit Range的最大值、Pod的总数等。Kubernetes提供API对象Resource Quota来实现资源配额。创建Pod的时候,可以在yaml配置文件中指定计算资源(目前支持的资源类型有CPU和内存),即指定每个容器的资源请求(Request)和资源限制(Limit),资源请求是容器所需的最小资源需求,资源限制则是容器不能超过的资源上限。它们的大小关系是(Quota表示Namespace的资源配额):

0<=Request<=Limit<= Quota.

1.2问题分析

无论Limit Range还是Resource Quota的配置,都是在Pod启动之前静态配置好的。Limit Range是调度Pod时静态写在yaml配置文件中,Resource Quota是在创建一个Namespace时写在配置yaml文件中的。那么,当Pod启动运行期间,同一个Namespace内的Pod资源消耗总量大于Resource Quota时会出现什么情况呢?即:

limitpoa0+ limitpoa1+…+limitpoai>Quota

其中iÎN,N为自然数。

Namespace中Pod内的容器若资源配额不够,DockerDamon则会将低优先级的容器暂时杀死。尽管Kubernetes在后续版本中集成了cAdvisor监控系统,它可以监视并输出处于运行状态的容器的资源使用信息,并通过直观的用户界面提供可视化的展示。但是,这种方法还是得依靠人工的方式来判断节点的负载和容器应用的资源使用趋势,然后调整应用容器的资源配额,这种方式不仅需要人工繁琐的计算,还可能对未来节点或者应用容器的资源使用趋势做出错误的判断,从而给租户带来不可挽回的损失。

2 资源使用量预测模型

针对Kubernetes在动态的资源需求方面存在的问题,本文提出了一种资源预测方法,该方法基于资源使用量的历史序列预测未来资源负载情况。在资源分配调整上,可以帮助Kubernetes根据预测值提前获知Pod的资源限额。

运行在集群中的应用容器消耗的计算机资源包括CPU、内存等,将节点上资源历史使用情况采集起来组成资源历史使用时间序列,然后利用这些历史数据通过时间序列预测模型来预测应用容器在未来时段资源使用量。ARIMA资源预测模型对资源的预测步骤可以描述为表1:

表1 ARIMA

3 实验

当前Kubernetes版本只支持CPU及内存资源配额的动态调整,故本实验主要考虑CPU和内存两类资源。实验环境搭建两个Kubernetes集群,一个是基于1.8.0版本,一个是在1.8.0版本上引入本文资源负载特征的预测模型模块之后的改进版本。两个集群都有一个Master节点、三个Node节点,配置下表所示。

表2 虚拟机配置

准备测试应用,启动Pod运行在Kubernetes集群中,初始Pod实例个数都为1,Pod内的容器副本数为3。然后使用压力测试工具ab来模拟用户请求,让这些测试应用表现出不同的特征,其中一个测试让应用表现出CPU高负载,另一个测试让应用表现内存高负载,且两个测试其他资源无压力。资源利用率数据通过Kubernetes平台下的cAdvisor监测工具获得并进行统计,最后比较Node节点的资源利用率曲线。

本次实验中,利用Kubernetes监控模块进行样本数据采集,采集的时间间隔为5s,总共采集120个数据作为样本序列,通过CPU样本序列值采用最小二乘法估计模型参数。然后再将序列值作为输入,计算出CPU的未来需求量值。内存高负载实验同样每隔5秒采集一次数据,120个数据作为样本序列,用同样的方法估计模型参数并计算出内存预测值。

根据CPU值计算出其利用率,如图1描绘的是CPU实际使用率与通过资源预测模型计算出的预测值计算出的利用率的关系,图2描绘的是内存实际使用率与通过资源预测模型计算出的预测值计算出的利用率的关系。从曲线变化图可以看出,资源预测模型计算出的值和资源实际使用量基本一致。内存高负载实验中内存使用的变化曲线图如图3所示,可以观察到,引入ARIMA预测模型之后,内存在增加负载后预测模型能及时预测并调整资源阈值,Pod上的容器应用不至于资源不足而退出,预测值也和目标资源实际需求值呈现一致性,而没有资源预测的容器应用由于OOM异常致使容器被强制退出,内存利用率下降明显。

图1 CPU资源使用率变化图

图2 内存资源使用率变化图

图3内存资源使用变化图

4 结束语

本文通过历史资源负载特征,引入了一种基于历史资源负载特征的预测模型,该模型给Kubernetes在当前资源分配提供了重要的参考。结果表明,引入基于资源负载特征的预测模型之后,节点上的应用因为资源使用量超出阈值而被强制退出的次数减少且资源利用率提高。当然,该模型只考虑了CPU和内存,没有充分考虑节点的其他类型的资源,后续我们还可以将这类资源考虑进来以此提高模型的预测准确性。

[1]杜军.基于Kubernetes的云端资源调度器的改进[D].浙江大学,2016.

[2]何思玫.面向容器云平台的集群资源调度管理器的设计与实现[D].浙江大学,2017.

[3]熊少峰, 王可东.自回归滑动平均建模中观测噪声方差估计的新方法[J].控制理论与应用,2013.

[4]徐慧娟.自回归AR模型的整体最小二乘分析研究[D].东华理工大学,2012.

[5]XinLi,ZhuzongQian,SangluLu,JieWu.Energy efficient virtual machine placement algorithm with balanced and improved resource utilization in a data center[J].Mathematical and Computer Modeling,2013.

国家重点研发计划(2016yfb0800604,2016yfb0800605),国家自然科学基金项目(61572334)。

猜你喜欢
租户配额内存
碳减排量及碳配额的区别
鱼粉:秘鲁A季配额低于预期,内外盘短期大幅上涨
多租户数据隔离及加密研究
基于多租户隔离的云安全建设
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
鱼粉:秘鲁A季配额公布,国内外鱼粉价格反弹
基于MVC模式的多租户portlet应用研究*
碳排放权交易配额拍卖机制研究
内存搭配DDR4、DDR3L还是DDR3?