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

容器镜像级联同步方法、装置、设备及介质

文献发布时间:2024-01-17 01:17:49


容器镜像级联同步方法、装置、设备及介质

技术领域

本公开涉及互联网技术领域,尤其涉及一种容器镜像级联同步方法、装置、设备及介质。

背景技术

容器化技术是云计算的关键技术之一,容器化技术通过软件层虚拟化从而将应用运行环境统一打包成容器镜像,通过对容器镜像的分发保证了环境的一致性。

Docker是一个开源的应用容器引擎,Docker容器的运行离不开镜像,一个系统中Docker镜像统一存储在Docker镜像仓库里,缺省情况下,Docker镜像仓库的数据存储在本地主机的文件系统,这种方式能快速的为docker环境搭建一套镜像仓库,但在生产环境下,往往由于安全问题,生产环境的网络与外部环境进行隔离,无法快速的将研发环境、预生产环境或公网环境等环境的镜像同步到生产环境,导致Docker容器运行时节点无法从生产环境的镜像仓库下载所需的镜像,导致增加应用的发布时间,甚至应用启动失败。因此在隔离的生产环境下,需要一种新的方案,以便安全地、高效地获得所需的镜像,将所需镜像同步到生产环境镜像库。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

本公开提供一种容器镜像级联同步方法、装置、设备及介质,至少在一定程度上克服相关技术中生产环境在网络隔离情况下,将最新的容器镜像或生产环境所需的镜像同步到生产环境难度较高,甚至需要人工维护操作,效率较低的问题。

本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。

根据本公开的一个方面,提供了一种容器镜像级联同步方法,源镜像库所在的网络环境与生产环境之间存在网络隔离,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境,方法包括:

上级级联端读取源镜像库的镜像数据,存储到本地缓存;

在上级级联端与下级级联端之间的网络连通时,上级级联端将本地缓存的镜像数据,发送给下级级联端,以使下级级联端将上级级联端发送的镜像数据同步给生产环境镜像库。

在本公开的一个实施例中,上级级联端读取源镜像库的镜像数据,存储到本地缓存之前,方法还包括:

上级级联端向源镜像仓库发送权限验证指令,以使源镜像仓库验证上级级联端是否有权限读取源镜像库的镜像数据;

上级级联端读取源镜像库的镜像数据,存储到本地缓存,包括:

在上级级联端有权限读取源镜像库的镜像数据的情况下,读取源镜像库的镜像数据并存储到本地缓存。

在本公开的一个实施例中,上级级联端读取源镜像库的镜像数据,存储到本地缓存,包括:

上级级联端监听源镜像库镜像变化情况;

在源镜像库镜像变化情况符合预设情况时,读取源镜像库的镜像数据并存储到本地缓存。

在本公开的一个实施例中,取源镜像库的镜像数据并存储到本地缓存,包括:

读取源镜像库的镜像Manifest,并保存各个Blob摘要;

读取Blob数据,并判断所有Blob层是否已经全部复制完毕;

在复制完毕的情况下,生成镜像的Manifest文件,并存储到本地缓存。

在本公开的一个实施例中,下级级联端部署在署跳板机或堡垒机。

在本公开的一个实施例中,上级级联端部署在本地开发环境。

在本公开的一个实施例中,源镜像库为如下镜像库中的一种:

私有镜像仓库、公网镜像仓库、本地镜像文件。

根据本公开的另一个方面,提供一种容器镜像级联同步方法,源镜像库所在的网络环境与生产环境之间存在网络隔离,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境,方法包括:

在上级级联端与下级级联端之间的网络连通时,下级级联端接收上级级联端发送的镜像数据,镜像数据是上级级联端在源镜像库读取并存储在本地缓存的;

下级级联端将上级级联端发送的镜像数据,同步给生产环境镜像库。

根据本公开的另一个方面,提供一种容器镜像级联同步装置,源镜像库所在的网络环境与生产环境之间存在网络隔离,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境,装置包括:

镜像数据读取模块,用于上级级联端读取源镜像库的镜像数据,存储到本地缓存;

镜像数据发送模块,用于在上级级联端与下级级联端之间的网络连通时,上级级联端将本地缓存的镜像数据,发送给下级级联端,以使下级级联端将上级级联端发送的镜像数据同步给生产环境镜像库。

根据本公开的另一个方面,提供一种容器镜像级联同步装置,源镜像库所在的网络环境与生产环境之间存在网络隔离,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境,装置包括:

镜像数据接收模块,用于在上级级联端与下级级联端之间的网络连通时,下级级联端接收上级级联端发送的镜像数据,镜像数据是上级级联端在源镜像库读取并存储在本地缓存的;

镜像数据同步模块,用于下级级联端将上级级联端发送的镜像数据,同步给生产环境镜像库。

根据本公开的又一个方面,提供一种电子设备,包括:存储器,用于存储指令;处理器,用于调用所述存储器中存储的指令,实现上述的容器镜像级联同步方法。

根据本公开的又一个方面,提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令被处理器执行时实现上述的容器镜像级联同步方法。

根据本公开的又一个方面,提供一种计算机程序产品,计算机程序产品存储有指令,所述指令在由计算机执行时,使得计算机实施上述的容器镜像级联同步方法。

根据本公开的又一个方面,提供一种芯片,包括至少一个处理器和接口;

接口,用于为至少一个处理器提供程序指令或者数据;

至少一个处理器用于执行程序指令,以实现上述的容器镜像级联同步方法。

本公开实施例所提供的容器镜像级联同步方法、装置、设备及介质,上级级联端将读取源镜像库的镜像数据存储到本地缓存,并在上级级联端与下级级联端之间的网络连通时,发送给下级级联端,以使下级级联端将上级级联端发送的镜像数据同步给生产环境镜像库。该方案整体上减少了人工维护操作、降低了镜像同步的网络要求,有效提升同步效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了相关技术中的一种镜像仓库同步流程示意图;

图2示出了相关技术中的另一种镜像仓库同步流程示意图;

图3示出本公开实施例中一种容器镜像级联同步的应用场景示意图;

图4示出本公开实施例中一种容器镜像级联同步方法流程图;

图5示出本公开实施例中另一种容器镜像级联同步方法流程图;

图6示出本公开实施例中一种容器镜像级联同步装置示意图;

图7示出本公开实施例中一种容器镜像级联同步装置示意图;

图8示出本公开实施例中一种容器镜像级联同步系统的架构示意图;

图9示出本公开实施例中又一种容器镜像级联同步方法流程图;

图10示出本公开实施例中一种电子设备的结构框图。

具体实施方式

下面将参考附图更全面地描述示例实施方式。

需要说明的是,示例实施方式能够以多种形式实施,不应被理解为限于在此阐述的范例。

为了便于理解,下面首先对本公开涉及到的相关技术及名词解释如下:

Digest(摘要信息),通常是文件的SHA256哈希值。

Tag(镜像的标签),通常用来表示镜像的一个版本。

Image ID,镜像配置文件(config文件)的digest值。docker images时显示的镜像ID,同一个镜像可以打多个不同的tag,但image ID都相同。

config文件,镜像的配置文件,保存的是镜像的详细描述信息,包括根文件系统,容器运行时使用的执行参数及镜像的元数据。还有容器运行需要的相关信息,如arch、OS等。

Layer(镜像的实际层),保存的是该层和上一层的差异部分,包括添加、更改和删除。

Manifest(镜像清单文件),保存的是layer和config文件的digest。该文件保存在远端仓库中。

Blob(镜像在远程仓库的基本存储单元),包含layer,config,manifest等数据。

镜像索引(image index),指向一组支持不同架构的镜像。

生产环境一般网络隔离,生产环境与外网有严格的网络安全策略,但严格的网络安全策略也会导致一系列问题:比如预生产环境镜像库如何同步到生产环境,生产环境容器镜像仓库如何加载所需公网镜像:个别镜像如何上传到生产环境容器镜像仓库等等,所以无法通过简单的一套镜像仓库或方案,同时满足各种场景的需求,但是为了保证发布的及时性,需要解决复杂网络环境下的镜像同步,所以及时地、高效地、安全地将目标的镜像同步到生产环境,是必须解决的问题。

针对背景技术中将所需镜像同步到生产环境的问题,相关技术中给出了如下两种Docker镜像仓库同步方案。

图1示出了一种镜像仓库同步方案,通过harbor或Skopeo镜像同步功能进行的同步,但是需要各个环境的网络打通,维护复杂的同步关系。

图2示出了另一种镜像仓库同步方案,通过docker pull下载镜像,并保存tar文件,通过移动存储或FTP方式同步到生产环境镜像库,效率较低且安全性较差。

发明人发现,当生产环境与外部环境隔离时,基于上文中常见容器镜像同步的解决方案如Harbor、Skopeo同步功能,需要生产环境与外部环境的网络互通,在无法或快速改变生产环境的网络架构,造成该方案无法适用;抑或者采用人工的方式通过镜像文件进行本地同步则有较大的限制,需要先将源镜像库数据复制到移动存储,再由工程师进入生产环境的机房通过移动存储手工的方式进行同步,这种情况需要大量的人工介入,效率低下而且容易导致版本不一致,不仅如此,维护成本要求较高、实时性也得不到保障。

下面结合附图及实施例对本示例实施方式进行详细说明。

需要说明的是,本公开实施例应用在源镜像库所在的网络环境与生产环境之间存在网络隔离的场景中,在场景中部署上级级联端和下级级联端。其中,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境。

在一些实施例中,下级级联端部署在与生产环境相通的网络环境,比如在跳板机、堡垒机等可与生产环境连通的机器。

在一些实施例中,上级级联端部署在能访问公网、私有云的环境,该环境保证能读取源镜像仓库的镜像,源镜像仓库包括私有镜像仓库、公网镜像仓库及本地镜像文件等多种方式。作为一个示例,上级级联端部署在本地开发环境。

图3示出本公开实施例的一种应用场景,如图3所示,本公开实施例可以支持的环境:包括私有或内部服务器镜像库、公网服务镜像库或者镜像文件,本公开源镜像库包括上述环境的一种或多种。

本地开发环境一般与源镜像库能正常通信,本地开发环境可以是一台服务器也可以是工作机器。下级级联端是跳板机环境,在远端机房,需要通过专有网络或VPN的方式进行连通。为了保证生产环境的安全,通常情况下,本地开发环境和跳板机之间是处于隔离的网络,仅当需要时,本地开发环境和跳板机之间才通过VPN方式进行远程连接。生产环境与跳板机环境之间是一个VPC网络。

如图3所示,通常情况下,本地开发机(本地开发环境)可以随时上传或下载公网镜像库、内网镜像库和其他镜像文丰。

VPC1:当本地开发环境需要访问生产环境时,需先通过VPN与跳板机连通,由本地开发环境先访问跳板机然后才能访问生产环境。

VPC2:跳板机经过安全性加固并配置了严格的访问策略,并被视为从安全区域内或整个网络内部进入生产环境的单个入口,跳板机与生产环境内网互通,他们之间有一定的安全策略。

图4示出本公开实施例中一种容器镜像级联同步方法流程图,如图4所示,本公开实施例中提供的容器镜像级联同步方法包括步骤S402-S404。

在S402中,上级级联端读取源镜像库的镜像数据,存储到本地缓存。

上级级联端根据预设镜像同步参数实施监测源端镜像的变化情况,将待同步的镜像数据加载到缓存。

在一些实施例中,源镜像库为如下镜像库中的一种:私有镜像仓库、公网镜像仓库、本地镜像文件。

在一些实施例中,上级级联端读取源镜像库的镜像数据,存储到本地缓存之前,还可以包括权限验证过程,上级级联端向源镜像仓库发送权限验证指令,源镜像仓库验证上级级联端是否有权限读取源镜像库的镜像数据。上述S402可以是在上级级联端有权限读取源镜像库的镜像数据的情况下,读取源镜像库的镜像数据并存储到本地缓存。

在一些实施例中,上级级联端读取源镜像库的镜像数据,存储到本地缓存,可以包括:上级级联端监听源镜像库镜像变化情况;在源镜像库镜像变化情况符合预设情况时,读取源镜像库的镜像数据并存储到本地缓存。

在一些实施例中,取源镜像库的镜像数据并存储到本地缓存,可以是读取源镜像库的镜像Manifest,并保存各个Blob摘要;读取Blob数据,并判断所有Blob层是否已经全部复制完毕;在复制完毕的情况下,生成镜像的Manifest文件,并存储到本地缓存。

在S404中,在上级级联端与下级级联端之间的网络连通时,上级级联端将本地缓存的镜像数据,发送给下级级联端,以使下级级联端将上级级联端发送的镜像数据同步给生产环境镜像库。

在一些实施例中,上级级联端与下级级联端之间的网络可以是专网或虚拟专用网络VPN。

下级级联端部署于跳板机、堡垒机等环境,当上级级联端和下级级联端通过VPN等连通时,上级级联端将镜像数据发送到下级级联端,由下级级联端将镜像数据同步到目标镜像库,也就是生产环境镜像库。对用户来说,在生产环境网络隔离情况下,可不改变网络结构,通过本公开实施例的方法满足源端和目标端镜像库之间的高效同步,同时减少了镜像库同步复杂度,增加了镜像库同步的效率和安全性,降低了镜像库同步成本。该方案对于学习及维护成本要求低,易于实现、部署。

在一些实施例中,下级级联端可以具有镜像接收、校验、同步等功能模块,下级联端本地磁盘无需新建一个镜像库。当上级级联端与下级级联端通过VPN等方式连通时,上级级联端发送待同步的镜像数据给下级级联端,由下级联端将镜像数据同步到最终目标镜像库,也就是生产环境镜像库,整体上降低源端和目标端在网络隔离情况下镜像同步的学习和运维成本,同时提高了镜像同步的效率和安全性。

本公开实施例可以应用于多VPC复杂网络环境下,通过上级级联端和下级级联端配合完成,上级级联端根据预设镜像同步参数实施监测源端镜像的变化情况,将待同步的镜像数据加载到缓存,下级级联端部署跳板机、堡垒机等环境,当上级级联端和下级级联端通过VPN等连通时,上级级联端将镜像数据发送到下级级联端,由下级级联端将镜像数据同步到目标镜像库。对用户来说,在生产环境网络隔离情况下,可不改变网络结构,通过本方法和装置,满足源端和目标端镜像库之间的高效同步,同时减少了镜像库同步复杂度,增加了镜像库同步的效率和安全性,降低了镜像库同步成本。

本公开实施例所提供的容器镜像级联同步方法,运维效率高,全程不需要人工参与,当本地环境和跳板机环境连通时,会自动将目标环境的镜像同步到生产环境;运维成本低,生产环境的机房一般在远程而且不方便人员进出,通过跳板机方式代理同步,既满足安全要求也方便运维人员远程操作;适用面广,即可将预生产的镜像库进行同步,也可以方便公网镜像、单个镜像同步到隔离的生产环境。

图5示出本公开实施例中一种容器镜像级联同步方法流程图,如图5所示,本公开实施例中提供的容器镜像级联同步方法包括步骤S502-S504。

在S502中,在上级级联端与下级级联端之间的网络连通时,下级级联端接收上级级联端发送的镜像数据,镜像数据是上级级联端在源镜像库读取并存储在本地缓存的;

在S504中,下级级联端将上级级联端发送的镜像数据,同步给生产环境镜像库。

本公开实施例所提供的容器镜像级联同步方法,通过本地环境预存储待同步的镜像库或镜像文件,并与跳板机将网络隔离的多VPC环境下的镜像进行同步,既满足网络隔离安全性的要求,同时也能提升同步效率。

在本公开实施例中,术语“第一”、“第二”和“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。

在一些实施例中,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。

基于同一发明构思,本公开实施例中还提供了一种容器镜像级联同步装置,如下面的实施例所述。由于该装置实施例解决问题的原理与上述方法实施例相似,因此该装置实施例的实施可以参见上述方法实施例的实施,重复之处不再赘述。

需要说明的是,本公开实施例应用在源镜像库所在的网络环境与生产环境之间存在网络隔离的场景中,在场景中部署上级级联端和下级级联端。其中,上级级联端部署在与源镜像库相通的网络环境,下级级联端部署在与生产环境相通的网络环境。

在一些实施例中,下级级联端部署在与生产环境相通的网络环境,比如在跳板机、堡垒机等可与生产环境连通的机器。

在一些实施例中,上级级联端部署在能访问公网、私有云的环境,该环境保证能读取源镜像仓库的镜像,源镜像仓库包括私有镜像仓库、公网镜像仓库及本地镜像文件等多种方式。作为一个示例,上级级联端部署在本地开发环境。

图6示出本公开实施例中一种容器镜像级联同步装置示意图,如图6所示,该容器镜像级联同步装置600,包括:

镜像数据读取模块610,用于上级级联端读取源镜像库的镜像数据,存储到本地缓存;

镜像数据发送模块620,用于在上级级联端与下级级联端之间的网络连通时,上级级联端将本地缓存的镜像数据,发送给下级级联端,以使下级级联端将上级级联端发送的镜像数据同步给生产环境镜像库。

在一些实施例中,镜像数据读取模块610,可以用于上级级联端向源镜像仓库发送权限验证指令,以使源镜像仓库验证上级级联端是否有权限读取源镜像库的镜像数据;在上级级联端有权限读取源镜像库的镜像数据的情况下,读取源镜像库的镜像数据并存储到本地缓存。

在一些实施例中,镜像数据读取模块610,可以用于上级级联端监听源镜像库镜像变化情况;在源镜像库镜像变化情况符合预设情况时,读取源镜像库的镜像数据并存储到本地缓存。

在一些实施例中,镜像数据读取模块610取源镜像库的镜像数据并存储到本地缓存,可以包括读取源镜像库的镜像Manifest,并保存各个Blob摘要;读取Blob数据,并判断所有Blob层是否已经全部复制完毕;在复制完毕的情况下,生成镜像的Manifest文件,并存储到本地缓存。

在一些实施例中,源镜像库为如下镜像库中的一种:私有镜像仓库、公网镜像仓库、本地镜像文件。

基于同一发明构思,本公开实施例中还提供了一种容器镜像级联同步装置示意图,如图7所示,该容器镜像级联同步装置700,包括:

镜像数据接收模块710,用于在上级级联端与下级级联端之间的网络连通时,下级级联端接收上级级联端发送的镜像数据,镜像数据是上级级联端在源镜像库读取并存储在本地缓存的;

镜像数据同步模块720,用于下级级联端将上级级联端发送的镜像数据,同步给生产环境镜像库。

图6所示容器镜像级联同步装置可以应用于上级级联端,也就是说图6所示容器镜像级联同步装置可以是上级级联端的一个设备,也可以是上级级联端本身。

同理,图7所示容器镜像级联同步装置可以应用于下级级联端,也就是说图7所示容器镜像级联同步装置可以是下级级联端的一个设备,也可以是下级级联端本身。

基于同一发明构思,本公开实施例还提供了一种容器镜像级联同步系统,该容器镜像级联同步系统,可以包括上级级联端和下级级联端。其中,上级级联端的功能和架构与图6所示容器镜像级联同步装置相似,下级级联端的功能和架构与图7所示容器镜像级联同步装置相似,在此不再赘述。

图8示出本公开实施例提供的一种容器镜像级联同步系统,该容器镜像级联同步系统,如图8所示,该容器镜像级联同步系统包括上级级联端810和下级级联端820。其中,上级级联端810,包括镜像数据读取模块811和镜像数据发送模块812;下级级联端820,包括镜像数据接收模块821和镜像数据同步模块822。

下面详细介绍容器镜像级联同步系统的各组成器件的功能以及各部分间的连接关系。

上级级联端810在通常情况下可以通过网络访问镜像库,通过镜像数据读取装置保存需要同步的源镜像库。源镜像库即是包括了内网镜像库、外网镜像库或本地镜像文件,此后源镜像库均表示上述三种场景的一种或多种,本文不再赘述。

镜像数据读取模块811包括了参数解析模块8111、第一权限认证模块8112,镜像监听模块8113,镜像复制模块8114,数据缓存第一模块8115。

镜像数据读取模块811预设加载模块源镜像库同步参数,其中所述源镜像库和目标镜像库同步参数包括镜像库地址、认证信息(包括用户名、端口号)、镜像名、镜像版本号、跳板机地址等信息。

参数解析模块8111,负责解析预设的源镜像库信息:源镜像库地址、待同步的镜像名称及版本号、源镜像库用户名、源镜像库密码、源镜像库附加信息等。

第一权限认证模块8112,将认证信息即用户名、密码封装成权限验证指令,发送到源镜像仓库对权限进行验证。

接收参数解析模块8111解析出的认证信息包括源镜像库地址、用户名、密码等信息,权限认证模块将认证信息进行封装并通过源镜像库认证接口执行,若认证通过则权限认证模块取得认证凭证并保存在上级级联端配置文件中。

镜像监听模块8113,预设镜像事件通知参数,当有源镜像发生变化时,触发对源镜像数据的推送,实现对源镜像参考实时分析、读取。

镜像监听模块8113主要作用是回调函数,对外以函数API形式展现,该函数API用于设置到源镜像仓库节点的配置文件中通知参数“notifications”部分。通过镜像监听模块8113,能接收源镜像仓库发送的数据,包括对源镜像仓库的新新增、删除、修改事件,镜像监听模块8113收到源镜像仓库的事件后,对事件进行重构、封装,重定义为镜像数据复制任务,并添加到任务池,镜像复制模块8114逐一从任务池取出复制任务,对镜像数据进行复制。

镜像复制模块8114,主要是将待复制镜像的数据复制到第一缓存模块。源镜像仓库验证通过返回后,镜像复制模块8114解析源镜像库同步参数其中的镜像名、镜像版本后将读取源镜像库镜像数据,源镜像库数据至少包含镜像的Manifest文件和Blob文件。所述源镜像库同步参数包括但不限于私有化镜像库地址、公网镜像库地址及本地镜像。

镜像复制模块8114与源镜像仓库进行交互,读取源镜像库数据并进行缓存到数据缓存第一模块。当源镜像的类型为本地镜像文件时,则全量读取源镜像库数据包括镜像的Manifest文件和Blob文件。

当上级级联端810与下级级联端820通过VPN连通时,上级级联端810的镜像数据发送模块812与下级级联端820的镜像数据接收模块821建立TCP连接通道。

镜像数据发送模块812将存储在数据缓存第一模块8115的镜像数据通过TCP连接通道发送给下级级联端820的镜像数据接收模块821。

下级级联端820的镜像数据接收模块821接收镜像数据后,将镜像数据存储在数据缓存第二模块8213。

下级级联端820的镜像数据同步模块中的第二权限认证模块8221先对目标镜像库也就是生产环境镜像库进行权限认证,然后镜像同步模块读取数据缓存第二模块的数据并同步到目标镜像库。当镜像同步模块对目标镜像同步镜像数据完毕时,镜像检测模块检测待同步镜像是否完整的、正确的同步到目标镜像库。

镜像复制模块8114有三种方式对源镜像仓库的镜像复制。第一种是执行镜像监听模块8113下发的复制任务,该复制任务是源镜像仓库主动触发实时性较高,不需要镜像复制模块8114轮询,适用于内网镜像库。

镜像复制模块8114第二种是通过源镜像API和待同步镜像参数,复制源镜像库镜像数据,适用于内网镜像库、公网镜像库。具体地:

1、根据参数解析模块8111得到的待同步镜像名和版本号以及第一权限认证模块8112认证凭证从源镜像库获取镜像文件的数据,检查源镜像库是否包含待同步镜像,并获取待同步镜像的manifests文件的sha256值。

2、镜像复制模块8114根据上述manifests文件的sha256值获取所述待同步镜像的manifests文件。Manifest文件包括了镜像名称、镜像版本、镜像层的描述和摘要sha256值。

3、镜像复制模块8114通过源镜像API与上述sha256值,得到待同步镜像的各层所有image config文件和image layer文件。

4、镜像复制模块8114将image config文件和image layer文件存储到数据缓存第一模块8115。

镜像复制模块8114第三种复制任务是对镜像文件进行数据复制,适用于对零星单个或多个镜像文件进行复制。镜像数据读取模块811预先设置源镜像信息:镜像名、镜像文件地址等,由参数解析模块8111解析源镜像信息,并由镜像复制模块8114加载镜像文件并获取镜像文件的数据如mianfest、blob数据等存储到数据缓存第一模块8115。

具体的:通常一个镜像文件的格式以tar文件格式进行保存,tar文件结构包括了各级目录和三个文件:manifest.json、json、repositories。每级目录对应是镜像文件的每层的数据文件。其中manifest.json包含了对这个tar包的描述信息,比如image config文件地址,tags说明,镜像layer信息。镜像复制模块将镜像文件的每层layer.tar、imageconfig并保存到第一缓存模块。

当源镜像库为镜像文件时,与处理镜像库不同的是:1、源镜像库文件是单个或多个镜像文件,无需调用第一权限认证模块8112与源镜像库进行认证。2、不需要启动第一权限认证模块8112和镜像监听模块8113,只需镜像复制模块8114加载镜像数据文件,之后的处理流程与前述流程基本一致,可参考前述流程。

在本实施例中,数据缓存第一模块8115可以位于独立的服务器中,也可以位于由若干服务器构成的服务器集群中。比如ceph和Gluster是开源的分布式文件存储系统,目前行业已积累较多的生产经验,对于企业的研发、运维及学习成本大大降低。数据缓存第一模块8115是本领域技术人员熟悉的,在此不再赘述。

本公开实施例中,镜像数据发送模块镜像数据发送模块812包括了TCP连接模块8121、数据发送模块8122。

当镜像数据发送模块镜像数据发送模块812所在的节点即上级级联端810与下级级联端820通过VPN建立一个VPC时,TCP连接模块8121获取参数解析模块8111解析出的镜像数据接收地址及端口,与镜像数据接收模块821的端口监听模块8211建立连接。数据发送模块8122读取数据缓存第一模块8115缓存的镜像数据,通过连接成功的TCP通道将镜像数据发送到镜像数据接收模块8212。

在本实施例中,镜像数据接收模块821包括端口监听模块8211,、数据接收模块8212、数据缓存第二模块8213。端口监听模块8211通过TCP协议与TCP连接模块8121进行连接并维持心跳,数据接收模块8212接收数据发送模块812发来的数据和指令,并调用数据缓存第二模块8213,对数据接收模块8212接收的镜像数据包括mianfests、blob等数据进行缓存,数据缓存第二模块8213采用业界通用的对象存储、分布式文件系统等,这是本领域技术人员熟悉的,在此不再赘述。

在本实施例中,镜像数据同步模块822包括第二权限认证模块8221、镜像同步模块8222、镜像检测模块8223。镜像检测模块8223获取目标环境镜像库的镜像文件摘要数据,如目标镜像库无该镜像文件摘要数据,镜像数据同步模块822读取数据缓存第二模块的镜像数据,通过镜像库同步函数同步给目标环境镜像库。

具体地:第二权限认证模块8221,根据认证信息包括目标镜像库地址、用户名、密码等信息,将认证信息进行封装并通过目标镜像库认证接口执行,若认证通过则权限认证模块取得认证凭证并保存,之后执行镜像同步流程:

1、首先镜像同步模块8222获取数据缓存第二模块8213待同步的镜像信息,包括镜像名、镜像版本号;

2、镜像同步模块8222通过目标镜像API和待同步镜像信息,检查目标镜像库是否包含待同步镜像,并获取待同步镜像的manifests文件的sha256值。

3、镜像同步模块8222通过目标镜像API和上述manifests文件的sha256值,上传所述待同步镜像的manifests文件。

4、镜像同步模块8222通过目标镜像API检测目标镜像是否存在该层数据,返回200OK,表示目标镜像库已有该层数据,则不用上传。

5、镜像同步模块8222通过数据缓存第二模块8213获取待同步镜像的各层数据,待同步镜像的各层数据至少包含了image config文件和image layer文件。

6、镜像同步模块通过上述目标镜像API与上述待同步镜像各层数据,将待同步镜像数据同步到目标镜像库。目标镜像库如果请求返回202accepted,一个url会在location字段返回分块上传根据上一步获取的url,以PATCH的方式提交待同步镜像各层数据。

镜像检测模块8223对已同步的镜像检测是否已完整、正确的同步到目标镜像库。主要功能是获取目标镜像库与待同步镜像信息进行匹配,数据是否正常。

下面结合图8所示容器镜像级联同步系统说明本公开所提供的容器镜像级联同步方法,如图9所示,该容器镜像级联同步方法可以包括步骤S901-S914。

S901预设复制策略。在上级级联端设置源镜像、目标镜像仓库地址或本地镜像地址、权限验证参数包括用户名、密码、待同步镜像名及版本号(tag)及下级级联端监听端口。在源镜像仓库registry设置镜像操作通知参数包括镜像事件回调函数URL,所述镜像事件回调函数URL用于所述源镜像仓库registry发生镜像的操作事件时,源镜像仓库将主动调用所述镜像事件回调函数,将操作事件按一定格式发送到镜像事件回调函数。

具体地,在所述源镜像仓库registry中通知参数“notifications”设置所述镜像事件回调函数URL,当所述源镜像仓库registry中镜像发生镜像的读、写、修改、删除等事件时,所述源镜像仓库registry及时将该事件发送到所述镜像事件回调函数URL。镜像数据读取模块根据接收到的指令进行相应的处理。所述镜像仓库registry中通知参数“notifications”部分是源镜像仓库registry其中的一个功能模块,该功能模块原理及使用是docker官方开源且是本领域技术人员熟悉的部分,在此不再赘述。

S902权限验证。上级级联端镜像数据读取模块根据步骤S901所述预设的权限信息,将权限信息即用户名、密码封装成权限验证指令,发送到所述源镜像仓库。源镜像库仓库对请求信息进行鉴权,认证通过后,所述源仓库返回认证的权限信息token。

S903监听镜像操作事件。上级联端成功启动镜像数据读取模块。其中源镜像仓库registry根据步骤S901所述预设了该节点提供的镜像事件回调函数URL,所有在源镜像仓库的镜像操作事件都及时推送到镜像数据读取模块。

S904增加复制任务。当镜像数据读取模块通过所述镜像事件回调函数URL接收源镜像仓库registry发送的数据后对该数据进行解析、甄别,提取对镜像的新增、删除、修改事件,并将该事件进行重构、封装,重定义为同步复制任务,并添加到任务池,镜像数据读取模块逐一从任务池取出复制任务,执行下列步骤,进行镜像复制。

S905读取镜像Manifest并保存各个Blob摘要。上级级联端根据上述步骤S901中的镜像名及版本号(tag),读取镜像的Manifest。所述镜像的Manifest是镜像的各个Blob的清单文件,保存了该镜像所依赖各个层的消息摘要(sha256算法计算值)以及其他信息,镜像数据读取模块提取并保存述步骤S905中的镜像各个镜像层的Blob消息摘要(sha256算法计算值)。

S906检查是否已经存在该层Blob。上级级联装置通sha256值检测源镜像仓库是否存在该层blob数据。

S907读取该Blob数据。上级级联端根据步骤S906所获取的各层Blob摘要,读取源镜像仓库中待同步镜像文件各层Blob数据,并缓存在本节点。

S908判断所有Blob层是否已经全部复制完毕。上级级联端根据步骤S905所获取的各层Blob摘要,逐一对每层Blob执行步骤S907与步骤S908,直到最后一层Blob。

S909单个镜像复制完毕,生成镜像的Manifest文件,等待与下级级联端连接成功。

S910发送待同步镜像的镜像数据至下级级联端。当上级级联端与下级级联端通过VPN建立通道式。上级级联端与下级级联端建立TCP可靠传输通道,并通过该通道将上级级联端缓存的镜像数据发送给下级级联端,并由下级级联端进行缓存。

S911检查目标镜像库是否已经存在待同步镜像。下级级联端镜像同步程序开始执行镜像同步任务,首先,所述下级级联端镜像同步程序从S910中所述缓存池中读取待同步镜像中镜像名称,检查目标镜像仓库是否已存在该镜像的Manifest。

S912将待同步镜像层数据同步至目标镜像库。下级级联端根据步骤S905所获取的各层Blob摘要,与目标镜像仓库进行确认是否存在该层layer数据,若不存在,则继续同步此层layer。值得一提的是,检查目标镜像库是否已经存在待同步镜像的layer层数据意义在于当该layer层已在目标镜像库时,可以有效减少不必要的网络流量。

S913检测目标镜像库是否存在下级级联端发送待同步镜像的Manifest到目标仓库。检查是否已经存在该镜像确认所有层Blob都已成功发送到目标节点的镜像仓库后,根据步骤S906获取的Manifest,发送到目标镜像仓库,至此,目标镜像仓库保存了待同步镜像各层Blob二进制数据和该镜像的Manifest文件。

S914完成对待同步镜像的同步。下级联调通过目标镜像库获取待同步镜像,检查待同步镜像数据的完整性,所述通过目标镜像库获取待同步镜像,可用docker push命令或registry api的方式,若目标镜像返回数据正常,则表明已完成了待同步镜像的同步。docker push命令或registry api使用是docker官方开源且是本领域技术人员熟悉的部分,在此不再赘述。

本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。

实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

下面参照图10来描述本公开实施例提供的电子设备。图10显示的电子设备1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

图10示出本本公实施例提供的一种电子设备1000的架构示意图。如图10所示,该电子设备1000包括但不限于:至少一个处理器1010、至少一个存储器1020。

存储器1020,用于存储指令。

在一些实施例中,存储器1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)10201和/或高速缓存存储单元10202,还可以进一步包括只读存储单元(ROM)10203。

在一些实施例中,存储器1020还可以包括具有一组(至少一个)程序模块10205的程序/实用工具10204,这样的程序模块10205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

在一些实施例中,存储器1020可存储操作系统。该操作系统可以是实时操作系统(Real Time eXecutive,RTX)、LINUX、UNIX、WINDOWS或OS X之类的操作系统。

在一些实施例中,存储器1020中还可以存储有数据。

作为一个示例,处理器1010可以读取存储器1020中存储的数据,该数据可以与指令存储在相同的存储地址,该数据也可以与指令存储在不同的存储地址。

处理器1010,用于调用存储器1020中存储的指令,实现本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,所述处理器1010可以执行上述方法实施例的各步骤。

需要说明的是,上述处理器1010可以是通用处理器或者专用处理器。处理器1010可以包括一个或者一个以上处理核心,处理器1010通过运行指令执行各种功能应用以及数据处理。

在一些实施例中,处理器1010可以包括中央处理器(central processing unit,CPU)和/或基带处理器。

在一些实施例中,处理器1010可以根据各个控制指令中携带的优先级标识和/或功能类别信息确定一个指令。

本公开中,处理器1010和存储器1020可以单独设置,也可以集成在一起。

作为一个示例,处理器1010和存储器1020可以集成在单板或者系统级芯片(system on chip,SOC)上。

如图10所示,电子设备1000以通用计算设备的形式表现。电子设备1000还可以包括总线1030。

总线1030可以为表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。

电子设备1000也可以与一个或多个外部设备1040(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1050进行。

并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。

如图10所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。

应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

可以理解的是,本公开实施例示意的结构并不构成对电子设备1000的具体限定。在本公开另一些实施例中,电子设备1000可以包括比图10所示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图10所示的部件可以以硬件,软件或软件和硬件的组合实现。

本公开还提供了一种计算机可读存储介质,其上存储有计算机指令,计算机指令被处理器执行时实现上述方法实施例描述的容器镜像级联同步方法。

本公开实施例中计算机可读存储介质,为可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的计算机指令。

作为一个示例,计算机可读存储介质是非易失性存储介质。

在一些实施例中,本公开中的计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、U盘、移动硬盘或者上述的任意合适的组合。

本公开实施例中,计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机指令(可读程序代码)。

这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。

在一些示例中,计算机可读存储介质上包含的计算指令可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。

本公开实施例还提供一种计算机程序产品,计算机程序产品存储有指令,指令在由计算机执行时,使得计算机实施上述方法实施例描述的容器镜像级联同步方法。

上述指令可以是程序代码。在具体实施时,程序代码可以由一种或多种程序设计语言的任意组合来编写。

程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。

程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。

在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

本公开实施例还提供了一种芯片,包括至少一个处理器和接口;

接口,用于为至少一个处理器提供程序指令或者数据;

至少一个处理器用于执行程序指令,以实现上述方法实施例描述的容器镜像级联同步方法。

在一些实施例中,该芯片还可以包括存储器,该存储器,用于保存程序指令和数据,存储器位于处理器之内或处理器之外。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。

本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。

技术分类

06120116118071