一种容器云平台系统的搭建及运行方法转让专利

申请号 : CN201510656868.1

文献号 : CN105245373B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈文康赵光俊王汝英李欣荣高勇张海涛胡晓楠纪姗姗

申请人 : 天津市普迅电力信息技术有限公司

摘要 :

本发明涉及一种容器云平台系统的搭建及运行方法,步骤包括:(1)系统的搭建,(2)控制指令和业务指令的访问分流,(3)容器集群调度模块将访问请求转发至具体的容器,由具体的容器进行业务处理后返回给容器集群调度模块,然后返回处理结果给调用者,(4)主机容器化引擎模块将主机进行容器化,记录和维护当前平台中运行的应用和应用运行实例清单,支撑处理控制指令,转发指令信息,监控和反馈应用运行实例的状态,(5)总控制器模块实现容器云平台的控制指令的处理,(6)应用健康管理模块对应用情况进行监控,(7)消息总线进行云平台装置的消息通信。本发明将各个第三方应用以容器为单元进行依赖项的打包运行,相互之间隔离运行,不互相干扰,更加充分的利用主机的系统资源。

权利要求 :

1.一种容器云平台系统的搭建及运行方法,其特征在于:包括步骤如下:(1)系统的搭建,该系统包括负载均衡器,负载均衡器与容器集群调度模块及总控制器模块连接,负载均衡器是容器云平台的对外访问入口,负责控制指令和业务指令的访问分流及URL请求的权限验证,容器集群调度模块与主机容器化引擎模块连接,总控制器模块与消息总线连接,消息总线与应用健康管理模块连接;

其中,总控制器模块进一步包括权限控制模块和管理控制模块;

其中主机容器化引擎模块进一步包括服务器端、代理端及镜像仓库;

(2)控制指令和业务指令的访问分流,具体步骤如下:

①对URL请求进行解析,获取到访问的签名信息;

②将签名信息传递给总控制器模块,由总控制器模块的权限控制模块进行签名信息的验证,验证结果返回给负载均衡器;

③如果验证结果是失败,则负载均衡器给调用者返回失败信息,调用结束;如果验证结果是成功,则负载均衡器分析访问指令的类型,分析出是控制指令还是业务指令;

④如果是控制指令则将URL请求转发给总控制器模块,由总控制器模块进行控制指令的处理;

⑤如果是业务指令则将URL请求转发给容器集群调度模块,由容器集群调度模块进行业务指令的处理;

(3)容器集群调度模块负责访问的反向代理,将URL请求转发至具体的容器,由具体的容器进行业务处理后返回给容器集群调度模块,由容器集群调度模块返回处理结果给调用者;

具体步骤如下:

①在内存中建立由容器集群调度模块动态维护的路由表,结构如下:处理步骤为:

A,容器集群调度模块启动成功后,向消息总线发布容器集群调度模块启动成功消息;

B,主机容器化引擎模块中的代理端订阅容器集群调度模块启动成功消息,接收到消息后,主机容器化引擎模块中的代理端定时发送心跳消息到消息总线,消息总线包含本机运行的运行实例的具体信息;

C,容器集群调度模块订阅该心跳消息,接收到主机容器化引擎模块中代理端的心跳消息后,解析出应用名称、运行实例IP地址、运行实例端口;

D,如果该运行实例IP地址、运行实例端口在由容器集群调度模块动态维护的路由表中已经存在,则更新运行实例的最近心跳时间;

如果该运行实例IP地址、运行实例端口在由容器集群调度模块动态维护的路由表中不存在,则在由容器集群调度模块动态维护的路由表中新增一条路由记录;

②根据URL请求,容器集群调度模块解析出访问的应用名称;

③根据访问的应用名称,设置的调度策略,从容器集群调度模块中选择出合适的运行实例进行处理;

④将URL请求转给选择的运行实例;

⑤运行实例处理URL请求,完成具体的调用,将处理结果返回给容器集群调度模块;

⑥由容器集群调度模块将处理结果返回给前端调用者;

(4)主机容器化引擎模块负责将主机进行容器化,并对所有的容器进行统筹编排利用,负责记录和维护当前平台中运行的应用和运行实例清单,支撑总控制器模块中管理控制模块处理控制指令,负责接收总控制器模块转发的指令信息并维护应用和运行实例清单、监控和反馈运行实例的状态;

其中,主机容器化引擎模块中的服务器端负责接收总控制器模块转发的指令信息并转发给响应的代理端进行处理,主机容器化引擎模块中的服务器端接收的控制指令包括获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表;

其中,主机容器化引擎模块中的镜像仓库负责镜像的存储和下载服务,为主机容器化引擎模块中的服务器端处理构建应用镜像、删除应用镜像、获取应用镜像列表指令提供支撑;

其中,主机容器化引擎模块中的代理端运行部署在各种云主机、VMWare虚拟机上,利用容器技术,在其运行主机上根据主机容器化引擎模块中的服务器端转发的消息内容创建运行实例、删除运行实例、监控运行实例的运行状态,同时,主机容器化引擎模块中的代理端负责反馈运行实例的心跳、反馈所在运行主机的资源状态,主机容器化引擎模块中的代理端创建运行实例时,需要从镜像仓库获取镜像文件以创建镜像;主机容器化引擎模块中的代理端支撑主机容器化引擎模块中的服务器端,为服务器端获取应用清单、创建应用、删除应用以及更新应用的实例数量;

(5)总控制器模块负责容器云平台的控制指令的处理,包括权限控制和管理控制,权限控制负责控制URL请求的签名信息验证,管理控制负责向外提供REST风格的API,提供的API包括获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表,具体步骤内容如下:①建立总控制器模块维护应用签名信息表,结构如下:

应用名称 签名信息

②进行权限控制:

A,接收签名信息;签名信息包括下列特征:128位长度,具备唯一性,对应到唯一的应用,具备时间特性,能够失效,具备校验功能;

B,在应用签名信息表中寻找是否有对应的应用签名信息;

C,如果找到应用的签名信息,返回成功;如果没有找到应用的签名信息,返回失败;

③进行管理控制:

A,解析URL请求参数,分析操作的接口;

B,如果操作的接口是获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表,则将URL请求转发至主机容器化引擎模块;

C,主机容器化引擎模块进行操作,并将处理结果反馈给总控制器模块的管理控制模块;

D,由总控制器模块将处理结果返回给调用者。

(6)应用健康管理模块对应用情况进行监控,如果发现应用的运行状态和预期状态不一致,则由应用健康管理模块通知主机容器化引擎模块进行处理,从而完成应用运行状态的调整,步骤内容如下:应用健康管理模块启动后,启动两个线程,线程1订阅主机容器化引擎模块中代理端发布的心跳消息主题,并负责将心跳消息存储在键值对系统,线程2负责将应用的预期状态和运行状态进行比对,并告知主机容器化引擎模块处理状态差异。

两个线程的功能如下:

应用健康管理模块线程1始终监听消息总线,接收到心跳消息后,分析出应用名称、运行实例访问地址、运行实例的状态,以键值对的形式存放在键值对系统中;

应用健康管理模块线程2定时从主机容器化引擎模块获取当前应用的预期状态和预期的运行实例,并同时从键值对系统中获取当前应用的实际运行状态进行比对,判断出和预期状态的差异,并告知主机容器化引擎模块进行处理;

(7)消息总线负责容器云平台系统的消息通信,容器云平台系统的内部模块通过消息总线进行连接通信,消息总线提供消息主题的注册和订阅,生产者可以将要发布的消息主题注册到消息总线上,消费者如果要使用某类消息,在消息总线上订阅该消息主题即可。

2.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(3)中①步的在内存中建立由容器集群调度模块动态维护的路由表,所述路由表的内容描述为:应用名称是部署在容器中的应用的名称,一个应用对应一个或多个运行实例,并由运行实例提供具体的处理;调度策略为负载调度的处理策略,该调度策略支持的负载策略包括轮询、加权、哈希及默认策略;运行实例IP地址是访问容器应用时所使用的IP地址;运行实例端口是访问容器应用时所使用端口;运行实例心跳时间是容器最近的心跳时间。

3.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(4)中获取应用清单的具体步骤如下:①主机容器化引擎模块访问数据库表获取应用的名称、应用状态、对应的运行实例;

②主机容器化引擎模块组织数据返回给调用者。

4.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(4)中创建应用的具体步骤如下:①主机容器化引擎模块中的服务器端发送创建应用资源请求的消息到消息总线;

②主机容器化引擎模块中的代理端订阅该消息,各个代理端接收到消息后,通过计算,得到本主机可以创建的运行实例数量,并反馈给主机容器化引擎模块中的服务器端;

③主机容器化引擎模块中的服务器端设置超时时间,得到在一定时间范围内响应的代理端清单,综合这些代理端反馈的可创建的运行实例数量,将应用需要创建的运行实例数量按照比例分配各个代理端,各个代理端拟创建运行实例数量的计算公式如下:(代理端可创建的运行实例数量/所有代理端可创建的运行实例数量之和)×应用需要创建的运行实例数量)计算结果进位取整;

其中,主机容器化引擎模块中的服务器端给主机容器化引擎模块中的代理端分配可创建的运行实例数量的具体步骤如下:i,主机容器化引擎模块中的服务器端记录每次给代理端分配的创建实例数;

ii,每次给代理端分配创建的实例数默认值是通过上面公式计算出来的代理端拟创建的运行实例数量;

iii,如果已经创建的实例数量之和加上给代理端欲分配运行实例数量总和小于等于应用需要创建的运行实例数量,则给该代理端分配通过上面公式计算出来的代理端拟创建的运行实例数量;

iv,如果已经创建的实例数量之和加上给代理端欲分配运行实例数总和大于应用需要创建的运行实例数量,则给代理端分配创建的实例数等于应用需要创建的运行实例数量减去已经分配创建的实例数量;

④主机容器化引擎模块中的服务器端给指定的代理端发送需要创建的运行实例数量;

⑤代理端从镜像仓库获取镜像文件创建运行实例,创建完成后通过消息总线告知主机容器化引擎模块中的服务器端,并在容器集群调度模块中注册运行实例的访问路径;

⑥主机容器化引擎模块中的服务器端根据反馈的创建情况修改记录数据表中信息,当应用所需要的运行实例数量都创建完成后,修改应用的状态为启动中。

5.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(4)中删除应用的具体步骤如下:①主机容器化引擎模块中的服务器端分析出要删除的应用名称;

②主机容器化引擎模块中的服务器端发送删除应用的消息到消息总线;

③主机容器化引擎模块的代理端订阅删除应用的消息,接收到消息后判断自身所在的主机是否有该应用的运行实例,如果没有该应用的运行实例,不进行任何操作;如果有该应用的运行实例,删除该应用的运行实例;

而且,所述步骤(4)中更新运行实例数量的具体步骤如下:

①主机容器化引擎模块中的服务器端分析应用名称、变更的运行实例数量、变更操作类型;

②如果操作类型是增加运行实例,操作步骤和所述步骤(4)中创建应用的具体步骤一致;

③如果操作类型是减少运行实例,具体操作如下:

i、主机容器化引擎模块中的服务器端从记录表中获得当前的运行实例清单;

ii、主机容器化引擎模块中的服务器端随机选择出要删除的运行实例;

iii、主机容器化引擎模块中的服务器端发送要删除运行实例的消息到消息总线;

iv、主机容器化引擎模块中的代理端订阅该消息,接收到消息后判断自身所在的主机是否有该运行实例,如果没有该运行实例,不进行任何操作;如果有该运行实例,删除该运行实例。

6.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(4)中构建应用镜像的具体步骤如下:①主机容器化引擎模块中的服务器端接收调用者传入的应用组件包;

②主机容器化引擎模块从镜像仓库下载基础镜像,将应用组件包叠加到基础镜像上构建成一个新的应用镜像,并设置应用镜像的名称和标签;

③将应用镜像提交到镜像仓库;

④主机容器化引擎模块中的服务器端将应用镜像的构建信息,包括应用镜像的名称和标签反馈给调用者。

7.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(4)中删除应用镜像、获取应用镜像列表的具体步骤如下:删除应用镜像的步骤如下:

①主机容器化引擎模块中的服务器端接收调用者传入的要删除的镜像的名称和标签;

②调用镜像仓库的API完成镜像文件删除;

获取应用镜像列表的步骤如下:

①主机容器化引擎模块中的服务器端调用镜像仓库的API,获取镜像列表清单;

②主机容器化引擎模块中的服务器端组织返回数据,反馈结果给调用者。

8.根据权利要求1所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤(6)中步骤③的具体步骤如下:A、线程2定时从键值对系统中获取应用实际运行状态,获取到的每一个运行状态时刻作为一个快照;

B、线程2记录应用实际运行状态的最近三个快照,并对三个快照进行比较,如果三个快照状态不一致,判断为当前网络不稳定或者正在进行故障转移造成,这种情况下不进行处理;如果三个快照状态一致,开始判断运行实例实际运行状态和预期状态是否一致,判断完成后,判断应用的实例数量是否和预期数量一致。

9.根据权利要求8所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤B开始判断实际运行状态和预期状态是否一致的具体步骤如下:①根据主机容器化引擎模块提供的运行实例清单,逐一和键值对系统中记录进行比对,如果两者记录的运行实例状态不一致,调用主机容器化引擎模块的REST API完成状态变更;

②只比较处于运行和停止状态的运行实例,对处于中间状态的应用不进行处理,情况1:主机容器化引擎模块中的记录了该运行实例,但键值对系统中没有该运行实例的心跳,线程2通过调用主机容器化引擎模块的REST API新创建一个运行实例;

情况2:主机容器化引擎模块中记录的运行实例状态与键值对系统中记录的运行实例状态不一致,线程2通过主机容器化引擎模块的REST API修改运行实例状态;

情况3:主机容器化引擎模块中没有记录该运行实例,但键值对系统中有该运行实例的心跳,线程2通过调用主机容器化引擎模块的REST API移除该运行实例。

10.根据权利要求8所述的容器云平台系统的搭建及运行方法,其特征在于:所述步骤B中判断应用的实例数量是否和预期数量一致处理的具体步骤如下:①获取主机容器化引擎模块中记录的运行实例的数量,和键值对系统记录的运行实例的数量进行比较;

②只比较处于运行和停止状态的应用,其他状态不处理;

两者进行比较存在的可能情况包括:

情况1:如果主机容器化引擎模块记录的运行实例的数量多于键值对系统记录的运行实例数量,告知主机容器化引擎模块减少运行实例数量;

情况2:如果主机容器化引擎模块记录的运行实例数量少于键值对系统记录的运行实例数量,告知主机容器化引擎模块增加运行实例数量。

说明书 :

一种容器云平台系统的搭建及运行方法

技术领域

[0001] 本发明属于云平台技术领域,尤其是一种容器云平台系统的搭建及运行方法。

背景技术

[0002] 云Pass平台是一个基于云计算技术建立的IT资源池和公有云服务运营支撑平台。第三方软件开发商可在云Pass平台上快速开发部署应用产品并向最终用户提供服务,最终客户可在此平台上按需得到丰富的、安全的、高可靠性的应用服务。
[0003] 传统的云Pass平台通常采用虚拟机实现不同软件开发商应用的隔离,并将虚拟机作为调度的最小单元。采用虚拟机作为调度的最小单元存在很多问题,包括启动时间长、占用系统资源多、镜像存储文件大、运行实例的迁移调整耗时。
[0004] 容器技术是通过虚拟化操作系统的方式来管理代码和应用程序,是在2013年才开始出现并迅速兴起的一种虚拟化技术,容器技术主要是由一些技术型创新企业设计开发的,比如:BlueData、CoreOS、Docker、Kismatic、PortWorx等等,其中,Docker是容器技术的主要代表之一。容器技术使得可以将更多的计算工作负载塞入到一台服务器上,并且可以在一瞬间为新的计算任务提高增加容量。从理论上来说,这意味着可以购买较少的硬件,自建或租赁较少的数据中心场地,并且雇用较少的人手来管理这些设备。每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。为了能达到这种效果,容器技术使用了一系列的系统级别机制,诸如利用Linux namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
[0005] Linux容器技术的发展为解决传统的云Pass平台的痛点提供了可能。本专利申请就是利用容器技术实现的一种容器云平台装置及方法,该装置及方法以解决传统云Pass平台的痛点。

发明内容

[0006] 本发明的目的在于克服现有技术的不足,提供一种容器云平台系统的搭建及运行方法。
[0007] 本发明解决其技术问题是采取以下技术方案实现的:
[0008] 一种容器云平台系统的搭建及运行方法,包括步骤如下:
[0009] (1)系统的搭建,该系统包括负载均衡器,负载均衡器与容器集群调度模块及总控制器模块连接,负载均衡器是容器云平台的对外访问入口,负责控制指令和业务指令的访问分流及URL请求的权限验证,容器集群调度模块与主机容器化引擎模块连接,总控制器模块与消息总线连接,消息总线与应用健康管理模块连接;
[0010] 其中,总控制器模块进一步包括权限控制模块和管理控制模块;
[0011] 其中主机容器化引擎模块进一步包括服务器端、代理端及镜像仓库;
[0012] (2)控制指令和业务指令的访问分流,具体步骤如下:
[0013] ①对URL请求进行解析,获取到访问的签名信息;
[0014] ②将签名信息传递给总控制器模块,由总控制器模块的权限控制模块进行签名信息的验证,验证结果返回给负载均衡器;
[0015] ③如果验证结果是失败,则负载均衡器给调用者返回失败信息,调用结束;如果验证结果是成功,则负载均衡器分析访问指令的类型,分析出是控制指令还是业务指令;
[0016] ④如果是控制指令则将URL请求转发给总控制器模块,由总控制器模块进行控制指令的处理;
[0017] ⑤如果是业务指令则将URL请求转发给容器集群调度模块,由容器集群调度模块进行业务指令的处理;
[0018] (3)容器集群调度模块负责访问的反向代理,将URL请求转发至具体的容器,由具体的容器进行业务处理后返回给容器集群调度模块,由容器集群调度模块返回处理结果给调用者;
[0019] 具体步骤如下:
[0020] ①在内存中建立由容器集群调度模块动态维护的路由表,结构如下:
[0021]
[0022] 处理步骤为:
[0023] A,容器集群调度模块启动成功后,向消息总线发布容器集群调度模块启动成功消息;
[0024] B,主机容器化引擎模块中的代理端订阅容器集群调度模块启动成功消息,接收到消息后,主机容器化引擎模块中的代理端定时发送心跳消息到消息总线,消息总线包含本机运行的运行实例的具体信息;
[0025] C,容器集群调度模块订阅该心跳消息,接收到主机容器化引擎模块中代理端的心跳消息后,解析出应用名称、运行实例IP地址、运行实例端口;
[0026] D,如果该运行实例IP地址、运行实例端口在由容器集群调度模块动态维护的路由表中已经存在,则更新运行实例的最近心跳时间;
[0027] 如果该运行实例IP地址、运行实例端口在由容器集群调度模块动态维护的路由表中不存在,则在由容器集群调度模块动态维护的路由表中新增一条路由记录;
[0028] ②根据URL请求,容器集群调度模块解析出访问的应用名称;
[0029] ③根据访问的应用名称,设置的调度策略,从容器集群调度模块中选择出合适的运行实例进行处理;
[0030] ④将URL请求转给选择的运行实例;
[0031] ⑤运行实例处理URL请求,完成具体的调用,将处理结果返回给容器集群调度模块;
[0032] ⑥由容器集群调度模块将处理结果返回给前端调用者;
[0033] (4)主机容器化引擎模块负责将主机进行容器化,并对所有的容器进行统筹编排利用,负责记录和维护当前平台中运行的应用和运行实例清单,支撑总控制器模块中管理控制模块处理控制指令,负责接收总控制器模块转发的指令信息并维护应用和运行实例清单、监控和反馈运行实例的状态;
[0034] 其中,主机容器化引擎模块中的服务器端负责接收总控制器模块转发的指令信息并转发给响应的代理端进行处理,主机容器化引擎模块中的服务器端接收的控制指令包括获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表;
[0035] 其中,主机容器化引擎模块中的镜像仓库负责镜像的存储和下载服务,为主机容器化引擎模块中的服务器端处理构建应用镜像、删除应用镜像、获取应用镜像列表指令提供支撑;
[0036] 其中,主机容器化引擎模块中的代理端运行部署在各种云主机、VMWare虚拟机上,利用容器技术,在其运行主机上根据主机容器化引擎模块中的服务器端转发的消息内容创建运行实例、删除运行实例、监控运行实例的运行状态,同时,主机容器化引擎模块中的代理端负责反馈运行实例的心跳、反馈所在运行主机的资源状态,主机容器化引擎模块中的代理端创建运行实例时,需要从镜像仓库获取镜像文件以创建镜像;主机容器化引擎模块中的代理端支撑主机容器化引擎模块中的服务器端,为服务器端获取应用清单、创建应用、删除应用以及更新应用的实例数量;
[0037] (5)总控制器模块负责容器云平台的控制指令的处理,包括权限控制和管理控制,权限控制负责控制URL请求的签名信息验证,管理控制负责向外提供REST风格的API,提供的API包括获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表,具体步骤内容如下:
[0038] ①建立总控制器模块维护应用签名信息表,结构如下:
[0039]应用名称 签名信息
[0040] ②进行权限控制:
[0041] A,接收签名信息;签名信息包括下列特征:128位长度,具备唯一性,对应到唯一的应用,具备时间特性,能够失效,具备校验功能;
[0042] B,在应用签名信息表中寻找是否有对应的应用签名信息;
[0043] C,如果找到应用的签名信息,返回成功;如果没有找到应用的签名信息,返回失败;
[0044] ③进行管理控制:
[0045] A,解析URL请求参数,分析操作的接口;
[0046] B,如果操作的接口是获取应用清单、创建应用、删除应用、更新运行实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表,则将URL请求转发至主机容器化引擎模块;
[0047] C,主机容器化引擎模块进行操作,并将处理结果反馈给总控制器模块的管理控制模块;
[0048] D,由总控制器模块将处理结果返回给调用者。
[0049] (6)应用健康管理模块对应用情况进行监控,如果发现应用的运行状态和预期状态不一致,则由应用健康管理模块通知主机容器化引擎模块进行处理,从而完成应用运行状态的调整,步骤内容如下:
[0050] 应用健康管理模块启动后,启动两个线程,线程1订阅主机容器化引擎模块中代理端发布的心跳消息主题,并负责将心跳消息存储在键值对系统,线程2负责将应用的预期状态和运行状态进行比对,并告知主机容器化引擎模块处理状态差异。
[0051] 两个线程的功能如下:
[0052] 应用健康管理模块线程1始终监听消息总线,接收到心跳消息后,分析出应用名称、运行实例访问地址、运行实例的状态,以键值对的形式存放在键值对系统中;
[0053] 应用健康管理模块线程2定时从主机容器化引擎模块获取当前应用的预期状态和预期的运行实例,并同时从键值对系统中获取当前应用的实际运行状态进行比对,判断出和预期状态的差异,并告知主机容器化引擎模块进行处理;
[0054] (7)消息总线负责容器云平台系统的消息通信,容器云平台系统的内部模块通过消息总线进行连接通信,消息总线提供消息主题的注册和订阅,生产者可以将要发布的消息主题注册到消息总线上,消费者如果要使用某类消息,在消息总线上订阅该消息主题即可。
[0055] 而且,所述步骤(3)中①步的在内存中建立由容器集群调度模块动态维护的路由表,所述路由表的内容描述为:
[0056] 应用名称是部署在容器中的应用的名称,一个应用对应一个或多个运行实例,并由运行实例提供具体的处理;调度策略为负载调度的处理策略,该调度策略支持的负载策略包括轮询、加权、哈希及默认策略;运行实例IP地址是访问容器应用时所使用的IP地址;运行实例端口是访问容器应用时所使用端口;运行实例心跳时间是容器最近的心跳时间。
[0057] 而且,所述步骤(4)中获取应用清单的具体步骤如下:
[0058] ①主机容器化引擎模块访问数据库表获取应用的名称、应用状态、对应的运行实例;
[0059] ②主机容器化引擎模块组织数据返回给调用者。
[0060] 而且,所述步骤(4)中创建应用的具体步骤如下:
[0061] ①主机容器化引擎模块中的服务器端发送创建应用资源请求的消息到消息总线;
[0062] ②主机容器化引擎模块中的代理端订阅该消息,各个代理端接收到消息后,通过计算,得到本主机可以创建的运行实例数量,并反馈给主机容器化引擎模块中的服务器端;
[0063] ③主机容器化引擎模块中的服务器端设置超时时间,得到在一定时间范围内响应的代理端清单,综合这些代理端反馈的可创建的运行实例数量,将应用需要创建的运行实例数量按照比例分配各个代理端,各个代理端拟创建运行实例数量的计算公式如下:
[0064] (代理端可创建的运行实例数量/所有代理端可创建的运行实例数量之和)×应用需要
[0065] 创建的运行实例数量)
[0066] 计算结果进位取整;
[0067] 其中,主机容器化引擎模块中的服务器端给主机容器化引擎模块中的代理端分配可创建的运行实例数量的具体步骤如下:
[0068] i,主机容器化引擎模块中的服务器端记录每次给代理端分配的创建实例数;
[0069] ii,每次给代理端分配创建的实例数默认值是通过上面公式计算出来的代理端拟创建的运行实例数量;
[0070] iii,如果已经创建的实例数量之和加上给代理端欲分配运行实例数量总和小于等于应用需要创建的运行实例数量,则给该代理端分配通过上面公式计算出来的代理端拟创建的运行实例数量;
[0071] iv,如果已经创建的实例数量之和加上给代理端欲分配运行实例数总和大于应用需要创建的运行实例数量,则给代理端分配创建的实例数等于应用需要创建的运行实例数量减去已经分配创建的实例数量;
[0072] ④主机容器化引擎模块中的服务器端给指定的代理端发送需要创建的运行实例数量;
[0073] ⑤代理端从镜像仓库获取镜像文件创建运行实例,创建完成后通过消息总线告知主机容器化引擎模块中的服务器端,并在容器集群调度模块中注册运行实例的访问路径;
[0074] ⑥主机容器化引擎模块中的服务器端根据反馈的创建情况修改记录数据表中信息,当应用所需要的运行实例数量都创建完成后,修改应用的状态为启动中。
[0075] 而且,所述步骤(4)中删除应用的具体步骤如下:
[0076] ①主机容器化引擎模块中的服务器端分析出要删除的应用名称;
[0077] ②主机容器化引擎模块中的服务器端发送删除应用的消息到消息总线;
[0078] ③主机容器化引擎模块的代理端订阅删除应用的消息,接收到消息后判断自身所在的主机是否有该应用的运行实例,如果没有该应用的运行实例,不进行任何操作;如果有该应用的运行实例,删除该应用的运行实例;
[0079] 而且,所述步骤(4)中更新运行实例数量的具体步骤如下:
[0080] ①主机容器化引擎模块中的服务器端分析应用名称、变更的运行实例数量、变更操作类型;
[0081] ②如果操作类型是增加运行实例,操作步骤和所述步骤(4)中创建应用的具体步骤一致;
[0082] ③如果操作类型是减少运行实例,具体操作如下:
[0083] i、主机容器化引擎模块中的服务器端从记录表中获得当前的运行实例清单;
[0084] ii、主机容器化引擎模块中的服务器端随机选择出要删除的运行实例;
[0085] iii、主机容器化引擎模块中的服务器端发送要删除运行实例的消息到消息总线;
[0086] iv、主机容器化引擎模块中的代理端订阅该消息,接收到消息后判断自身所在的主机是否有该运行实例,如果没有该运行实例,不进行任何操作;如果有该运行实例,删除该运行实例。
[0087] 而且,所述步骤(4)中构建应用镜像的具体步骤如下:
[0088] ①主机容器化引擎模块中的服务器端接收调用者传入的应用组件包;
[0089] ②主机容器化引擎模块从镜像仓库下载基础镜像,将应用组件包叠加到基础镜像上构建成一个新的应用镜像,并设置应用镜像的名称和标签;
[0090] ③将应用镜像提交到镜像仓库;
[0091] ④主机容器化引擎模块中的服务器端将应用镜像的构建信息,包括应用镜像的名称和标签反馈给调用者。
[0092] 而且,所述步骤(4)中删除应用镜像、获取应用镜像列表的具体步骤如下:
[0093] 删除应用镜像的步骤如下:
[0094] ①主机容器化引擎模块中的服务器端接收调用者传入的要删除的镜像的名称和标签;
[0095] ②调用镜像仓库的API完成镜像文件删除;
[0096] 获取应用镜像列表的步骤如下:
[0097] ①主机容器化引擎模块中的服务器端调用镜像仓库的API,获取镜像列表清单;
[0098] ②主机容器化引擎模块中的服务器端组织返回数据,反馈结果给调用者。
[0099] 而且,所述步骤(6)中步骤③的具体步骤如下:
[0100] A、线程2定时从键值对系统中获取应用实际运行状态,获取到的每一个运行状态时刻作为一个快照;
[0101] B、线程2记录应用实际运行状态的最近三个快照,并对三个快照进行比较,如果三个快照状态不一致,判断为当前网络不稳定或者正在进行故障转移造成,这种情况下不进行处理;如果三个快照状态一致,开始判断运行实例实际运行状态和预期状态是否一致,判断完成后,判断应用的实例数量是否和预期数量一致。
[0102] 而且,所述步骤B开始判断实际运行状态和预期状态是否一致的具体步骤如下:
[0103] ①根据主机容器化引擎模块提供的运行实例清单,逐一和键值对系统中记录进行比对,如果两者记录的运行实例状态不一致,调用主机容器化引擎模块的REST API完成状态变更;
[0104] ②只比较处于运行和停止状态的运行实例,对处于中间状态的应用不进行处理,[0105] 情况1:主机容器化引擎模块中的记录了该运行实例,但键值对系统中没有该运行实例的心跳,线程2通过调用主机容器化引擎模块的REST API新创建一个运行实例;
[0106] 情况2:主机容器化引擎模块中记录的运行实例状态与键值对系统中记录的运行实例状态不一致,线程2通过主机容器化引擎模块的REST API修改运行实例状态;
[0107] 情况3:主机容器化引擎模块中没有记录该运行实例,但键值对系统中有该运行实例的心跳,线程2通过调用主机容器化引擎模块的REST API移除该运行实例。
[0108] 而且,所述步骤B中判断应用的实例数量是否和预期数量一致处理的具体步骤如下:
[0109] ①获取主机容器化引擎模块中记录的运行实例的数量,和键值对系统记录的运行实例的数量进行比较;
[0110] ②只比较处于运行和停止状态的应用,其他状态不处理;
[0111] 两者进行比较存在的可能情况包括:
[0112] 情况1:如果主机容器化引擎模块记录的运行实例的数量多于键值对系统记录的运行实例数量,告知主机容器化引擎模块减少运行实例数量;
[0113] 情况2:如果主机容器化引擎模块记录的运行实例数量少于键值对系统记录的运行实例数量,告知主机容器化引擎模块增加运行实例数量。
[0114] 本发明的优点和积极效果是:
[0115] 1、本发明利用容器技术,将云平台依赖的基础主机环境进行容器化,并将不同主机上的容器进行统筹编排利用,可以更加充分的利用主机的系统资源。
[0116] 2、本发明利用容器技术,以容器为应用的最小调度单元,解决了传统云Pass利用虚拟机技术作为应用的最小调度单元所带来的痛点,包括启动时间长、运行实例的迁移调整耗时等。
[0117] 3、本发明利用容器技术,提供了一种第三方应用在同一主机上的隔离运行方法。各个第三方应用以容器为单元进行依赖项的打包运行,相互之间隔离运行,不互相干扰。
[0118] 4、本发明利用容器技术,提供了一种第三方应用托管运行的装置和方法。该装置和方法可以监控托管应用的健康情况,及时的进行故障迁移和状态调整,响应速度优于传统云Pass平台。

附图说明

[0119] 图1是本发明的元平台装置连接示意图;
[0120] 图2是本发明中主机容器化引擎结构示意图。

具体实施方式

[0121] 以下结合附图对本发明实施例做进一步详述,需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,不能以此作为对本发明保护的范围的限定。
[0122] 一种容器云平台系统的搭建及运行方法,包括步骤如下:
[0123] (1)系统的搭建,如图1所示,该系统包括负载均衡器,负载均衡器与容器集群调度模块及总控制器模块连接,负载均衡器是容器云平台的对外访问入口,负责控制指令和业务指令的访问分流及访问请求的权限验证,容器集群调度模块与主机容器化引擎模块连接,总控制器模块与消息总线连接,消息总线与应用健康管理模块连接;
[0124] 其中,总控制器模块进一步包括权限控制模块和管理控制模块;
[0125] 其中,如图2所示,主机容器化引擎模块进一步包括服务器端、代理端及镜像仓库。
[0126] (2)控制指令和业务指令的访问分流,具体步骤如下:
[0127] ①对访问URL进行解析,获取到访问的签名信息;
[0128] ②将签名信息传递给总控制器模块,由总控制器模块的权限控制模块进行签名信息的验证,验证结果返回给负载均衡器。
[0129] ③如果验证结果是失败,则负载均衡器给调用者返回失败信息,调用结束;如果验证结果是成功,则负载均衡器分析访问指令的类型,分析出是控制指令还是业务指令;
[0130] ④如果是控制指令则将URL请求转发给总控制器,由总控制器进行控制指令的处理;
[0131] ⑤如果是业务指令则将URL请求转发给容器集群调度模块,由容器集群调度模块进行业务指令的处理;
[0132] (3)容器集群调度模块负责访问的反向代理,将访问请求转发至具体的容器,由具体的容器进行业务处理后返回给容器集群调度模块,由容器集群调度模块返回处理结果给调用者;
[0133] 其中,所述步骤(3)的步骤如下:
[0134] ①容器集群调度模块在内存中的动态维护路由表结构如下:
[0135]
[0136] 其中,应用名称是部署在容器中的应用的名称,一个应用对应一个或多个应用实例,并由应用实例提供具体的处理;调度策略为负载调度的处理策略,该调度策略支持的负载策略包括轮询、加权、哈希及默认,均为轮询策略;应用实例IP地址是访问容器应用时所使用的IP地址;应用实例端口是访问容器应用时所使用端口;应用实例心跳时间是容器应用时最近的心跳时间;
[0137] 处理的具体步骤如下:
[0138] A,容器集群调度模块启动成功后,向消息总线发布容器集群调度模块启动成功消息;
[0139] B,主机容器化引擎模块中的代理端订阅容器集群调度模块启动成功消息,接收到消息后,主机容器化引擎模块中的代理端定时发送心跳信息到消息总线,消息总线包含本机运行的应用实例的具体信息;
[0140] C,容器集群调度模块服务端订阅该心跳消息,接收到主机容器化引擎模块中代理端的心跳消息后,解析出应用名称、应用实例IP地址、应用实例端口;
[0141] D,如果该应用实例IP地址、应用实例端口在容器集群调度模块内存中维护的路由表中已经存在,则更新应用实例的最近心跳时间。
[0142] 如果该应用实例IP地址、应用实例端口在容器集群调度模块在内存中维护的路由表中不存在,则在容器集群调度在内存中维护的路由表新增一条路由记录;
[0143] ②根据URL请求,容器集群调度模块解析出访问的应用名称;
[0144] ③根据访问的应用名称,设置的调度策略,从容器集群调度模块中选择出合适的应用实例进行处理;
[0145] ④将访问请求转给选择的应用实例;
[0146] ⑤应用实例处理URL请求,完成具体的调用,将调用处理结果返回给容器集群调度模块;
[0147] ⑥由容器集群调度模块将调用结果返回给前端调用者;
[0148] (4)主机容器化引擎模块负责将主机进行容器化,并对所有的容器进行统筹编排利用,负责记录和维护当前平台中运行的应用和应用运行实例清单,一个应用对应到一个或多个应用运行实例,应用是逻辑概念,应用运行实例是应用实际的处理单元,每一个应用运行实例对应一个容器,支撑总控制器模块中管理控制模块处理控制指令,负责接收总控制器模块转发的指令信息并维护应用和应用运行实例清单、监控和反馈应用运行实例的状态;
[0149] 其中,主机容器化引擎模块中的服务器端负责接收总控制器转发的指令信息并转发给响应的代理端进行处理,服务端接受的控制指令包括获取应用清单、创建应用、删除应用、更新应用实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表;
[0150] 其中,主机容器化引擎模块中的镜像仓库负责镜像的存储和下载服务,为服务器端处理构建应用镜像、删除应用镜像、获取应用镜像列表指令提供支撑;
[0151] 其中,主机容器化引擎模块中的代理端运行部署在各种云主机、VMWare虚拟机、或者其它形式的主机上,利用容器技术,在其运行主机上根据服务端转发的消息内容创建运行实例、删除运行实例、监控运行实例的运行状态,同时,代理端负责反馈运行实例的心跳、反馈所在运行主机的资源状态,代理端创建运行实例时,需要从镜像仓库获取镜像文件以创建镜像,代理端为服务器端处理获取应用清单、创建应用、删除应用、更新应用的实例数量这些指令提供支撑,
[0152] 具体的,所述步骤(4)中获取应用清单的具体步骤如下:
[0153] ①主机容器化引擎模块访问数据库表获取应用的名称、应用状态、对应的运行实例;
[0154] ②主机容器化引擎模块组织数据返回给调用者;
[0155] 具体的,所述步骤(4)中创建应用的具体步骤如下:
[0156] ①主机容器化引擎模块中的服务端模块发送创建应用资源请求的消息到消息总线;
[0157] ②主机容器化引擎模块中的代理端订阅该消息,各个代理端接收到消息后,通过计算,得到本主机可以创建的运行实例数量,并反馈给服务器端模块;
[0158] ③服务端模块设置超时时间,得到在一定时间范围内响应的代理端清单,综合这些代理端反馈的可创建的运行实例数,将请求创建的实例数按照比例分配各个代理端,各个代理端拟创建运行实例数的计算公式如下:
[0159] (代理端可创建的运行实例数/所有代理端可创建的运行实例之和)×应用需要创建运行实例数,计算结果进位取整;
[0160] 其中,服务端给代理端分配可创建的运行实例数的具体步骤如下:
[0161] i,服务端记录每次给代理端分配的创建实例数;
[0162] ii,每次给代理端分配创建的实例数默认值是通过上面公式计算出来的代理端拟创建的运行实例数;
[0163] iii,如果已经创建的实例数之和加上给代理端欲分配运行实例数总和小于等于应用需要创建的运行实例数,则给该代理端分配通过上面公式计算出来的代理端拟创建的运行实例数;
[0164] iv,如果已经创建的实例数之和加上给代理端欲分配运行实例数总和大于应用需要创建的运行实例数,则给代理端分配创建的实例数等于应用需要创建的应用实例数减去已经分配创建的实例数。
[0165] ④服务端模块给指定的代理端发送需要创建的应用运行实例数;
[0166] ⑤代理端从镜像仓库获取镜像文件创建运行实例,创建完成后通过消息总线告知服务器端,并在容器集群调度中注册应用运行实例的访问路径;
[0167] ⑥服务器端根据反馈的创建情况修改记录数据表中信息,当应用所需要的运行实例数都创建完成后,修改应用的状态为启动中。
[0168] 其中,所述步骤(4)中删除应用的具体步骤如下:
[0169] ①容器化引擎服务端分析出要删除的应用名称;
[0170] ②容器化引擎服务端发送删除应用的消息到消息总线;
[0171] ③容器化引擎代理端订阅删除应用的消息,接收到消息后判断自身所在的主机是否有该应用的运行实例,如果没有该应用的运行实例,不进行任何操作;如果有该应用的运行实例,删除该应用的运行实例。
[0172] 其中,所述步骤(4)中更新应用实例数量的具体步骤如下:
[0173] ①容器化引擎服务端分析应用名称、变更的运行实例数量、变更操作类型(增加运行实例或者减少运行实例);
[0174] ②如果操作类型是增加运行实例,操作步骤和所述步骤(4)中创建应用的具体步骤一致;
[0175] ③如果操作类型是减少运行实例,具体操作如下:
[0176] i、容器化引擎服务端从记录表中获得当前的运行实例清单;
[0177] ii、容器化引擎服务端随机选择出要删除的运行实例;
[0178] iii、容器化引擎服务端发送要删除应用运行实例的消息到消息总线;
[0179] iv、容器化引擎代理端订阅该消息,接收到消息后判断自身所在的主机是否有该运行实例,如果没有该运行实例,不进行任何操作;如果有该运行实例,删除该运行实例。
[0180] 其中,所述步骤(4)中构建应用镜像的具体步骤如下:
[0181] ①容器化引擎服务端接收调用者传入的应用组件包;
[0182] ②容器化引擎从镜像仓库下载基础镜像,将应用组件包叠加到基础镜像上构建成一个新的应用镜像,并设置应用镜像的名称和标签;
[0183] ③将应用镜像提交到镜像仓库;
[0184] ④容器化引擎服务端将应用镜像的构建信息,包括应用镜像的名称和标签反馈给调用者。
[0185] 其中,所述步骤(4)的删除镜像具体步骤如下:
[0186] ①容器化引擎服务端接收调用者传入的要删除的镜像的名称和标签;
[0187] ②调用镜像仓库的API完成镜像文件删除。
[0188] 其中,所述步骤(4)中获取应用镜像的具体步骤如下:
[0189] ①容器化引擎服务端调用镜像仓库的API,获取镜像列表清单;
[0190] ②容器化引擎服务端组织返回数据,反馈结果给调用者。
[0191] (5)总控制器模块负载容器云平台的控制指令的处理,包括权限控制和管理控制,权限控制负责控制访问URL的签名信息验证,管理控制负责向外提供REST风格的API,提供的API包括获取应用清单、创建应用、删除应用、更新应用实例数量、构建应用镜像、删除应用镜像及获取应用镜像列表,具体步骤如下:
[0192] ①总控制器模块维护应用签名信息表,结构如下:
[0193]应用名称 签名信息
[0194] ②进行权限控制:
[0195] A,接收签名信息;签名信息包括下列特征:128位长度,具备唯一性,对应到唯一的应用,具备时间特性,能够失效,对签名信息具备校验功能;
[0196] B,在应用签名信息表中寻找是否有对应的应用签名信息;
[0197] C,如果找到应用的签名信息,返回成功;如果没有找到应用的签名信息,返回失败;
[0198] ③进行管理控制:
[0199] A,解析URL请求参数,分析操作的接口;
[0200] B,如果操作类型获取应用清单、创建应用、删除应用、更新应用实例数量、构建应用镜像、删除应用镜像、获取应用镜像列表,则将URL请求转发至主机容器化引擎;
[0201] C,主机容器引擎进行具体的操作,并将处理结果反馈给主控制器的管理控制模块;
[0202] D,由主控制器将调用结果返回给调用者。
[0203] (6)应用健康管理服务对应用情况进行监控,如果发现应用的运行状态和预期状态不一致,则由应用健康管理通知容器化引擎模块进行处理,从而完成应用运行状态的调整,
[0204] 步骤如下:
[0205] ①应用健康管理模块启动后,启动两个线程,线程1订阅容器化引擎中代理端发布的心跳消息主题,并负责将心跳消息存储在键值对系统,线程2负责将应用的预期状态和运行状态进行比对,并告知容器化引擎处理状态差异;
[0206] ②应用健康管理线程1始终监听消息总线,接收到心跳消息后,分析出应用名称、应用运行实例访问地址、应用运行实例的状态,以键值对的形式存放在键值对系统中;
[0207] ③应用健康管理线程2定时从容器化引擎获取当前应用的预期状态和预期的运行实例,并同时从键值对系统中获取当前应用的实际运行状态进行比对,判断出和预期状态的差异,并告知容器化引擎进行处理;
[0208] 其中,所述步骤③的具体步骤如下:
[0209] A、线程2定时从键值对系统中获取应用实际运行状态,获取到的每一个运行状态时刻作为一个快照;
[0210] B、线程2记录应用实际运行状态的最近三个快照,并对三个快照进行比较,如果三个快照状态不一致,判断为当前网络不稳定或者正在进行故障转移造成,这种情况下不进行处理;如果三个快照状态一致,开始判断应用实例实际运行状态和预期状态是否一致,判断完成后,判断应用的实例数量是否和预期数量一致。
[0211] 其中,所述步骤B中检查运行实例实际运行状态和预期状态是否一致的具体步骤如下:
[0212] i根据容器化引擎提供的应用实例清单,逐一和键值对系统中记录进行比对,如果两者记录的运行实例状态不一致,调用容器化引擎的REST API完成状态变更[0213] ii只比较处于运行和停止状态的应用实例,对处于中间状态的应用不进行处理[0214] 情况1:容器化引擎中的记录的实例在键值对系统中没有,线程2通知容器化引擎新创建一个实例
[0215] 情况2:容器化引擎中记录的实例在键值对系统中状态不一致,线程2通知容器化引擎修改实例状态
[0216] 情况3:容器化引擎中没有记录,但键值对系统中有心跳,线程2通知容器化引擎移除该实例
[0217] 而且,所述步骤B中判断应用的实例数量是否和预期数量一致的具体步骤如下:
[0218] i获取容器化引擎模块中记录的应用运行数量的期望值,和键值对系统记录的实例心跳数量进行比较;
[0219] ii只比较处于运行和停止状态的应用,其他状态不处理。
[0220] 两者进行比较存在的可能情况包括:
[0221] 情况1:如果容器化引擎记录的实例预期数量多于键值对系统记录的实例数量,告知容器化引擎减少运行实例;
[0222] 情况2:如果容器化引擎记录的实例预期数量少于键值对系统记录的实例数量,告知容器化引擎增加运行实例;
[0223] (7)消息总线负责云平台装置的消息通信,各个云平台内部模块通过消息总线进行连接通信,消息总线提供消息主题的注册和订阅,生产者可以将要发布的消息主题注册到消息总线上,消费者如果要使用某类消息,在消息总线上订阅该消息主题即可。