用于多集群容器部署的系统和方法与流程

文档序号:16978482发布日期:2019-02-26 19:15阅读:281来源:国知局
用于多集群容器部署的系统和方法与流程

本发明涉及云计算领域,特别涉及一种用于多集群容器部署的系统和方法。



背景技术:

容器应用通常采用容器镜像+部署脚本的形式部署,首先将容器镜像上传到镜像仓库,然后通过容器集群编排器执行部署脚本,调度容器引擎下载容器镜像,运行容器实例。大型容器应用在很多业务场景下往往需要在多个容器集群中部署,例如业务迁移、分区就近服务、容灾备份等,现有容器应用跨集群部署方法均存在一定不足。现有技术中存在两种镜像仓库系统,分别是集中式镜像仓库系统和独立式镜像仓库系统。

图1是示意性地示出现有技术中的集中式镜像仓库系统的结构图。如图1所示,在该集中式镜像仓库系统中,多个集群共用同一个镜像仓库,集中式镜像仓库需要应对多个集群巨大的镜像存储和下载压力,而且容器集群与镜像仓库可能部署在不同地区,存在明显网络时延,影响镜像下载速度。

图2是示意性地示出现有技术中的独立式镜像仓库系统的结构图。如图2所示,在该独立式镜像仓库系统中,为每个集群设立一套镜像仓库,该方案需为每个集群单独上传镜像,而且要为每个集群修改部署脚本,将所有的镜像地址指向该集群的镜像仓库,多套容器镜像和部署脚本副本的存在不仅增加了应用跨集群部署的复杂度,也难以维护。



技术实现要素:

本发明的发明人发现上述现有技术中存在问题,并因此针对所述问题中的至少一个问题提出了一种新的技术方案。

根据本发明的第一方面,提供了一种用于多集群容器部署的系统,包括:容器引擎,用于向本地镜像仓库发送第一镜像下载地址获取请求,所述第一镜像下载地址获取请求包含所需要获得的容器镜像的镜像标识;并用于通过从所述本地镜像仓库返回的镜像下载统一资源定位符url从所述本地镜像仓库下载容器镜像;本地镜像仓库,用于在接收到所述第一镜像下载地址获取请求后,查询是否已经存储或缓存了与所述镜像标识对应的容器镜像;如果存在,则直接向所述容器引擎返回指向本地镜像仓库的镜像存储位置的镜像下载url;否则,向所述镜像管理中心发送第二镜像下载地址获取请求,所述第二镜像下载地址获取请求包含所述镜像标识;并在从所述镜像管理中心接收到指向远程镜像仓库的镜像下载url后,根据所述指向远程镜像仓库的镜像下载url从远程镜像仓库中将缺失的所述容器镜像下载到本地镜像缓存中,生成指向所述本地镜像缓存的镜像下载url,将所述指向本地镜像缓存的镜像下载url上报给镜像管理中心并返回给所述容器引擎;以及镜像管理中心,用于在接收到所述第二镜像下载地址获取请求后,向所述本地镜像仓库返回指向远程镜像仓库的镜像下载url。

在一个实施例中,所述镜像管理中心还用于在接收到所述第二镜像下载地址获取请求后,获取对应于所述镜像标识的容器镜像的层次依赖关系,并将所述层次依赖关系返回给所述本地镜像仓库;所述本地镜像仓库还用于在获得所述层次依赖关系后,将所述层次依赖关系中不存在的镜像标识加入待下载列表以下载对应的容器镜像,并将所述层次依赖关系返回给所述容器引擎;其中,所述待下载列表包含本地镜像仓库不存在的镜像标识和所依赖的父镜像标识及祖先镜像标识;所述容器引擎还用于在获得所述层次依赖关系后,查询并缓存与所述层次依赖关系中不存在的镜像标识对应的容器镜像。

在一个实施例中,在与所述镜像标识对应的容器镜像存储或缓存在多个远程镜像仓库的情况下,所述镜像管理中心采用轮转或随机的方式向所述本地镜像仓库返回与所述多个远程镜像仓库中的一个远程镜像仓库对应的镜像下载url;或者,所述镜像管理中心向所述本地镜像仓库返回与所述多个远程镜像仓库中负载最小的远程镜像仓库对应的镜像下载url。

在一个实施例中,所述指向远程镜像仓库的镜像下载url包含:远程镜像仓库地址和容器镜像信息;其中,所述容器镜像信息包括:镜像标识和镜像所属仓库信息。

在一个实施例中,所述镜像管理中心还用于在将所述层次依赖关系返回给所述本地镜像仓库的过程中,还将与所述指向远程镜像仓库的镜像下载url对应的容器镜像的任一层次的镜像文件的哈希校验码返回给所述本地镜像仓库;所述本地镜像仓库还用于从所述镜像管理中心接收并存储所述镜像文件的哈希校验码。

在一个实施例中,所述镜像管理中心还用于在容器镜像的任一层次的镜像文件内容发生变化的情况下,向缓存了该容器镜像的本地镜像仓库推送镜像文件变更通知;其中,所述镜像文件变更通知包含该容器镜像的镜像标识和变更后的镜像文件的哈希校验码;所述本地镜像仓库还用于在接收到所述镜像文件变更通知后,根据该容器镜像的镜像标识对所述变更后的镜像文件的哈希校验码进行验证,如果该哈希校验码与已经缓存的该容器镜像的镜像文件的原哈希校验码不一致,则根据该容器镜像的镜像标识从所述镜像管理中心查询获得对应的镜像下载url,并根据该镜像下载url从远程镜像仓库下载新的容器镜像。

在一个实施例中,所述本地镜像仓库还用于在所缓存的容器镜像失效后,将该失效的容器镜像自动删除,并调用所述镜像管理中心的镜像下载url删除接口删除所述本地镜像仓库的该失效的容器镜像的镜像下载url。

在一个实施例中,所述本地镜像仓库还用于在接收到所述镜像管理中心下发的镜像删除通知后,实时删除与所述镜像删除通知所包含的镜像标识对应的容器镜像;其中,远程镜像仓库作为存储容器镜像的原始镜像仓库,在所述原始镜像仓库删除该容器镜像后,调用镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识;所述镜像管理中心在接收到所述镜像删除通知后,向已经缓存了所述被删除的容器镜像的镜像仓库下发所述镜像删除通知。

在一个实施例中,所述本地镜像仓库还用于作为存储容器镜像的原始镜像仓库删除所存储的容器镜像,调用所述镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识;所述镜像管理中心还用于在接收到所述镜像删除通知后,向已经缓存了所述被删除的容器镜像的镜像仓库下发所述镜像删除通知。

在一个实施例中,所述镜像管理中心还用于将镜像删除指令下发给所述本地镜像仓库,其中,所述本地镜像仓库作为存储容器镜像的原始镜像仓库,所述镜像删除指令包含需要删除的容器镜像的镜像标识;并在接收到从所述本地镜像仓库返回的镜像删除通知后,向已经缓存了被删除的容器镜像的镜像仓库下发所述镜像删除通知;所述本地镜像仓库还用于在接收到所述镜像删除指令后,删除对应的容器镜像,调用所述镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识。

在一个实施例中,所述镜像标识包括:容器镜像的镜像名称和镜像版本。

在一个实施例中,所述系统还包括:部署工具,用于将容器镜像上传到所述本地镜像仓库,以及向选定的集群列表的容器集群编排器下发部署脚本;其中,所述本地镜像仓库还用于向所述镜像管理中心上报被上传的所述容器镜像的容器镜像信息;以及容器集群编排器,用于解析和执行所述部署脚本,从所述部署脚本获得镜像标识,并根据应用需要运行的容器实例数目调度相应数目的容器引擎,向需要被调度的容器引擎发送调度消息,其中所述调度消息包含所述需要运行的容器镜像的镜像标识;其中,所述容器引擎在接收到所述调度消息后,向本地镜像仓库发送所述第一镜像下载地址获取请求。

根据本发明的第二方面,提供了一种用于多集群容器部署的方法,包括:容器引擎向本地镜像仓库发送第一镜像下载地址获取请求,所述第一镜像下载地址获取请求包含所需要获得的容器镜像的镜像标识;所述本地镜像仓库在接收到所述第一镜像下载地址获取请求后,查询是否已经存储或缓存了与所述镜像标识对应的容器镜像;如果存在,则直接向所述容器引擎返回指向本地镜像仓库的镜像存储位置的镜像下载url;否则,向所述镜像管理中心发送第二镜像下载地址获取请求,所述第二镜像下载地址获取请求包含所述镜像标识;所述镜像管理中心在接收到所述第二镜像下载地址获取请求后,向所述本地镜像仓库返回指向远程镜像仓库的镜像下载url;所述本地镜像仓库在从所述镜像管理中心接收到指向远程镜像仓库的镜像下载url后,根据所述指向远程镜像仓库的镜像下载url从远程镜像仓库中将缺失的所述容器镜像下载到本地镜像缓存中,生成指向所述本地镜像缓存的镜像下载url,将所述指向本地镜像缓存的镜像下载url上报给镜像管理中心并返回给所述容器引擎;以及所述容器引擎通过从所述本地镜像仓库返回的镜像下载url从所述本地镜像仓库下载容器镜像。

在一个实施例中,所述方法还包括:所述镜像管理中心在接收到所述第二镜像下载地址获取请求后,获取对应于所述镜像标识的容器镜像的层次依赖关系,并将所述层次依赖关系返回给所述本地镜像仓库;所述本地镜像仓库在获得所述层次依赖关系后,将所述层次依赖关系中不存在的镜像标识加入待下载列表以下载对应的容器镜像,并将所述层次依赖关系返回给所述容器引擎;其中,所述待下载列表包含本地镜像仓库不存在的镜像标识和所依赖的父镜像标识及祖先镜像标识;以及所述容器引擎在获得所述层次依赖关系后,查询并缓存与所述层次依赖关系中不存在的镜像标识对应的容器镜像。

在一个实施例中,所述镜像管理中心向所述本地镜像仓库返回指向远程镜像仓库的镜像下载url的步骤包括:在与所述镜像标识对应的容器镜像存储或缓存在多个远程镜像仓库的情况下,所述镜像管理中心采用轮转或随机的方式向所述本地镜像仓库返回与所述多个远程镜像仓库中的一个远程镜像仓库对应的镜像下载url;或者,所述镜像管理中心向所述本地镜像仓库返回与所述多个远程镜像仓库中负载最小的远程镜像仓库对应的镜像下载url。

在一个实施例中,所述指向远程镜像仓库的镜像下载url包含:远程镜像仓库地址和容器镜像信息;其中,所述容器镜像信息包括:镜像标识和镜像所属仓库信息。

在一个实施例中,所述方法还包括:所述镜像管理中心在将所述层次依赖关系返回给所述本地镜像仓库的过程中,还将与所述指向远程镜像仓库的镜像下载url对应的容器镜像的任一层次的镜像文件的哈希校验码返回给所述本地镜像仓库;以及所述本地镜像仓库从所述镜像管理中心接收并存储所述镜像文件的哈希校验码。

在一个实施例中,所述方法还包括:所述镜像管理中心在容器镜像的任一层次的镜像文件内容发生变化的情况下,向缓存了该容器镜像的本地镜像仓库推送镜像文件变更通知;其中,所述镜像文件变更通知包含该容器镜像的镜像标识和变更后的镜像文件的哈希校验码;以及所述本地镜像仓库在接收到所述镜像文件变更通知后,根据该容器镜像的镜像标识对所述变更后的镜像文件的哈希校验码进行验证,如果该哈希校验码与已经缓存的该容器镜像的镜像文件的原哈希校验码不一致,则根据该容器镜像的镜像标识从所述镜像管理中心查询获得对应的镜像下载url,并根据该镜像下载url从远程镜像仓库下载新的容器镜像。

在一个实施例中,所述方法还包括:所述本地镜像仓库在所缓存的容器镜像失效后,将该失效的容器镜像自动删除,并调用所述镜像管理中心的镜像下载url删除接口删除所述本地镜像仓库的该失效的容器镜像的镜像下载url。

在一个实施例中,所述方法还包括:远程镜像仓库作为存储容器镜像的原始镜像仓库,在所述原始镜像仓库删除该容器镜像后,调用镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识;所述镜像管理中心在接收到所述镜像删除通知后,向已经缓存了所述被删除的容器镜像的镜像仓库下发所述镜像删除通知;以及所述本地镜像仓库在接收到所述镜像管理中心下发的镜像删除通知后,实时删除与所述镜像删除通知所包含的镜像标识对应的容器镜像。

在一个实施例中,所述方法还包括:所述本地镜像仓库作为存储容器镜像的原始镜像仓库删除所存储的容器镜像,调用所述镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识;以及所述镜像管理中心在接收到所述镜像删除通知后,向已经缓存了所述被删除的容器镜像的镜像仓库下发所述镜像删除通知。

在一个实施例中,所述方法还包括:所述镜像管理中心将镜像删除指令下发给所述本地镜像仓库,其中,所述本地镜像仓库作为存储容器镜像的原始镜像仓库,所述镜像删除指令包含需要删除的容器镜像的镜像标识;所述本地镜像仓库在接收到所述镜像删除指令后,删除对应的容器镜像,调用所述镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向所述镜像管理中心发送镜像删除通知,所述镜像删除通知包含所述被删除的容器镜像的镜像标识;以及所述镜像管理中心在接收到从所述本地镜像仓库返回的镜像删除通知后,向已经缓存了被删除的容器镜像的镜像仓库下发所述镜像删除通知。

在一个实施例中,所述镜像标识包括:容器镜像的镜像名称和镜像版本。

在一个实施例中,在容器引擎向本地镜像仓库发送第一镜像下载地址获取请求之前,所述方法还包括:部署工具将容器镜像上传到所述本地镜像仓库;所述本地镜像仓库向所述镜像管理中心上报被上传的所述容器镜像的容器镜像信息;所述部署工具向选定的集群列表的容器集群编排器下发部署脚本;以及所述容器集群编排器解析和执行所述部署脚本,从所述部署脚本获得镜像标识,并根据应用需要运行的容器实例数目调度相应数目的容器引擎,向需要被调度的容器引擎发送调度消息,其中所述调度消息包含所述需要运行的容器镜像的镜像标识;其中,所述容器引擎在接收到所述调度消息后,向本地镜像仓库发送所述第一镜像下载地址获取请求。

根据本发明的第三方面,提供了一种用于多集群容器部署的系统,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器的指令执行如前所述的方法。

根据本发明的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现如前所述的方法的步骤。

本发明中,通过部署在容器集群的本地镜像仓库获取和缓存远程镜像,集群内的容器引擎统一从本地镜像仓库中直接下载本地的容器镜像或远程的容器镜像,从而提升容器镜像下载速度,降低单一镜像仓库的镜像下载压力,加速容器应用跨集群部署,从而提升容器应用跨集群部署效率,缩短部署升级时间。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:

图1是示意性地示出现有技术中的集中式镜像仓库系统的结构图。

图2是示意性地示出现有技术中的独立式镜像仓库系统的结构图。

图3是示意性地示出根据本发明一个实施例的用于多集群容器部署的系统的结构图。

图4是示出根据本发明一个实施例的用于多集群容器部署的方法的流程图。

图5是示意性地示出根据本发明另一个实施例的用于多集群容器部署的系统的结构图。

图6是示意性地示出根据本发明另一个实施例的用于多集群容器部署的系统的结构图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图3是示意性地示出根据本发明一个实施例的用于多集群容器部署的系统的结构图。如图3所示,该系统可以包括:容器引擎31(或36)、本地镜像仓库32(或37)和镜像管理中心33。下面以容器引擎31、本地镜像仓库32和镜像管理中心33为例进行说明。

容器引擎31可以用于向本地镜像仓库32发送第一镜像下载地址获取请求,该第一镜像下载地址获取请求包含所需要获得的容器镜像的镜像标识;并可以用于通过从本地镜像仓库32返回的镜像下载url(uniformresourcelocator,统一资源定位符)从该本地镜像仓库32下载容器镜像。例如,镜像标识可以包括:容器镜像的镜像名称和镜像版本。容器引擎还可以在从本地镜像仓库下载容器镜像后,挂载容器资源,启动容器实例。

本地镜像仓库32可以包括:本地镜像缓存321和镜像代理模块322。当然,本地镜像仓库还可以包括:保存在磁盘存储或本地镜像缓存(如内存、闪存)中的容器镜像。

本地镜像仓库32(例如本地镜像仓库32的镜像代理模块322)可以用于在接收到第一镜像下载地址获取请求后,查询是否已经存储或缓存了与镜像标识对应的容器镜像;如果存在,则直接向容器引擎31返回指向本地镜像仓库的镜像存储位置的镜像下载url;否则,向镜像管理中心33发送第二镜像下载地址获取请求,该第二镜像下载地址获取请求包含上述镜像标识;并在从镜像管理中心33接收到指向远程镜像仓库37的镜像下载url后,根据该指向远程镜像仓库的镜像下载url从远程镜像仓库37中将缺失的容器镜像下载到本地镜像缓存321中,生成指向本地镜像缓存321的镜像下载url,将指向本地镜像缓存321的镜像下载url上报给镜像管理中心33并返回给容器引擎31。

本地镜像仓库可以通过镜像代理模块下载本地镜像仓库不存在的容器镜像(层)文件,并将容器镜像文件保存在本地镜像仓库的镜像缓存中,当容器引擎向本地镜像仓库请求获取镜像时,直接从本地仓库的镜像缓存返回镜像文件数据给容器引擎。

需要说明的是,本发明的术语“远程镜像仓库”是相对于不同集群的镜像仓库而描述的概念,实际上,远程镜像仓库相对于其自己所在集群的容器引擎也是本地镜像仓库。例如在图3中,在集群b中,本地镜像仓库37相对于容器引擎36是本地镜像仓库,但是相对于的集群a中的镜像仓库32可以看作远程镜像仓库;类似地,在集群a中,本地镜像仓库32相对于容器引擎31是本地镜像仓库,但是相对于的集群b中的镜像仓库37也可以看作远程镜像仓库,因此远程镜像仓库是一个相对的概念,以下类似。在下面的实施例中,以集群a中的镜像仓库32作为本地镜像仓库,集群b中的镜像仓库37作为远程镜像仓库来详细说明。

本地镜像仓库可以部署在集群的本地数据中心,存放本地容器镜像,向镜像管理中心上报本地镜像信息,从远程镜像仓库下载并缓存远程镜像。本地镜像仓库可以具有可供公网访问的ip地址或域名,本地镜像仓库的公网地址可以在镜像仓库启动时向镜像管理中心注册。

镜像管理中心33用于在接收到第二镜像下载地址获取请求后,向本地镜像仓库32返回指向远程镜像仓库37的镜像下载url。例如,该指向远程镜像仓库的镜像下载url可以包含:远程镜像仓库地址和容器镜像信息。该容器镜像信息可以包括:镜像标识和镜像所属仓库信息。镜像标识可以包括:容器镜像的镜像名称和镜像版本。

镜像名称是镜像的名称字符串,如mysql、wordpress等。镜像版本是镜像的版本字符串,如1.0.0、1.1.0、1.1.1-beta等。镜像名称和镜像版本一起可作为容器镜像的唯一标识(即镜像标识)。镜像所属仓库是指存放该镜像的原始镜像仓库,即该镜像最初上传的镜像仓库。除此之外,容器镜像信息还可以包括:镜像文件的哈希校验码、父镜像标识(以及祖先镜像标识)和镜像下载url列表等。镜像文件的哈希校验码是指对镜像文件用md5或sha等数据摘要算法生成的长度不小于128位的字符串,可用于识别镜像文件内容是否发生变化。父镜像标识是该镜像所依赖的下层镜像的唯一标识(包括父镜像名称和父镜像版本)。镜像下载url列表包含该镜像的一个或多个下载url,每个下载url指向一个镜像仓库,镜像下载地址的形式通常为:镜像所属仓库+镜像uri(uniformresourceidentifier,统一资源标识符)+镜像名称+镜像版本。例如,

http://registry1.ct.com:5000/gdapp/wordpress:4.8.0,

其中registry1.ct.com:5000为镜像所属仓库地址和端口,/gdapp为镜像资源uri路径,wordpress为镜像名称,4.8.0为镜像版本。

在上述实施例中,提供了一种用于多集群容器部署的系统。通过部署在容器集群本地镜像仓库自动发现、获取和缓存远程镜像,集群内的容器引擎统一从本地镜像仓库中直接下载本地的容器镜像或远程的容器镜像,从而提升容器镜像下载速度,降低单一镜像仓库的镜像下载压力,加速容器应用跨集群部署,从而提升容器应用跨集群部署效率,缩短部署升级时间。

在本发明的实施例中,本地镜像仓库的镜像可以保存在磁盘存储或高速缓存(即本地镜像缓存,例如内存、闪存)中,通常情况下,在磁盘存储的镜像是长时间持久化保存的,只要不主动删除就会一直保存,而在缓存中保存的镜像是临时存放的,超出了缓存的有效时间就会自动删除。同样地,远程镜像仓库的镜像也可以保存在磁盘存储或高速缓存(内存、闪存)中。因此,从远程镜像仓库下载镜像也是优先从缓存中获取镜像,缓存不存在再从磁盘存储中获取镜像。

在一个实施例中,在与镜像标识对应的容器镜像存储或缓存在多个远程镜像仓库的情况下,镜像管理中心33可以采用轮转(roundrobin)或随机的方式向本地镜像仓库32返回与该多个远程镜像仓库中的一个远程镜像仓库对应的镜像下载url。

在另一个实施例中,在与镜像标识对应的容器镜像存储或缓存在多个远程镜像仓库的情况下,镜像管理中心33可以向本地镜像仓库32返回与该多个远程镜像仓库中负载最小的远程镜像仓库对应的镜像下载url。例如,所有镜像仓库(包括所述多个远程镜像仓库)可以定时地向镜像管理中心上报自己的负载(例如每秒的下载量),当镜像管理中心需要向某一个本地镜像仓库下发镜像下载url时,可以从多个远程镜像仓库中选择负载最小的远程镜像仓库,将与该负载最小的该远程镜像仓库对应的镜像下载url返回给本地镜像仓库。本地镜像仓库从该远程镜像仓库下载容器镜像,由于负载最小,所有下载最快,从而可以提高下载速度,进一步提升容器应用跨集群部署效率,缩短部署升级时间。

在本发明的实施例中,容器镜像可以采用层次结构组织(即存在层次依赖关系),下层的镜像称为父镜像,上层的镜像称为子镜像,子镜像可以引用父镜像的文件,也可以覆盖父镜像的一个或多个文件,容器引擎可以通过镜像的层次关系从镜像仓库中下载容器主机上缺失的镜像层。例如,在一个5层的容器镜像中,顶层镜像是app1.0,app1.0的父镜像是tomcat8.1,tomcat8.1的父镜像是jre1.8.0.91,jre1.8.0.91的父镜像是glibc2.23,glibc2.23的父镜像是alpine3.4,因此,tomcat8.1、jre1.8.0.91、glibc2.23、alpine3.4均是镜像app1.0所依赖的底层镜像。镜像管理中心33还可以用于存储容器镜像的层次依赖关系。

在本发明的实施例中,镜像管理中心33还可以用于在接收到第二镜像下载地址获取请求后,获取对应于镜像标识的容器镜像的层次依赖关系,并将该层次依赖关系返回给本地镜像仓库32。该本地镜像仓库32还可以用于在获得该层次依赖关系后,将该层次依赖关系中不存在的镜像标识加入待下载列表以下载对应的容器镜像,并将该层次依赖关系返回给容器引擎;其中,该待下载列表可以包含本地镜像仓库不存在的镜像标识和所依赖的父镜像标识及祖先镜像标识(例如父镜像的父镜像标识等)。该容器引擎还可以用于在获得层次依赖关系后,查询并缓存与该层次依赖关系中不存在的镜像标识对应的容器镜像。

在上述实施例中,本地镜像仓库能够按照容器镜像的层次依赖关系从远程镜像仓库下载所依赖的所有底层镜像。容器镜像是有层次依赖关系的,在下载镜像前可以先解析容器镜像的层次依赖关系,只需从远程镜像仓库中下载缺失的镜像层次。例如,一个javaweb应用镜像包含应用层(app1.0.war)、中间件层(tomcat8.1)、jvm层(jre1.8.1)、基础库层(centos7.2),假设本地镜像仓库有jre1.8.1、centos7.2,没有对应的应用层和中间件层镜像,那么本地镜像仓库只需通过镜像管理中心获取缺失镜像的地址,从远程镜像仓库将缺失的容器镜像下载到本地镜像仓库。

在本发明的实施例中,镜像管理中心可以负责管理本地镜像仓库地址和容器镜像元数据,不保存镜像文件数据。镜像元数据是指容器镜像的基本信息,包括镜像名称、镜像版本、缓存有效期、镜像文件的哈希校验码、镜像所有者、创建时间、修改时间、父镜像名称、父镜像版本、镜像仓库、原始镜像下载地址等。通过父镜像名称和版本可以管理镜像各个层次的依赖关系。镜像文件数据是指可用于运行容器的镜像文件包,包括基础库、中间件和应用程序包等内容。镜像文件数据可以采用分层结构组织,比如将javaweb应用划分成三个镜像层,每个镜像层都有独立的下载url可供下载。

在本发明的实施例中,镜像管理中心33还可以用于在将层次依赖关系返回给本地镜像仓库32的过程中,还将与指向远程镜像仓库的镜像下载url对应的容器镜像的任一层次的镜像文件的哈希校验码返回给该本地镜像仓库32。该本地镜像仓库32还可以用于从镜像管理中心33接收并存储镜像文件的哈希校验码。

在一个容器集群中的节点数目通常是以千甚至万为单位计算的,而容器集群的数目比容器集群中的节点数目往往要少几个数量级,通常只有几个或十几个集群,也就是说只有几个或十几个本地镜像仓库需要向远程镜像仓库下载镜像,而容器节点的容器引擎只需访问本地镜像仓库。而且,同一个父镜像可以被多个子镜像共享,例如一个tomcat8.1可以被appa1.0、appb1.0、appc1.0共享。而且在本发明的实施例中,相同的镜像只需下载一次,例如本地镜像在第一次下载appa1.0时,如果tomcat8.1不存在,则执行下载(这时只需下载一次)。而在后面的流程中,如同appb1.0、appc1.0需要使用tomcat8.1,则直接从本地镜像缓存返回即可,不需要重新下载tomcat8.1。在appa1.0升级到appa1.1的情况下,如果appa1.1还是使用相同的父镜像tomcat8.1,则也不需要重新下载tomcat8.1。另外,对于大部分镜像而言,底层镜像的体积占比比较大,而且底层镜像往往可以复用,升级容器应用往往只需升级最顶层的体积占比比较小的镜像。因此,本发明实施例的系统可以提高部署效率。

在一个实施例中,本地镜像仓库可以并行地从远程镜像仓库下载不存在的层次的容器镜像。容器引擎也可以并行地从本地镜像仓库下载不存在的层次的容器镜像。通过并行下载,可以提高下载速度。

在本发明的实施例中,该镜像管理中心33还可以用于在容器镜像的任一层次的镜像文件内容发生变化的情况下,向缓存了该容器镜像的本地镜像仓库推送镜像文件变更通知;其中,该镜像文件变更通知包含该容器镜像的镜像标识和变更后的镜像文件的哈希校验码。该本地镜像仓库32还可以用于在接收到该镜像文件变更通知后,根据该容器镜像的镜像标识对该变更后的镜像文件的哈希校验码进行验证,如果该哈希校验码与已经缓存的该容器镜像的镜像文件的原哈希校验码不一致,则根据该容器镜像的镜像标识从镜像管理中心33查询获得对应的镜像下载url,并根据该镜像下载url从远程镜像仓库下载新的容器镜像。从而实现了在镜像文件内容发生变化的情况下对已经缓存的容器镜像的更新。

这里,镜像文件内容发生变化是指同一个镜像标识的镜像文件发生变化,镜像文件的哈希校验码会发生改变,但镜像标识不发生变化。本地镜像仓库对镜像文件的哈希校验码进行验证,只有校验码发生变化才需要重新下载镜像文件;镜像文件变更通知可以只发送给缓存了该镜像的本地镜像仓库,不一定必须广播给所有的本地镜像仓库。此外,镜像名称不变而镜像版本改变的情况属于镜像标识改变,需要通过更新部署脚本的方式升级。

在一个实施例中,本地镜像仓库32还可以用于在所缓存的容器镜像失效(即超出缓存有效期,例如有效期可以为24小时)后,将该失效的容器镜像自动删除,并调用镜像管理中心33的镜像下载url删除接口(图中未示出)删除本地镜像仓库的该失效的容器镜像的镜像下载url。

在另一个实施例中,本地镜像仓库32还可以用于在接收到镜像管理中心33下发的镜像删除通知后,实时删除与镜像删除通知所包含的镜像标识对应的容器镜像。其中,远程镜像仓库作为存储容器镜像的原始镜像仓库,在该原始镜像仓库删除该容器镜像后,调用镜像管理中心的镜像下载url删除接口(图中未示出)删除该被删除的容器镜像的所有镜像下载url,并向镜像管理中心33发送镜像删除通知,该镜像删除通知包含被删除的容器镜像的镜像标识;该镜像管理中心33在接收到该镜像删除通知后,向已经缓存了被删除的容器镜像的镜像仓库下发该镜像删除通知。在该实施例中,在对缓存的容器镜像删除的过程中,镜像管理中心可以只向缓存该容器镜像的镜像仓库下发镜像删除通知,镜像管理中心可通过与该容器镜像绑定的镜像下载url获得对应的镜像仓库地址,每个镜像仓库均可以有一个镜像文件删除接口。

在上述实施例中,对于本地镜像仓库缓存的镜像删除有两种方式:一种是超出镜像的缓存有效期,由缓存清理机制自动删除;另一种是接收到镜像管理中心下发的镜像删除通知,实时删除对应的镜像。因此,本地镜像仓库可以自动从远程镜像仓库中获取镜像,监听远程镜像状态事件,可按镜像过期时间或镜像删除事件自动清除缓存的远程容器镜像。

在一个实施例中,本地镜像仓库32还可以用于作为存储容器镜像的原始镜像仓库删除所存储的容器镜像,调用镜像管理中心33的镜像下载url删除接口(图中未示出)删除该被删除的容器镜像的所有镜像下载url,并向该镜像管理中心33发送镜像删除通知,该镜像删除通知包含被删除的容器镜像的镜像标识。该镜像管理中心33还可以用于在接收到该镜像删除通知后,向已经缓存了该被删除的容器镜像的镜像仓库下发镜像删除通知。

在另一个实施例中,镜像管理中心33还可以用于将镜像删除指令下发给本地镜像仓库32,其中,该本地镜像仓库32作为存储容器镜像的原始镜像仓库,该镜像删除指令包含需要删除的容器镜像的镜像标识;并在接收到从该本地镜像仓库32返回的镜像删除通知后,向已经缓存了被删除的容器镜像的镜像仓库下发该镜像删除通知。该本地镜像仓库32还用于在接收到镜像删除指令后,删除对应的容器镜像,调用所述镜像管理中心33的镜像下载url删除接口(图中未示出)删除该被删除的容器镜像的所有镜像下载url,并向该镜像管理中心33发送镜像删除通知,该镜像删除通知包含被删除的容器镜像的镜像标识。

在本发明的实施例中,如图3所示,该系统还可以包括:部署工具34和容器集群编排器35。该部署工具34可以包括命令行工具。

该部署工具34可以用于将容器镜像上传到本地镜像仓库32,以及向选定的集群列表的容器集群编排器35下发部署脚本。该本地镜像仓库32还可以用于向镜像管理中心33上报被上传的容器镜像的容器镜像信息。

例如,该部署脚本可以包括:部署名称、实例数目、镜像信息、标签信息、服务端口、环境变量(例如db(database,数据库)地址、db账号、db密码)、容器资源配置(例如cpu核数、内存大小)、存储资源配置(例如数据卷名称、挂载目录)、网络资源配置(例如子网名称、带宽限制等)等。以容器编排平台kubernetes的部署脚本为例,worpress应用的部署脚本示例如下:

在部署脚本中定义的镜像地址可以有三种形式:1)镜像名称+镜像版本,例如webportal:1.0.0,镜像仓库地址默认为容器引擎配置的本地镜像仓库;2)uri路径+镜像名称+镜像版本,例如/cache/webportal:1.0.0,镜像仓库地址为容器引擎配置的本地镜像仓库;3)镜像仓库地址+镜像uri+镜像名称+镜像版本,例如http://registry1.ct.com:5000/cache/webportal:1.0.0。

镜像名称+镜像版本可作为容器镜像的唯一标识,可通过镜像名称+镜像版本查询所在镜像仓库的全局url,通过全局url从远程镜像仓库中下载镜像。此外,本地镜像仓库可以根据部署脚本定义的镜像仓库公网url或私网url(需要用私网url从管理中心查找公网url)从远程镜像仓库下载镜像。

该容器集群编排器35可以用于解析和执行部署脚本,从该部署脚本获得镜像标识,并根据应用需要运行的容器实例数目调度相应数目的容器引擎,向需要被调度的容器引擎31发送调度消息,其中该调度消息包含需要运行的容器镜像的镜像标识。其中,该容器引擎31在接收到该调度消息后,向本地镜像仓库32发送第一镜像下载地址获取请求。

在上述实施例中,简化了容器镜像与部署脚本维护,容器镜像只需上传一次,部署脚本只需编写一份,容器引擎将镜像地址自动替换成本地镜像仓库地址。例如,容器引擎可以忽略部署脚本中定义的远程镜像仓库地址,总是将镜像的下载地址执向本地镜像仓库,因此只要镜像名称和镜像版本是正确的,无论部署脚本的镜像地址指向哪个镜像仓库,容器引擎均通过本地镜像仓库下载容器镜像,这可以提高下载速度,从而提升部署速率。

在一个实施例中,可以引入一个脚本仓库,通过脚本仓库管理部署脚本,先将部署脚本上传到脚本仓库中,然后通过部署工具选择需要部署的一个或多个集群,同时向对应集群的容器集群编排器下发部署指令,容器集群编排器从脚本仓库下载并执行部署脚本,调度容器引擎完成后续部署工作。在该实施例中,在脚本仓库中存储一个部署脚本,不管集群有几个,都可以部署该脚本,相比现有技术中需要有多个部署脚本对应多个集群,本发明的该实施例更加方便快捷。

图4是示出根据本发明一个实施例的用于多集群容器部署的方法的流程图。

在步骤s401,容器引擎向本地镜像仓库发送第一镜像下载地址获取请求,该第一镜像下载地址获取请求包含所需要获得的容器镜像的镜像标识。例如,该镜像标识可以包括:容器镜像的镜像名称和镜像版本。

在步骤s402,本地镜像仓库在接收到第一镜像下载地址获取请求后,查询是否已经存储或缓存了与镜像标识对应的容器镜像。如果是,则过程进入步骤s403,否则过程进入步骤s404。

在步骤s403,本地镜像仓库直接向容器引擎返回指向本地镜像仓库的镜像存储位置的镜像下载url。

在步骤s404,本地镜像仓库向镜像管理中心发送第二镜像下载地址获取请求,该第二镜像下载地址获取请求包含所述镜像标识。

在步骤s405,镜像管理中心在接收到第二镜像下载地址获取请求后,向本地镜像仓库返回指向远程镜像仓库的镜像下载url。例如,该指向远程镜像仓库的镜像下载url可以包含:远程镜像仓库地址和容器镜像信息。其中,该容器镜像信息可以包括:镜像标识和镜像所属仓库信息。

在一个实施例中,该镜像管理中心向本地镜像仓库返回指向远程镜像仓库的镜像下载url的步骤可以包括:在与镜像标识对应的容器镜像存储或缓存在多个远程镜像仓库的情况下,镜像管理中心采用轮转或随机的方式向本地镜像仓库返回与该多个远程镜像仓库中的一个远程镜像仓库对应的镜像下载url;或者,该镜像管理中心向本地镜像仓库返回与该多个远程镜像仓库中负载最小的远程镜像仓库对应的镜像下载url。

在步骤s406,本地镜像仓库在从镜像管理中心接收到指向远程镜像仓库的镜像下载url后,根据该指向远程镜像仓库的镜像下载url从远程镜像仓库中将缺失的容器镜像下载到本地镜像缓存中,生成指向本地镜像缓存的镜像下载url,将该指向本地镜像缓存的镜像下载url上报给镜像管理中心并返回给容器引擎。

在步骤s407,容器引擎通过从本地镜像仓库返回的镜像下载url从该本地镜像仓库下载容器镜像。

在上述实施例中,提供了一种用于多集群容器部署的方法。通过部署在容器集群本地镜像仓库自动发现、获取和缓存远程镜像,集群内的容器引擎统一从本地镜像仓库中直接下载本地镜像或远程镜像,从而提升容器镜像下载速度,降低单一镜像仓库的镜像下载压力,加速容器应用跨集群部署,从而提升容器应用跨集群部署效率,缩短部署升级时间。

在一个实施例中,上述方法还可以包括:镜像管理中心在接收到第二镜像下载地址获取请求后,获取对应于镜像标识的容器镜像的层次依赖关系,并将该层次依赖关系返回给本地镜像仓库;该本地镜像仓库在获得该层次依赖关系后,将该层次依赖关系中不存在的镜像标识加入待下载列表以下载对应的容器镜像,并将该层次依赖关系返回给容器引擎;其中,该待下载列表可以包含本地镜像仓库不存在的镜像标识和所依赖的父镜像标识及祖先镜像标识;以及该容器引擎在获得该层次依赖关系后,查询并缓存与该层次依赖关系中不存在的镜像标识对应的容器镜像。

在一个实施例中,上述方法还可以包括:镜像管理中心在将层次依赖关系返回给本地镜像仓库的过程中,还将与指向远程镜像仓库的镜像下载url对应的容器镜像的任一层次的镜像文件的哈希校验码返回给该本地镜像仓库;以及该本地镜像仓库从镜像管理中心接收并存储该镜像文件的哈希校验码。

在一个实施例中,上述方法还可以包括:该镜像管理中心在容器镜像的任一层次的镜像文件内容发生变化的情况下,向缓存了该容器镜像的本地镜像仓库推送镜像文件变更通知;其中,该镜像文件变更通知包含该容器镜像的镜像标识和变更后的镜像文件的哈希校验码;以及该本地镜像仓库在接收到该镜像文件变更通知后,根据该容器镜像的镜像标识对该变更后的镜像文件的哈希校验码进行验证,如果该哈希校验码与已经缓存的该容器镜像的镜像文件的原哈希校验码不一致,则根据该容器镜像的镜像标识从镜像管理中心查询获得对应的镜像下载url,并根据该镜像下载url从远程镜像仓库下载新的容器镜像。从而实现了在镜像文件内容发生变化的情况下对已经缓存的容器镜像的更新。

在一个实施例中,上述方法还可以包括:本地镜像仓库在所缓存的容器镜像失效后,将该失效的容器镜像自动删除,并调用镜像管理中心的镜像下载url删除接口删除该本地镜像仓库的该失效的容器镜像的镜像下载url。

在另一个实施例中,上述方法还可以包括:远程镜像仓库作为存储容器镜像的原始镜像仓库,在原始镜像仓库删除该容器镜像后,调用镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向镜像管理中心发送镜像删除通知,该镜像删除通知包含被删除的容器镜像的镜像标识;该镜像管理中心在接收到所述镜像删除通知后,向已经缓存了该被删除的容器镜像的镜像仓库下发该镜像删除通知;以及本地镜像仓库在接收到该镜像管理中心下发的镜像删除通知后,实时删除与该镜像删除通知所包含的镜像标识对应的容器镜像。

在一个实施例中,上述方法还可以包括:本地镜像仓库作为存储容器镜像的原始镜像仓库删除所存储的容器镜像,调用镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向该镜像管理中心发送镜像删除通知,该镜像删除通知包含该被删除的容器镜像的镜像标识;以及该镜像管理中心在接收到该镜像删除通知后,向已经缓存了该被删除的容器镜像的镜像仓库下发该镜像删除通知。

在另一个实施例中,上述方法还可以包括:镜像管理中心将镜像删除指令下发给本地镜像仓库,其中,该本地镜像仓库作为存储容器镜像的原始镜像仓库,该镜像删除指令包含需要删除的容器镜像的镜像标识;该本地镜像仓库在接收到该镜像删除指令后,删除对应的容器镜像,调用该镜像管理中心的镜像下载url删除接口删除该被删除的容器镜像的所有镜像下载url,并向该镜像管理中心发送镜像删除通知,该镜像删除通知包含该被删除的容器镜像的镜像标识;以及该镜像管理中心在接收到从该本地镜像仓库返回的镜像删除通知后,向已经缓存了被删除的容器镜像的镜像仓库下发该镜像删除通知。

在本发明的实施例中,在步骤s401之前,上述方法还可以包括:部署工具将容器镜像上传到本地镜像仓库;本地镜像仓库向镜像管理中心上报被上传的容器镜像的容器镜像信息;部署工具向选定的集群列表的容器集群编排器下发部署脚本;容器集群编排器解析和执行该部署脚本,从该部署脚本获得镜像标识,并根据应用需要运行的容器实例数目调度相应数目的容器引擎,向需要被调度的容器引擎发送调度消息,其中该调度消息包含需要运行的容器镜像的镜像标识。其中,容器引擎在接收到该调度消息后,向本地镜像仓库发送第一镜像下载地址获取请求。

图5是示意性地示出根据本发明另一个实施例的用于多集群容器部署的系统的结构图。该系统包括存储器510和处理器520。其中:

存储器510可以是磁盘、闪存或其它任何非易失性存储介质。存储器用于存储图4所对应实施例中的指令。

处理器520耦接至存储器510,可以作为一个或多个集成电路来实施,例如微处理器或微控制器。该处理器520用于执行存储器中存储的指令,从而提升容器应用跨集群部署效率,缩短部署升级时间。

在一个实施例中,还可以如图6所示,该系统600包括存储器610和处理器620。处理器620通过bus总线630耦合至存储器610。该系统600还可以通过存储接口640连接至外部存储装置650以便调用外部数据,还可以通过网络接口660连接至网络或者另外一台计算机系统(未标出),此处不再进行详细介绍。

在该实施例中,通过存储器存储数据指令,再通过处理器处理上述指令,从而提升容器应用跨集群部署效率,缩短部署升级时间。

在另一个实施例中,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现图4所对应实施例中的方法的步骤。本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

至此,已经详细描述了本发明。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员应该理解,可在不脱离本发明的范围和精神的情况下,对以上实施例进行修改。本发明的范围由所附权利要求来限定。

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