掌桥专利:专业的专利平台
掌桥专利
首页

容器数量弹性伸缩方法以及容器数量弹性伸缩方法系统

文献发布时间:2023-06-19 11:32:36


容器数量弹性伸缩方法以及容器数量弹性伸缩方法系统

技术领域

本发明涉及计算机技术,具体地涉及一种基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统。

背景技术

对于各种IT系统,其所承载的负载不是一成不变的。当用户数量较多时,其负载会增高,导致所需要的资源(如cpu、内存等)也相应增加。反之,当用户数量较少时,其负载降低,所需资源相应减少。

为了保证服务质量,传统的解决方法是按照服务所需的最大资源进行分配,并一直保持这种资源配置。充足的资源保证了IT系统面对高负载仍然能够保证服务质量。然而it系统的服务高峰期往往比较短,大多数时间负载并不高。在系统处于低负载时,资源需求降低,大量已分配的资源得不到利用。这些无法利用的资源会带来大量的采购、维护及电力成本,给企业造成损失,所以it工程师一直通过各种方法减少资源浪费。

发明内容

鉴于上述问题,本发明旨在提出一种能够提前预测负载情况并提前进行资源准备的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统。

本发明的一方面的容器数量弹性伸缩方法,其特征在于,包括下述步骤:

数据记录步骤,记录Kubernetes集群的历史交易时序数据;

指标预测步骤,对所述数据记录步骤记录的历史交易时序数据使用规定算法模型进行建模而形成预测模型,使用所述预测模型以及所述历史交易时序数据来预测未来规定时间的交易时序数据,并且建立未来规定时间的预测指标;以及

动态分配步骤,根据所述预测指标对于所述Kubernetes集群中的容器数量进行弹性伸缩。

可选地,在所述数据记录步骤中,采用Prometheus、cAdvisor以及Zabbix中的任意一种采集历史交易时序数据。

可选地,在所述指标预测步骤中,使用Prophet算法模型或者ARIMA模型进行建模。

可选地,在所述指标预测步骤中,以接口形式提供对预测到的未来规定时间的预测指标的查询。

可选地,在所述数据记录步骤中采用Prometheus采集历史交易时序数据,在所述指标预测步骤中使用Prophet算法模型进行建模。

可选地,在所述动态分配步骤中,将所述预测指标聚合到Kubernetes API服务器,以提供水平自动伸缩即HPA查询的目标数据,并且根据所述HPA查询的目标数据以及所述预测指标对Kubernetes集群中的容器数量进行弹性伸缩。

可选地,在所述动态分配步骤中,对Kubernetes集群中的容器数量进行弹性伸缩是通过由HPA对象自动向Kubernetes发出命令以调整Kubernetes集群中的容器数量。

可选地,在所述动态分配步骤中,判断当前的Kubernetes集群中的容器数量是否满足第一规定时间的预测值,如果容器数量不满足第一规定时间的预测值则进行调整容器数量以满足第一规定时间的预测值,如果容器数量满足第一规定时间的预测值则进一步判断是否满足第二规定时间的预测值,如果第一规定时间的预测值小于第二规定时间的预测值,则不进行容器数量调整,否则进行调整容器数量调整以满足第一规定时间的预测值。

本发明一方面的容器数量弹性伸缩系统,其特征在于,包括:

数据记录模块,用于记录Kubernetes集群的历史交易时序数据;

指标预测模块,用于使用规定算法模型对所述数据记录模块采集的历史交易时序数据进行建模而形成预测模型,使用所述预测模型来预测未来规定时间的交易时序数据并且建立预测指标;以及

动态分配模块,用于根据所述预测指标对于所述Kubernetes集群中的容器数量进行弹性伸缩。

可选地,所述数据记录模块采用Prometheus、cAdvisor以及Zabbix中的任意一种采集历史交易时序数据。

可选地,所述指标预测模块使用Prophet算法模型或者ARIMA模型进行建模。

可选地,所述指标预测模块以接口形式提供对预测到的未来规定时间的预测指标的查询。

可选地,所述动态分配模块将所述预测指标聚合到Kubernetes API服务器,以提供水平自动伸缩即HPA查询的目标数据,并且根据所述HPA查询的目标数据以及所述预测指标对Kubernetes集群中的容器数量进行弹性伸缩。

可选地,在所述动态分配模块中,判断当前的Kubernetes集群中的容器数量是否满足第一规定时间的预测值,如果容器数量不满足第一规定时间的预测值则调整容器数量以满足第一规定时间的预测值,如果容器数量满足第一规定时间的预测值则进一步判断是否满足第二规定时间的预测值,如果第一规定时间的预测值小于第二规定时间的预测值,则不进行容器数量调整,否则进行调整容器数量调整以满足第一规定时间的预测值。

本发明的计算机可读介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述的容器数量弹性伸缩方法。

本发明的计算机设备,包括存储模块、处理器以及存储在存储模块上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述的容器数量弹性伸缩方法。

附图说明

图1是表示本发明的一个方面的基于时序数据预测模型的容器数量弹性伸缩方法的流程示意图。

图2是表示本发明一个发明的基于时序数据预测模型的容器数量弹性伸缩系统的结构框图。

图3是表示本发明一个实施方式的基于时序数据预测模型的容器数量弹性伸缩系统的结构框图。

图4是表示本发明的一个实施方式的基于时序数据预测模型的容器数量弹性伸缩方法的流程示意图。

具体实施方式

下面介绍的是本发明的多个实施例中的一些,旨在提供对本发明的基本了解。并不旨在确认本发明的关键或决定性的要素或限定所要保护的范围。

出于简洁和说明性目的,本文主要参考其示范实施例来描述本发明的原理。但是,本领域技术人员将容易地认识到,相同的原理可等效地应用于所有类型的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统,并且可以在其中实施这些相同的原理,以及任何此类变化不背离本专利申请的真实精神和范围。

而且,在下文描述中,参考了附图,这些附图图示特定的示范实施例。在不背离本发明的精神和范围的前提下可以对这些实施例进行电、机械、逻辑和结构上的更改。此外,虽然本发明的特征是结合若干实施/实施例的仅其中之一来公开的,但是如针对任何给定或可识别的功能可能是期望和/或有利的,可以将此特征与其他实施/实施例的一个或多个其他特征进行组合。因此,下文描述不应视为在限制意义上的,并且本发明的范围由所附权利要求及其等效物来定义。

诸如“具备”和“包括”之类的用语表示除了具有在说明书和权利要求书中有直接和明确表述的单元(模块)和模块以外,本发明的技术方案也不排除具有未被直接或明确表述的其它单元(模块)和模块的情形。

在对本发明的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统进行说明之前,首先对于将要出现的一些相关技术用语进行简单说明。

Docker(容器技术)是一组Paas(平台即服务)产品,使用操作系统级别的虚拟化将软件、库和配置文件捆绑在一起来进行软件交付。

Kubernetes是用于自动部署、扩展和管理容器化应用程序的开源系统。

Pod是Kubernetes应用程序的基本执行单元,其封装了应用程序容器以及存储、网络等相关依赖资源。每个Pod表示运行给定应用程序的单个实例,如果希望横向扩展应用程序,则应该在Kubernetes集群中运行多个Pod。

在Kubernetes集群中,Pod是所有业务类型的基础,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被统一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。Kubernetes不只是支持Docker容器,它也支持其他容器。Pod 的上下文可以理解成多个Linux命名空间的联合。

Deployments是用于为Pod和ReplicaSet提供描述性更新方式的控制器资源对象。通过更新Deployments来创建新的ReplicaSet,以受控速率将Pod从旧的ReplicaSet移动到新的ReplicaSet。 ReplicaSet是用于确保在任何时候都有特定数量的Pod副本处于运行状态的控制器资源对象,主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

HPA(HorizontalPodAutoscaler,水平自动伸缩)是Kubernetes的一种资源对象,能够根据某些指标对在Deployment等集合中的Pod数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。HPA特性由Metrics API和控制器实现。控制器根据HPA的定义,从resource metrics API或custom metrics API获取指标,将该指标与目标设定值相比较,生成一个缩放比例。

Prometheus是一个开源的服务监控系统和时间序列数据库,使用Go语言开发,可以与Kubernetes集成,从Kubernetes部署的Pod中采集数据。k8s-prometheus-adapter是部署在Kubernetes集群中用于为HPA提供custom metrics API的运行实例。

时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。

时间序列数据库是用于存储时间序列的专用数据库。

Prophet是Facebook开源的用于时间序列分析的模型,适合用于拟合具有较强周期性的数据,对缺失值、趋势便宜和异常值都有较好的支持。

Kubernetes-apiserver即指Kubernetes API服务器,为API对象验证和配置数据,这些对象包含Pod、Service、ReplicationController等等。

接着,对于本发明的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统的概要进行说明。

根据对现有技术的研究,本发明的发明人发现了现有技术的问题在于:对系统负载的调整具有滞后性,这种滞后主要是由于新资源的分配需要时间,例如在系统负载逐渐升高阶段,Kubernetes首先感知到cpu使用率升高,再根据当前情况计算出需要增加的资源,然后完成一次资源分配,这个过程一般需要几分钟时间,可以看出,当前的资源分配实际上是针对几分钟之前的系统负载情况做出的,具有滞后性。如果系统负载长时间持续增长,那么整个增长过程中,所分配的资源会一直低于所需要资源,同时,系统资源负载不能完全契合实际业务情况,即可能出现业务处理能力已经达到瓶颈时,cpu使用率并没达到触发HPA的阈值,导致资源调整不及时。

针对这样的技术问题,在本发明中,基于实际业务数据,并结合Prophet算法对数据进行预测,由此能够提前掌握业务的负载情况,保证在业务负载增大时容器资源也能够提前准备好。具体地,旨在实现在业务高峰期开启较多的服务以保证服务质量,在业务低峰期开启较少的服务以降低资源使用,在本发明中通过预测业务访问量,以开启相应数量的服务,从而达到提高服务质量并同时降低资源使用的目的。

在本发明中,主要采用的技术手段是使用Prophet算法,对一段时期内的历史业务指标进行学习,预测出今后一段时间的业务指标发展情况。根据预测结果,在系统运行过程中动态调整资源分配。本发明主要涉及Kubernetes容器架构,本发明的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统能够适合于例如在线交易系统(OLTP),在金融行业有广泛的应用场景,例如支付、账户类系统。

图1是表示本发明的一个方面的基于时序数据预测模型的容器数量弹性伸缩方法的流程示意图。

如图1所示,本发明的一个方面的基于时序数据预测模型的容器数量弹性伸缩方法,包括下述步骤:

数据记录步骤S100:记录Kubernetes集群的历史交易时序数据;

指标预测步骤S200:对所述数据记录步骤记录的历史交易时序数据使用规定算法模型进行建模而形成预测模型,使用所述预测模型以及所述历史交易时序数据来预测未来规定时间的交易时序数据,并且建立未来规定时间的预测指标;以及

动态分配步骤S300:根据所述预测指标对于所述Kubernetes集群中的容器数量进行弹性伸缩。

其中,在数据记录步骤S100中,采用Prometheus、cAdvisor以及Zabbix中的任意一种记录历史交易时序数据。其中,由于在k8s领域Prometheus的兼容性和适用性最好,可以优选采用Prometheus来记录历史交易时序数据。

在指标预测步骤S200中,使用Prophet算法模型或者ARIMA模型进行建模而形成预测模型。作为一个示例,预测模型的输入数据是单位时间内业务系统发生的交易事务总数、以及CPU、内存等性能数据,其输出数据是下一个单位时间内业务系统预计会产生的交易事务总数。

而且,在指标预测步骤S200中,以接口形式提供对预测到的未来规定时间的预测指标的查询。通过以接口形式提供,则其他容器可以通过HTTP GET方法访问预测模型容器固定地址,通常为http://<预测容器地址>/metrics,返回值即某一时间段的预测数据。其优点在于,便于Prometheus监控采集(Prometheus默认访问地址http://<预测容器地址>/metrics来进行指标采集)。

在指标预测步骤S200中建立预测指标的目的在于,预测指标是HPA对容器进行弹性伸缩的依据,传统方式下,HPA仅根据Pod的实时负载情况控制容器数量,这种方式不能准确反映业务是否真正即将达到高峰。在本发明中,根据Prophet算法建立的预测模型计算出预测数据,再由Prometheus监控采集保存为时序数据的指标,例如,以当前时间为12:00为例,预测模型预测出下一分钟业务交易数据为100笔,则Prometheus保存12:01的预测指标为100。

在动态分配步骤S300中,将所述预测指标聚合到Kubernetes API服务器,以提供水平自动伸缩即HPA查询的目标数据,并且根据所述HPA查询的目标数据以及所述预测指标对Kubernetes集群中的容器数量进行弹性伸缩。

具体地,将所述预测指标聚合到Kubernetes API服务器的过程包括:修改kube-apiserver的启动项以开启聚合功能;创建APIService对象,用于将自定义的API对象和Prometheus的查询目标绑定;使用k8s-prometheus-adapter镜像部署custom-metrics-apiserver对象到Kubernetes集群中,该对象告知Prometheus需要采集的目标数据以提供HPA查询的目标数据。

而且,在动态分配步骤S300中,对Kubernetes集群中的容器数量进行弹性伸缩是通过由HPA对象自动向Kubernetes发出命令以调整Kubernetes集群中的容器数量。

在动态分配步骤S300中,判断当前的Kubernetes集群中的容器数量是否满足第一规定时间的预测值,如果容器数量不满足第一规定时间的预测值则进行调整容器数量以满足第一规定时间的预测值,如果容器数量满足第一规定时间的预测值则进一步判断是否满足第二规定时间的预测值,如果第一规定时间的预测值小于第二规定时间的预测值,则不进行容器数量调整,否则进行调整容器数量调整以满足第一规定时间的预测值。

图2是表示本发明一个发明的基于时序数据预测模型的容器数量弹性伸缩系统的结构框图。

如图2所示,本发明一个发明的基于时序数据预测模型的容器数量弹性伸缩系统,其特征在于,包括:

数据记录模块10,用于记录Kubernetes集群的历史交易时序数据;

指标预测模块20,用于使用规定算法模型对所述数据记录模块采集的历史交易时序数据进行建模而形成预测模型,使用所述预测模型来预测未来规定时间的交易时序数据并且建立预测指标;以及

动态分配模块30,用于根据所述预测指标对于所述Kubernetes集群中的容器数量进行弹性伸缩。

其中,数据记录模块10采用Prometheus、cAdvisor以及Zabbix中的任意一种采集历史交易时序数据。

指标预测模块20使用Prophet算法模型或者ARIMA模型进行建模而形成预测模型。而且,指标预测模块20以接口形式提供对预测到的未来规定时间的预测指标的查询。

其中,动态分配模块30用于将所述预测指标聚合到Kubernetes API服务器,以提供水平自动伸缩即HPA查询的目标数据,并且用于根据所述预测指标对于所述Kubernetes集群中的容器数量进行弹性伸缩。

其中,述动态分配模块30中,判断当前的Kubernetes集群中的容器数量是否满足第一规定时间的预测值,如果容器数量不满足第一规定时间的预测值则调整容器数量以满足第一规定时间的预测值,如果容器数量满足第一规定时间的预测值则进一步判断是否满足第二规定时间的预测值,如果第一规定时间的预测值小于第二规定时间的预测值,则不进行容器数量调整,否则进行调整容器数量调整以满足第一规定时间的预测值。

接着,对于本发明的一个实施方式的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统进行说明。

在本实施方式中采用Prometheus来记录历史交易时序数据,采用Prophet算法建立预测模型,对一段时间内的历史业务指标进行学习,预测出未来一段时间内的业务指标,根据预测结果,调整Kubernetes集群中的资源分布。

图3是表示本发明一个实施方式的基于时序数据预测模型的容器数量弹性伸缩系统的结构框图。

如图3所示,本发明一个实施方式的基于时序数据预测模型的容器数量弹性伸缩系统包括:

数据记录模块100,用于采集Kubernetes集群的历史交易时序数据,例如每间隔1分钟对历史交易时序数据进行采集,得出每分钟该业务总的指标并使用时间序列数据库存储这些历史记录,并记录为T

指标预测模块200,用于使用Prophet算法模型对所述数据记录模块100采集的历史交易时序数据进行建模而形成预测模型,并且使用所述预测模型以及数据记录模块100记录的历史交易时序数据来预测未来规定时间的交易时序数据,并且建立预测指标,例如,指标预测模块200每隔1小时,读取最近一端时间(如1周)历史资源使用量T

动态分配模块300,用于将所述指标预测模块200生成的预测指标聚合到KubernetesAPI服务器,以提供水平自动伸缩即HPA查询的目标数据,并且,根据所述HPA查询的目标数据以及所述预测指标对Kubernetes集群中的容器数量进行弹性伸缩。

其中,动态分配模块300将指标预测模块200生成的预测指标聚合到KubernetesAPI服务器的过程包括:通过修改kube-apiserver的启动项以开启聚合功能,并且,创建APIService对象,以用于将自定义的API对象和Prometheus的查询目标绑定,使用k8s-prometheus-adapter 镜像部署 custom-metrics-apiserver对象到Kubernetes集群中,该对象告知Prometheus需要采集的目标数据以提供HPA查询的目标数据。

以下举例说明动态分配模块300进行动态资源分配的具体动作。

动态分配模块300通过读取指标预测模块200中的业务指标预测值,判断是否需要调整资源分配,如果需要调整资源分布,则向Kubernetes集群发出资源调整指令。例如,动态分配模块300每间隔1分钟读取指标预测模块200的业务指标预测值,获取未来30分钟内每分钟的业务指标预测值。然后执行如下过程:

(1)判断当前资源是否满足需求。首先查看当前时刻5分钟后的预测业务指标值T

(2)判断资源调整是否过于频繁。如果当前pod数小于5分钟后需求量,那么直接增加pod数量。如果当前pod数大于5分钟后需求量,则判断是否存在T

(3)调整资源分配。由HPA对象自动向Kubernetes发出命令,调整pod数量至max{ceil(T

图4是表示本发明的一个实施方式的基于时序数据预测模型的容器数量弹性伸缩方法的流程示意图。

如图4所示,本发明的一个实施方式的基于时序数据预测模型的容器数量弹性伸缩方法包括:

S1:在Kubernetes集群中以pod为单元执行业务;

S2:通过Prometheus监控收集Kubernetes集群的历史交易时序数据;

S3:利用S2中使用Prometheus监控采集Kubernetes集群的历史交易时序数据,通过Prophet算法模型预测未来规定时间的交易时序数据,并且建立未来规定时间的预测指标;

S4:将所述预测指标聚合到Kubernetes API服务器,包括将自定义的API对象和Prometheus的查询目标绑定,使用k8s-prometheus-adapter镜像部署custom-metrics-apiserver对象到Kubernetes集群中;

S5:提供水平自动伸缩即HPA查询的目标数据,即提供一个缩放比例;以及

S6:按照HPA查询的目标数据(缩放比例)对Kubernetes集群中的容器数量进行弹性伸缩。

另外,本发明还提供一种计算机可读介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述所述的基于时序数据预测模型的容器数量弹性伸缩方法。

进一步,本发明还提供一种计算机设备,包括存储模块、处理器以及存储在存储模块上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述的基于时序数据预测模型的容器数量弹性伸缩方法。

如上所述,根据本发明的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统,相对于现有技术中在实现资源的弹性分配过程中需要先检测到资源需求变化然后才能进行调整而具有一定滞后性的问题(尤其对于系统压力持续攀升的情况,在攀升时间段资源将长时间无法满足需求),本发明中,通过对资源需求的预测,提前对资源分配进行调整,可以大幅度避免滞后性。而且,相对于现有技术中的弹性分配过程中是根据cpu、内存使用量等常规系统负载指标而无法完全契合业务负载情况的问题,在本发明中通过采集实际业务指标并自定义指标服务供Kubernetes集群使用,可以实现根据业务量对资源进行弹性分配。

以上例子主要说明了本发明的基于时序数据预测模型的容器数量弹性伸缩方法以及基于时序数据预测模型的容器数量弹性伸缩系统。尽管只对其中一些本发明的具体实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。

相关技术
  • 容器数量弹性伸缩方法以及容器数量弹性伸缩方法系统
  • 一种基于kubernetes容器数量弹性伸缩的实现方法及其装置
技术分类

06120112966190