基于神经网络的Kubernetes调度优化方法与流程

文档序号:16067502发布日期:2018-11-24 12:49阅读:1209来源:国知局

本发明涉及云计算中的kubernetes技术,具体涉及一种基于神经网络的kubernetes调度优化方法。

背景技术

kubernetes作为轻量级的开源容器编排系统,它将应用程序拆分为可以执行特定进程的小型模块化服务,通过规定这些服务的关联规则来满足复杂应用程序的需求,使复杂应用更加灵活和稳定,更易于应用发布和模块更新,同时kubernetes系统默认集成弹性伸缩、自动负载均衡等功能,使得容器运行更高效、服务调度更便捷。在生产环境中各种资源的消耗对平台的弹性伸缩提出了很高的要求,弹性伸缩根据应用程序运行状态调配平台资源负载变化,是以动态延伸与缩减的方式增加或减少所需资源的技术,它通过精准的需求与实时的变化较好地解决了资源利用和应用系统调度之间的矛盾,提高资源的利用率和用户的满意度。

现阶段kubernetes的动态资源分配机制主要针对云平台的cpu资源进行调度,当云平台的部署应用处于内存高负载状态时,kubernetes因无法进行弹性扩展而导致应用内存溢出、服务不断重启等异常状况。



技术实现要素:

针对现有技术的不足,本发明提供一种对kubernetes内存资源进行智能调度的优化方法及系统,以解决kubernetes的容器应用中内存资源消耗过高导致系统稳定性降低的问题。本发明主要包括预测模型的构建以及资源调配算法,通过循环神经网络对kubernetes中node节点的内存消耗量进行预测,预测出内存消耗量在未来一段时间的变化,并将内存消耗数据输入到资源调配算法当中计算出需要增加的实例个数,kubernetes系统根据所得实例个数进行动态扩展,从而完成kubernetes基于内存资源的动态伸缩功能。预测模型的训练是在tensorflow平台中进行,通过系统的采集模块对内存消耗量进行采集,并将采集的数据输入到tensorflow当中,结合循环神经网络进行模型训练,最后得到模型具有一定的泛化能力可以对任意内存变化进行资源预测功能。

附图说明

图1为循环神经网络流程图。

图2为神经网络预测模型预测效果图。

图3为kubernetes系统优化总框图。

图4为神经网络预测模块详细设计图。

图5为kubernetes自动伸缩模块设计图。

图6为kubernetes自动伸缩模块详细设计图。

图7为kubernetes系统优化前后的效果对比图。

具体实施方式

神经网络模型设计包括如下步骤:

(1)数据预处理,主要负责将标准不同、尺度不一的多元异构数据标准化。在kubernetes系统当中,采集到的资源使用量来自不同节点的多种数据,数据中会存在资源异常波动值。若数据输入时存在较大差异的点,会导致训练过程中神经元权重发生波动或不正常偏移,进而影响模型的训练效果。为此,我们需要将原始数据进行标准化处理,将不同类别、大小的数据映射到相同的分布内。本发明采用归一化方法对数据进行预处理,将输入数据映射至[0,1]区间内,公式为:

其中x为输入数据的映射关系,x为数据集中的真实数据。

(2)输入层,主要负责对数据预处理过后数据进行特征提取,输入数据按预测时间间隔将数据整理为相应的时间序列数据。

(3)隐含层,主要负责数据特征的学习,是神经网络学习的核心。通过调整隐含层的宽度和深度,我们可以定向调整神经网络模型的学习能力。为达到最佳预测效果,本发明设计了多种隐藏层结构进行实验,包括两层结构的lstm(50-100)、lstm(50-500)以及三层结构的lstm(50-100-200)、lstm(50-500-1000)。

(4)dropout,主要负责加强训练模型的泛化能力,防止模型过拟合。本发明通过在训练过程中让部分神经元以一定概率不工作来达到dropout效果,在训练过程中,通过在每层设置dropout优化机制,每层都会有一定数量的神经元被暂时丢弃。由于每个训练批次所丢弃的神经元都是随机的,所以学习到较高权重的神经元有可能会被抑制,而“沉默”的神经元也有机会被激活。这使得模型可以具有跳出局部最优解的能力,并具有更强的模型泛化能力。

(5)输出层,主要负责整合隐含层的输出数据,为预测下一时间点数据做准备。本发明的资源预测模型主要通过收集50个单位时间内资源的变化数据预测第51个单位时间内存的数值,所以从本质上而言是一个回归问题。因此本例资源预测模型的输出层应由只有一个神经元组成的全连接层充当,并且其激活函数应为线性激活函数。构建不同的神经网络模型也同样能够实现本发明并获得类似的效果,本发明给出的实施模型是一种最优方案。

参照图1,循环神经网络流程包括如下步骤:

(1)通过kubernetes中的数据采集模块采集内存消耗数据;

(2)将采集的内存数据进行数据预处理操作,包括数据清洗,递补与替换;

(3)将预处理的数据集进行格式化,即切分为一定时间段的数据,并生成训练数据集;

(4)将训练数据集输入到循环神经网络当中训练出预测模型;

(5)对训练模型进行测试并进行模型评估。

其中模型评估指标使用平均绝对误差mae(meansquarederror)、均方根误差rmse(root-mean-squareerror)、一致性指标ia三种。

平均绝对误差(mae)用于衡量预测值与真实值相似程度的指标,其公式如下所示:

均方根误差rmse用于衡量预测值与真实值偏差的平方和测试次数n比值平方根的指标,其公式如下所示:

一致性指标ia用于衡量训练模型预测结果平均误差的指标,其公式如下所示:

其中p代表预测值,o代表真实值,ia表示预测值与真实值的关系,即ia越接近1说明预测值与真实值的分布越相似,拟合结果越准确。

参照图2,图中inputdata代表输入到训练模型的内存使用测试集数据,truedata代表输出这个时间段内内存使用的真实验证集数据,predictiondata代表模型根据inputdata得出的预测集数据,其中测试集50个数据即25s的内存变化,输入完毕预测集可以拟合150个数据,与验证集150个数据对比可以看出预测集拟合的曲线与测试集曲线趋势相似,并且预估出了内存变化的拐点,即服务即将崩溃的极限位置,系统可以根据拐点位置提前25秒做出相应,达到智能扩展的效果。

参照图3,其中的监控采集模块,通过在node节点上运行cadvisor容器来监控并采集资源消耗情况。资源预测模块,利用监控模块采集的数据建立预测模型,预测资源在未来一段时间的消耗,预测结果供调度模块和自动伸缩模块使用。自动伸缩模块,根据预测模块预测出资源的负载情况,结合资源调配算法计算节点上需要改变的pod副本数并对pod进行伸缩扩展,从而加快实例的响应速度,提高系统的资源利用率。

参照图4,神经网络预测模块详细设计步骤为:

(1)通过java语言编写web实例应用程序;

(2)将应用打包成war放入tomcat当中;

(3)当带有war包的tomcat通过dockerfile写入docker镜像中;

(4)将定制的docker镜像部署到kubernetes的当中;

(5)采集实例应用的资源使用量并采集数据输入到训练模型中得到预测模型。

参照图5,其中神经网络预测及资源调配算法为核心,资源调配算法执行步骤为:

(1)系统初始化,根据应用资源需求设置节点的规格系数;

(2)通过监控模块对系统负载信息进行收集,包括cpu、内存、网络等使用情况;

(3)将收集的复杂信息输入到资源调配算法当中,计算节点的资源负载情况并将计算结果进行输入到不同的队列;

(4)资源调度器根据负载情况进行资源调度,对高负载应用实例进行增加pod副本数操作,负载低应用实例进行减少pod副本数操作。

参照图6,kubernetes自动伸缩模块详细设计步骤为:

(1)将预测模型加载到kubernetes系统当中;

(2)采集数据并把数据输入到预测模型当中;

(3)根据预测模型结果结合资源调配算法构成自动伸缩模型;

(4)系统根据自动伸缩模型的策略进行资源的调度。

图7为kubernetes系统优化前后的效果对比图,从图中可知内存开始处于直线状态,此时并没有流量对应用进行访问,当内存开始变化时曲线开始上升,此时前的集群运行到内存极限之后出现异常导致pod重启,此时所有消耗内存释放,内存消耗达到最低点,此时应用处于崩溃状态,不能为用户提供服务,pod重启过后,用户访问流量持续增加会导致pod继续重启,此后集群会一直处于内存消耗上升内存极限pod重启过程,改建后的集群则是提前感应到内存的变化,提前做出相应对pod进行弹性扩展,pod副本数量增加,内存消耗量加剧,内存消耗越多证明服务对内存的需求越大,pod变多的同时服务质量保持稳定,从而可以持续的为用户提供优质服务,当访问流量减少后,自动伸缩模块的资源调配算法检测到资源负载处于轻负载状态,此时会启动弹性收缩功能,减少pod副本数量,此时内存下降,恢复至流量平缓状态。通过优化前后对比图可以看出预测模型与资源动态调度模块相结合,完成了pod的动态伸缩,使应用一直能保持健康运行的状态,平稳地渡过了高峰期。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1