容器镜像创建和部署的制作方法

文档序号:29972015发布日期:2022-05-11 11:38阅读:86来源:国知局
容器镜像创建和部署的制作方法
容器镜像创建和部署


背景技术:

1.本发明涉及硬件虚拟化,并且更具体地,本发明涉及创建和部署容器映像。
2.现代应用部署通常依赖于容器的使用。例如,容器映像经由中央注册处分发,并且为了启动容器,主机使用容器映像拉取容器映像并且为容器创建根文件系统。容器映像的数目以及容器部署的速度快速增加。
3.然而,容器映像的当前实现方式存在若干问题。例如,容器当前启动起来较慢且i/o密集,因为它们需要下载和存储导致本地存储器和/或存储的高利用率的大容器镜像。通过通信网络传输大容器镜像还导致高网络利用率以及注册服务存储子系统上的高负载。因此,当前的容器映像的传输和存储是庞大且昂贵的。
4.因此,需要一种更快和更有效的方式来存储和分配容器映像。


技术实现要素:

5.根据一个实施例,一种计算机实现的方法包括:接收创建容器的请求;取回针对容器的容器镜像的清单;以及利用清单装载针对容器的文件系统。
6.根据另一实施例,一种用于部署容器镜像的计算机程序产品包括:计算机可读存储介质,该计算机可读存储介质具有随其体现的程序指令,其中计算机可读存储介质本身不是瞬态信号,并且其中程序指令能够由处理器执行以使处理器执行包括方法,包括:由处理器接收创建容器的请求;由处理器取回针对容器的容器镜像的清单;以及由处理器利用清单装载针对容器的文件系统。
7.根据另一实施例,一种系统包括:处理器;以及与处理器集成的逻辑,该逻辑能够由处理器执行,或者与处理器集成并且能够由处理器执行的逻辑,其中逻辑被配置为:接收创建容器的请求;取回针对容器的容器镜像的清单;以及利用清单装载针对容器的文件系统。
8.根据另一实施例,一种计算机实现的方法包括:接收将软件包安装在运行容器中的命令;取回针对软件包的元数据包;利用元数据包,将软件包安装在运行容器中;在软件包的安装期间,标识针对文件的需要;以及利用元数据包,取回文件。
9.根据另一实施例,一种用于创建容器镜像的计算机程序产品包括:计算机可读存储介质,该计算机可读存储介质具有随其体现的程序指令,其中计算机可读存储介质本身不是瞬态信号,并且其中程序指令能够由处理器执行以使处理器执行方法,包括:由处理器接收将软件包安装在运行容器中的命令;由处理器取回针对软件包的元数据包;由处理器利用元数据包,将软件包安装在运行容器中;由处理器在软件包的安装期间,标识针对文件的需要;以及由处理器利用元数据包,取回文件。
10.本发明的其他方面和实施例将从以下详细描述中变得清楚,当结合附图时,以下详细描述通过示例说明本发明的原理。
附图说明
11.图1描绘了根据本发明的一个实施例的云计算环境。
12.图2描绘了根据本发明的一个实施例的抽象模型层。
13.图3描绘了根据本发明的一个实施例的云计算节点。
14.图4示出了根据本发明的一个实施例的用于部署容器镜像的方法的流程图。
15.图5示出了根据本发明的一个实施例的用于执行按需容器镜像文件访问的方法的流程图。
16.图6示出了根据本发明的一个实施例的使用元数据包在运行的容器中安装包的方法的流程图。
17.图7示出了根据本发明一个实施例的示例性镜像分发系统组件。
18.图8示出了根据本发明一个实施例的示例性镜像分发系统实现。
19.图9示出了根据本发明的一个实施例的示例性系统架构。
20.图10示出了根据本发明的一个实施例的示例性包安装。
具体实施方式
21.下面的描述是为了说明本发明的一般原理的目的而做出的,并且不意味着限制本文要求保护的发明概念。进一步,本文中所描述的特定特征可以与不同可能组合和排列中的每个的其他所描述的特征组合使用。
22.除非本文另外明确定义,否则所有术语将被给予其最广泛的可能解释,包括从说明书中暗示的含义以及本领域技术人员所理解的和/或如词典、论文等中定义的含义。
23.还必须指出,如在本说明书和所附权利要求书中所使用的,单数形式“一个”、“一种”和“该”包括复数指代物,除非另外指明。将进一步理解的是,当在本说明书中使用术语“包括”和/或“包括”时,其指定所陈述的特征、整体、步骤、操作、元件和/或组件的存在,但是不排除一个或多个其他特征、整体、步骤、操作、元件、组件和/或其组的存在或添加。
24.以下描述公开了创建和部署容器镜像的若干实施例。
25.在一个一般实施例中,一种计算机实现的方法包括:接收创建容器的请求;取回容器的容器镜像的清单;以及利用清单装载容器的文件系统。
26.在另一一般实施例中,一种用于部署容器镜像的计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质具有随其体现的程序指令,其中,所述计算机可读存储介质本身不是瞬态信号,并且其中,所述程序指令可由处理器执行以使所述处理器执行包括以下各项的方法:接收,由所述处理器创建容器的请求;由所述处理器取回所述容器的容器镜像的清单;以及由所述处理器利用所述清单安装所述容器的文件系统。
27.在另一一般实施例中,一种系统包括:处理器;以及与处理器集成的逻辑,该逻辑能够由处理器执行,或者与处理器集成并且能够由处理器执行的逻辑,其中逻辑被配置为:接收创建容器的请求;取回针对容器的容器镜像的清单;以及利用清单装载针对容器的文件系统。
28.在另一一般实施例中,一种计算机实现的方法包括:接收将软件包安装在运行容器中的命令;取回针对软件包的元数据包;利用元数据包,将软件包安装在运行容器中;在软件包的安装期间,标识针对文件的需要;以及利用元数据包,取回文件。
29.在另一一般实施例中,一种用于创建容器镜像的计算机程序产品包括:计算机可读存储介质,该计算机可读存储介质具有随其体现的程序指令,其中计算机可读存储介质本身不是瞬态信号,并且其中程序指令能够由处理器执行以使处理器执行方法,包括:由处理器接收将软件包安装在运行容器中的命令;由处理器取回针对软件包的元数据包;由处理器利用元数据包,将软件包安装在运行容器中;由处理器在软件包的安装期间,标识针对文件的需要;以及由处理器利用元数据包,取回文件。
30.应当理解,尽管本公开包括关于云计算的详细描述,但是本文所引用的教导的实现不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其他类型的计算环境来实现。
31.云计算是一种服务递送模型,用于实现对可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池的方便、按需的网络访问,该可配置计算资源可以用最小的管理努力或与服务提供者的交互来快速配置和释放。该云模型可以包括至少五个特性、至少三个服务模型和至少四个部署模型。
32.特性如下:
33.按需自助服务:云消费者可按需自动地单方面供应计算能力,诸如服务器时间和网络存储,而无需与服务的提供者的人类交互。
34.广泛的网络接入:能力在网络上是可用的并且通过标准机制来访问,所述标准机制促进由异构的瘦或厚客户端平台(例如,移动电话、膝上型计算机和pda)的使用。
35.资源池化:提供者的计算资源被池化以使用多租户模型服务于多个消费者,其中不同的物理和虚拟资源根据需要被动态地分配和重新分配。存在位置独立性的意义,因为消费者通常对所提供资源的确切位置不具有控制或知识,但可以能够在较高抽象层级(例如,国家、州或数据中心)处指定位置。
36.快速弹性:可以快速且弹性地提供能力(在一些情况下,自动地)以快速缩小并且快速释放以快速放大。对于消费者,可以用于供应的能力通常显得不受限制,并且可以在任何时间以任何数量购买。
37.测量的服务:云系统通过利用适于服务类型(例如,存储、处理、带宽和活动用户账户)的某种抽象级别的计量能力来自动控制和优化资源使用。可以监视、控制和报告资源使用,从而为所利用的服务的提供者和消费者两者提供透明度。
38.业务模型如下:
39.软件即服务(saas):提供给消费者的能力是使用在云基础设施上运行的提供者的应用。应用可以通过诸如web浏览器(例如,基于web的电子邮件)的瘦客户端接口从不同客户端设备访问。消费者不管理或控制包括网络、服务器、操作系统、存储或甚至单独的应用能力的底层云基础结构,可能的例外是有限的用户特定的应用配置设置。
40.平台即服务(paas):向消费者提供的能力是在云基础结构上部署消费者创建或获取的应用,该应用是使用提供者所支持的编程语言和工具来创建的。消费者不管理或控制包括网络、服务器、操作系统或存储的底层云基础结构,但是具有对所部署的应用以及可能的应用托管环境配置的控制。
41.基础设施即服务(iaas):提供给消费者的能力是提供消费者能够部署和运行可以包括操作系统和应用的任意软件的处理、存储、网络和其他基本计算资源。消费者不管理或
控制底层云基础结构,而是具有对操作系统、存储、所部署的应用的控制,以及对选择联网组件(例如,主机防火墙)的可能的有限的控制。
42.部署模型如下:
43.私有云:云基础结构仅为组织操作。它可以由组织或第三方管理,并且可存在于场所内或场所外。
44.社区云:云基础结构由若干组织共享并且支持具有共享的关注(例如,任务、安全要求、策略和合规性考虑)的特定社区。它可由组织或第三方管理,并且可以存在于场所内或场所外。
45.公共云:使云基础结构对公众或大型产业组可用并且由销售云服务的组织拥有。
46.混合云:云基础架构是两个或更多个云(私有、社区或公共的)的组成,这些云保持唯一实体但通过标准化或专有技术来绑定在一起,这些技术实现数据和应用便携性(例如,用于云之间的负载平衡的云突发)。
47.云计算环境是面向服务的,关注于状态、低耦合、模块性和语义互操作性。云计算的核心是包括互连节点网络的基础设施。
48.现在参见图1,描绘了说明性云计算环境50。如图所示,云计算环境50包括一个或多个云计算节点10,云消费者使用的本地计算设备(诸如个人数字助理(pda)或移动电话54a、台式计算机54b、膝上型计算机54c和/或汽车计算机系统54n)可与云计算节点10通信。节点10可以彼此通信。它们可以被物理地或虚拟地分组(未示出)在一个或多个网络中,诸如上文描述的私有云、社区云、公共云或混合云或其组合。这允许云计算环境50提供基础结构、平台和/或软件作为云消费者不需要维护本地计算设备上的资源的服务。可以理解,图1中所示的计算装置54a-n的类型仅旨在是说明性的,且计算节点10和云计算环境50可以经由任何类型的网络和/或网络可寻址连接(例如,使用网络浏览器)与任何类型的计算机化装置通信。
49.现在参见图2,示出了由云计算环境50(图1)提供的一组功能抽象层。应预先理解,图2中所示的组件、层和功能仅旨在是说明性的,并且本发明的实施例不限于此。如所描绘的,提供了以下层和相应的功能:
50.硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:大型机61;基于risc(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
51.虚拟化层70提供抽象层,从该抽象层可以提供虚拟实体的以下示例:虚拟服务器71;虚拟存储装置72;虚拟网络73,包括虚拟专用网络;虚拟应用和操作系统74;以及虚拟客户端75。
52.在一个实例中,管理层80可以提供下文所描述的功能。资源供应81提供用于执行云计算环境内的任务的计算资源和其他资源的动态获取。计量和定价82在云计算环境内利用资源时提供成本跟踪,并且针对这些资源的消费进行计费或开发票。在一个示例中,这些资源可以包括应用软件许可证。安全性为云消费者和任务提供身份验证,以及对数据和其他资源的保护。用户门户83为消费者和系统管理员提供对云计算环境的访问。服务级别管理84提供云计算资源分配和管理,使得满足所需的服务级别。服务级别协议(sla)计划和履行85提供云计算资源的预先安排和采购,根据sla预期该云计算资源的未来要求。
53.工作负载层90提供可以利用云计算环境的功能的示例。可以从该层提供的工作负荷和功能的示例包括:地图和导航91;软件开发和生命周期管理92;虚拟教室教育递送93;数据分析处理94;交易处理95;以及容器镜像创建和部署96。
54.现在参见图3,示出了云计算节点的示例的示意图。云计算节点10仅是合适的云计算节点的一个示例,并且不旨在对在此描述的本发明的实施例的使用范围或功能提出任何限制。无论如何,云计算节点10能够被实现和/或执行上文阐述的任何功能。
55.在云计算节点10中存在计算机系统/服务器12,其可以与许多其他通用或专用计算系统环境或配置一起操作。可以适合于与计算机系统/服务器12一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户机、厚客户机,手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品,网络pc、小型计算机系统、大型计算机系统和包括任何上述系统或设备的分布式云计算环境,等等。
56.计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般上下文中描述。一般而言,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器12可以在分布式云计算环境中实现,其中任务由通过通信网络链接的远程处理设备来执行。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质两者中。
57.如图3所示,云计算节点10中的计算机系统/服务器12以通用计算设备的形式示出。计算机系统/服务器12的组件可以包括但不限于一个或多个处理器或处理单元16、系统存储器28、以及将包括系统存储器28的各种系统组件耦合到处理器16的总线18。
58.总线18表示若干类型的总线结构中的任一种总线结构中的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任一种的处理器或局部总线。作为示例而非限制,此类架构包括工业标准架构(isa)总线、微通道架构(mca)总线、增强型isa(eisa)总线、视频电子标准协会(vesa)局部总线和外围组件互连(pci)总线。
59.计算机系统/服务器12通常包括各种计算机系统可读介质。这样的介质可以是能够由计算机系统/服务器12访问的任何可用介质,并且它包括易失性和非易失性介质、可移除和不可移除介质。
60.系统存储器28可以包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(ram)30和/或高速缓存存储器32。计算机系统/服务器12还可以包括其他可移除/不可移除、易失性/非易失性计算机系统存储介质。仅通过举例的方式,可以提供存储系统34用于从不可移动、非易失性磁介质(未示出,并且通常被称为“硬盘驱动器”)读取和向其写入。尽管未示出,可以提供用于读写可移除非易失性磁盘(例如,“软盘”)的磁盘驱动器以及用于读写诸如cd-rom、dvd-rom或其他光学介质的可移除非易失性光盘的光盘驱动器。在这样的实例中,每个都可以通过一个或多个数据介质接口连接到总线18。如下面将进一步描绘和描述的,存储器28可以包括至少一个程序产品,该程序产品具有被配置为执行本发明的实施例的功能的程序模块的集合(例如,至少一个)。
61.具有一组(至少一组)程序模块42的程序/实用工具40以及操作系统、一个或多个
应用程序、其他程序模块和程序数据可以通过示例而非限制的方式存储在存储器28中。操作系统、一个或多个应用程序、其他程序模块和程序数据中的每个或其某一组合可以包含括联网环境的实施例。程序模块42通常执行本发明所描述的实施例的功能和/或方法。
62.计算机系统/服务器12也可以与一个或多个外部设备14通信,诸如键盘、定点设备、显示器24等;使得用户能够与计算机系统/服务器12交互的一个或多个设备;和/或使计算机系统/服务器12能够与一个或多个其他计算设备通信的任何设备(例如,网卡、调制解调器等)。这样的通信可以经由输入/输出(i/o)接口22发生。再者,计算机系统/服务器12可以经由网络适配器20与诸如局域网(lan)、通用广域网(wan)和/或公共网络(例如,互联网)的一个或多个网络通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其他组件通信。应当理解,虽然未示出,但是其他硬件和/或软件组件可以与计算机系统/服务器12结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据归档存储系统等。
63.现在参见图4,示出了根据一个实施例的方法400的流程图。在不同实施例中,方法400可以根据本发明在图1-图3和图7-图10中描绘的任何环境中执行,等等。当然,如本领域技术人员在阅读本说明书后将理解的,方法400中可以包括比图4中具体描述的那些操作更多或更少的操作。
64.方法400的每个步骤可以由操作环境的任何合适的组件来执行。例如,在不同实施例中,方法400可以部分地或完全地由一个或多个服务器、计算机或其中具有一个或多个处理器的一些其他设备来执行。处理器(例如,以硬件和/或软件实现并且优选地具有至少一个硬件组件的(多个)处理电路、(多个)芯片和/或(多个)模块)可以在任何设备中用于执行方法400的一个或多个步骤。说明性处理器包括但不限于中央处理单元(cpu)、专用集成电路(asic)、现场可编程门阵列(fpga)等、其组合、或本领域已知的任何其他合适的计算设备。
65.如图4所示,方法400可以开始于操作402,其中接收创建容器的请求。在一个实施例中,可以从用户接收请求。在另一实施例中,可以在计算节点群集(例如,分布式计算网络、基于云的计算环境等)处接收请求。
66.附加地,在一个实施例中,容器可以使用操作系统(os)级虚拟化来实现,并且可以依赖于自包含的软件包(例如,镜像)。在另一实施例中,创建容器可以包括在集群内的多个计算节点中的一个处安装容器的文件系统,在容器内加载一个或多个文件(例如,包含可执行文件、库、数据等)和/或在容器内运行一个或多个应用,利用装载的文件系统等。
67.进一步,方法400可以继续进行操作404,其中取回容器的容器镜像的清单。在一个实施例中,容器镜像可以包括在计算节点群集中的一个计算节点处创建容器所需的所有文件。例如,容器镜像可包括多个文件(例如,包括代码、运行时间、系统工具、系统库和设置等的可执行包)。
68.更进一步,在一个实施例中,容器镜像的清单可以包括描述容器镜像内的多个文件的元数据。例如,清单可以包括文件名(例如,内容标识符)、与那些文件相关联的所有权和/或权限数据等的列表。在另一示例中,清单可以包括针对文件的基于内容的地址(例如,文件散列、指向存储多个文件的位置的指针等)。在又一示例中,清单可存储多个文件存根,其各自包含指向存储文件的位置的指针。
69.此外,在一个实施例中,清单可以包括描述容器镜像内的多个文件而不是多个文件本身的元数据。在另一实施例中,文件可以被远程地存储在内容存储(例如,集中式对象存储)处。在又一实施例中,文件中的一个或多个可以被本地存储(例如,在已经创建容器的节点处等)。
70.此外,在一个实施例中,清单可以从存储库取回。例如,群集内的节点可以被分配创建容器的任务,并且可以从物理上与节点分开的清单存储库(例如,数据库等)取回容器的容器镜像的清单。
71.此外,在一个实施例中,可以从创建容器的节点本地取回清单。例如,被分配创建容器的任务的节点可以在其高速缓存的数据中搜索清单,并且如果清单在高速缓存中被找到,则高速缓存的清单可以从高速缓存中被取回。在另一示例中,如果在高速缓存中未找到清单,那么清单可从与节点分开定位的存储库取回。
72.更进一步,方法400可以继续进行操作406,在操作406,利用清单来装载容器的文件系统。在一个实施例中,清单可以包括足够的数据来创建(例如,装载)容器的文件系统。在另一实施例中,清单可以包括一个或多个索引节点描述符和文件散列。在又一实施例中,索引节点描述符可以包括用于装载容器的文件系统的元数据。在另一实施例中,文件系统可以装载在计算节点群集的节点处(例如,被分配创建容器的任务的节点等)。
73.以此方式,可以利用容器镜像的清单而不是完整的容器镜像本身来装载容器的文件系统。清单可以仅包括安装文件系统所需的元数据,以及指向包括在容器镜像内的附加文件数据的指针。作为结果,清单在大小上可以比容器镜像本身小得多。通过取回清单而不是镜像以便安装容器的文件系统,节点可以使用显著更少的带宽,这可以改善节点所使用的计算硬件的性能,以及用于实现通信网络的硬件组件的性能,通信网络促进节点与数据存储(诸如清单存储库)之间的数据传输,容器镜像存储库等。
74.现在参见图5,示出了根据一个实施例的用于执行按需容器镜像文件访问的方法500的流程图。在不同实施例中,方法500可在图1-图3和图7-图10中描绘的任何环境中根据本发明执行,等等。当然,如本领域技术人员在阅读本说明书时将理解的,方法500中可包括比图5中具体描述的那些操作更多或更少的操作。
75.方法500的每个步骤可以由操作环境的任何合适的组件来执行。例如,在不同实施例中,方法500可以部分地或完全地由一个或多个服务器、计算机或其中具有一个或多个处理器的一些其他设备来执行。处理器(例如,以硬件和/或软件实现并且优选地具有至少一个硬件组件的(多个)处理电路、(多个)芯片和/或(多个)模块)可以在任何设备中用于执行方法500的一个或多个步骤。说明性处理器包括但不限于中央处理单元(cpu)、专用集成电路(asic)、现场可编程门阵列(fpga)等、其组合、或本领域已知的任何其他合适的计算设备。
76.如图5所示,方法500可以开始于操作502,其中通过针对容器装载的文件系统,标识访问容器的容器镜像内的数据的请求。在一个实施例中,访问数据的请求可以包括文件读取请求。在另一实施例中,访问数据的请求可以包括来自容器内的应用程序读取容器镜像内的数据的请求。
77.附加地,在一个实施例中,可以在计算节点群集的节点处为容器装载文件系统。在另一个实施例中,文件系统可以响应于创建容器的请求而被装载以用于容器。
78.进一步,方法500可以继续进行操作504,其中响应于确定数据本地位于高速缓存处而从高速缓存取回数据。例如,高速缓存可以包括比集群的节点内的标准数据存储更快的高速、低时延存储器。在另一示例中,高速缓存可以包括易失性存储器。
79.更进一步,方法500可继续进行操作506,其中利用容器镜像的清单来确定数据的位置,并且响应于确定数据不位于高速缓存处,利用数据的位置从内容存储库远程地取回数据。在一个实施例中,数据的位置可以被包括在清单内存储的元数据内。例如,元数据可以描述容器镜像内的多个文件。在另一实施例中,清单可以包括针对文件的基于内容的地址(例如,文件散列、指向存储多个文件的位置的指针等)。在另一实施例中,内容存储器可以与集群的节点物理上分离,并且可以经由通信网络来访问。
80.此外,在一个实施例中,文件系统可以安装在集群的预定节点处。在另一实施例中,响应于确定镜像的清单指示数据本地存储在高速缓存处,可以从高速缓存取回数据。在又一实施例中,响应于确定镜像的清单指示数据未本地存储在高速缓存处,可以利用通信网络从内容存储库取回数据。例如,内容存储器可以与容器镜像相关联地存储数据。
81.此外,在一个实施例中,所取回的数据可以由所装载的文件系统使用。例如,可以利用所装载的文件系统将所取回的数据呈现给在该节点内运行的应用。
82.以此方式,容器镜像的清单可以使容器的所装载的文件系统能够按需获取容器镜像内的数据,而不必将容器镜像本地存储在装载文件系统的节点上。这可以减少在节点上实现容器所需的数据量,这可以提高节点的性能。这还可以减少为了在节点上实现容器而需要传输到节点的数据量,这可以减少节点和容器镜像存储库之间的网络业务量,从而改进实现这样的网络通信的一个或多个硬件组件的性能。
83.现在参见图6,示出了根据一个实施例的用于使用元数据包在运行的容器中安装包的方法600的流程图。在不同实施例中,方法600可根据本发明在图1-图3和图7-图10中描绘的任何环境中执行。当然,如本领域技术人员在阅读本说明书后将理解的,比图6中具体描述的那些操作更多或更少的操作可以被包括在方法600中。
84.方法600的每个步骤可以由操作环境的任何合适的组件来执行。例如,在不同实施例中,方法600可以部分地或完全地由一个或多个服务器、计算机或其中具有一个或多个处理器的一些其他设备来执行。在硬件和/或软件中实现并且优选地具有至少一个硬件组件(例如,(多个)处理电路、(多个)芯片和/或(多个)模块)的处理器可以在任何设备中用于执行方法600的一个或多个步骤。说明性处理器包括但不限于中央处理单元(cpu)、专用集成电路(asic)、现场可编程门阵列(fpga)等、其组合、或本领域已知的任何其他合适的计算设备。
85.如图6所示,方法600可以开始于操作602,其中接收将软件包安装在运行容器中的命令。在一个实施例中,可以从用户、应用等接收命令。在另一实施例中,可以在计算节点群集(例如,分布式计算网络、基于云的计算环境等)处接收命令。
86.附加地,在一个实施例中,软件包可以包括将软件包添加到计算节点群集中的一个计算节点处的运行容器所需的所有文件。在另一实施例中,运行容器可以包括利用容器镜像已经被安装在节点处的容器。例如,可以分配集群的节点来创建容器镜像。
87.进一步,方法600可以开始于操作604,其中取回针对软件包的元数据包。在一个实施例中,元数据包可以从公共存储库(例如,数据库,诸如公共包元数据存储库等)取回。例
如,公共包元数据存储区可在物理上与存储元数据包所指向的文件的公共包数据存储库分开。
88.更进一步,在一个实施例中,元数据可以包括文件列表和文件内容的散列。在另一实施例中,元数据可以包括文件中的每个文件的位置,而不是文件本身。
89.同样,在一个实施例中,节点可以首先检查节点的本地高速缓存以查看元数据包是否位于高速缓存内。例如,如果确定元数据包位于高速缓存内,则可从高速缓存取回元数据包。在另一示例中,如果元数据包未被确定为位于高速缓存内,则可从与高速缓存和节点分开的公共存储库取回元数据包。
90.此外,方法600可以继续进行操作606,其中利用元数据包在运行的容器中安装软件包。在一个实施例中,安装软件包可以包括在集群的节点(例如,分配的节点等)处的元数据包内安装元数据。
91.此外,在一个实施例中,元数据可以作为具有指向数据的指针的一个或多个存根文件被安装在节点内。例如,存根文件中的每个存根文件可以表示容器镜像内的文件。在另一示例中,存根文件中的每个存根文件可以不是文件本身,而是文件的元数据占位符。在又一实例中,存根文件中的每个存根文件可以指向存储文件的位置(例如,在分开的文件存储库处、在高速缓存处等)。
92.更进一步,在一个实施例中,元数据内的文件内容的散列可以用作软件包内的指针。
93.此外,方法600可以继续进行操作608,其中在软件包的安装期间标识针对文件的需要。在一个实施例中,可以在软件包的安装期间接收对软件包内的特定文件的请求。例如,可以从正在安装软件包的编译器接收请求。在另一实施例中,软件包的安装可以需要不存在于元数据包内的文件。
94.另外,方法600可继续进行操作610,其中利用元数据包取回文件。在一个实施例中,响应于标识出针对文件的需要,可以搜索正在创建容器镜像的节点的本地高速缓存,以查看文件是否位于高速缓存内。在另一实施例中,如果文件位于高速缓存处,那么可从高速缓存取回文件。在又一实施例中,如果文件不位于高速缓存处,则可以从文件存储库(例如,与高速缓存和节点分开的公共存储库)取回文件。
95.进一步,在一个实施例中,可以在该节点处标识该文件的元数据占位符(例如,该文件的存根)。在另一实施例中,指向文件的位置的指针可以与元数据占位符相关联。在又一实施例中,指针可以用于确定文件的位置并且取回文件。在又一实施例中,文件可以被取回并且可以用于继续和/或完成软件包的安装。
96.以此方式,元数据包可以仅包含文件元数据,而不包含容器镜像内包含的实际文件。结果,安装元数据包可以仅要求复制元数据和相关联的指针,而不必复制数据本身。在软件包的安装期间所需的数据可以根据需要按需取回。这可以减少安装软件包所需的存储量,这可以改善实现软件包的安装的硬件计算设备的性能。这还可以帮助以加快且有效的方式创建镜像。这还可以减少安装软件包所需的带宽量,从而提高实现在安装软件包期间使用的一个或多个网络通信的一个或多个硬件组件的性能。
97.有效的运行时镜像分发、部署和操作
98.镜像分发具有几个一致的特性。例如,存在分布式镜像的高级别复制,并且容器实
际上使用小百分比的镜像数据。可以利用这些见解来改进镜像分发和部署。
99.在一个实施例中,每个镜像可以由列出文件名和元数据的小清单来表示。另外,清单本身就足以在工作者节点上创建(例如,装载)文件系统,并且支持只读元数据操作,而不提取任何文件数据。
100.另外,在一个实施例中,对于每个包含文件,清单存储文件的数据的基于内容的地址。文件内容本身存储在例如对象存储器中。仅由主机实际访问的数据以按需的方式被传送到主机。实现镜像的节点的本地存储器和存储装置不保留重复的文件,并且注册表不包含重复。
101.在一个实施例中,提供了一种用于存储和分发镜像的方法。另外,提供了一种用于仅使用文件系统元数据来启动容器的方法。进一步地,还提供了一种按需下载容器数据的方法。更进一步,提供了一种用于在使用内容可寻址存储装置传送镜像时避免重复的方法。
102.此外,提供了一种用于管理主机侧镜像高速缓存的方法。此外,提供了一种用于将传统镜像透明转换为内容可寻址镜像的方法。
103.图7示出了根据一个示例性实施例的示例性镜像分发系统组件700。如图所示,清单存储库702存储多个镜像清单704。每个镜像清单704包括一个或多个索引节点描述符706。镜像清单704用于在指定的主机710内装载文件系统708。如果期望容器镜像内的文件,则在容器镜像的镜像清单704内标识索引节点描述符706,并且该索引节点描述符706被用于从内容存储库712取回文件。
104.图8示出了根据一个示例性实施例的示例性镜像分发系统实现方式800。如图所示,响应于在主机802处创建容器的请求,从清单存储806取回容器的容器镜像的清单804。该清单804用于在容器主机802内安装文件系统808。
105.响应于对安装的文件系统808内的第一文件的请求,文件系统808内的第一文件810的存根可以指向共享高速缓存812,其中文件被取回。响应于对安装的文件系统808内的第二文件的请求,文件系统808内的第二文件814的存根不指向共享高速缓存812。作为结果,第二文件的基于内容的地址在清单804内被标识并且被用于从内容存储库816取回第二文件。
106.示例性容器启动和文件操作
107.在一个实施例中,在启动期间,用户从镜像a请求启动容器。如果本地存在用于镜像a的清单,则使用该清单为容器安装文件系统。如果清单不在本地存在,则从清单存储库中取回清单,并且使用清单为容器装载文件系统。在装载了文件系统之后,可以完全在本地(例如,在具有启动容器的节点本地等)执行诸如打开、状态、读取等操作。
108.在另一实施例中,应用请求从文件f读取数据。作为响应,使用清单中的文件f的内容散列,确定文件f是否在本地可用(例如,在节点的高速缓存内等)。如果文件f在本地可用,则所请求的数据被返回到应用。如果文件f在本地不可用,则从内容存储器获取缺失的文件内容,并且将请求的数据返回到应用。
109.在又一实施例中,应用请求将数据写入到文件f。如果所述写入是完全重写,则利用应用提供的数据来更新所述副本。在另一实施例中,更新不去往内容存储库,除非明确请求。在另一实施例中,当容器停止时,根文件系统的改变丢失。写入确认然后被发送到应用。
110.如果写入不是完全重写,则使用清单中的文件f的内容散列,确定文件内容是否在
本地可用。如果是,则创建f的内容的副本,利用应用提供的数据来更新副本,并且向应用发送对写入的确认。如果内容在本地不可用,则从内容存储器获取缺失的文件内容,创建f的内容的副本,利用应用提供的数据来更新副本,并且向应用发送对写入的确认。
111.在又一实施例中,元数据更新(例如,创建、删除、重命名、目录操作、设置类实例中的某个属性值(setattr)等)不需要与内容或清单存储库通信。
112.内容可寻址共享高速缓存管理
113.在一个实施例中,高速缓存驻留在易失性存储器中。可以支持常见的无盘设置,并且对于本地存储高速缓存可以存在可选的支持。内存缓存大小在容器运行时间开始时是固定的,容器编排器(k8)负责调度容器时高速缓存所使用的存储器。
114.进一步,分层存储器高速缓存逐出次序可以存在,如下:
115.t1:未被任何局部拉取的清单引用的二进制大对象(blob)(镜像被删除)
116.t2:未被任何“运行”镜像引用(但被本地清单引用)的blob
117.t3:未由任何打开文件引用(但由运行镜像引用)的未修改blob
118.t4:其他未修饰的blob
119.还可以使用引用跟踪和垃圾收集技术。可以在层内使用lru或arc驱逐策略。为了处理高速缓存脱机或空间外情况,可以阻止i/o,或者可以提供与enospc的错误。还可执行镜像中频繁使用的文件的预取(例如,利用清单扩展等)。
120.与现有注册的兼容性
121.有可能使用其他图形驱动器(例如,覆盖、dm等)使用标准镜像。镜像转换服务(ics)可从传统注册中心下载镜像、拆开tar球、将丢失的文件作为blob上传到内容存储库、生成清单、并且将它们上传到清单存储库。
122.ics可以与常规工作节点聚合或者在一组专用节点上运行。在融合设置中,工作节点可以接收常规镜像,将它们转换成镜像,并且立即使用文件系统开始容器。可以异步地执行将缺失的内容和清单上传到适当的存储库。
123.通过元数据软件包的快速容器镜像构建
124.容器镜像构建由几个步骤组成:
125.取回基础镜像
126.在来自远程副本的镜像中安装附加软件
127.将本地软件和数据复制到镜像中
128.提取/构建/生成附加镜像人工产品
129.由于大量的i/o(网络和存储装置)需要,这种构建过程可能花费很长的时间,因为大量的数据需要被复制/取回。大部分时间花费在包取回和安装中(yum、apt等)。另外,如果镜像被重复构建(例如,在ci/cd流水线或镜像测试期间),则开销增加。对于任何oci兼容镜像存在该问题。
130.结果,需要用于构建容器镜像的更快的方式。
131.在一个实施例中,提供了一种用于安装和管理软件包(例如,rpm、deb等)的方法,其中该方法包括维护包存储库,该包存储库由公共包数据存储库、公共包元数据存储库以及私有数据存储库组成;安装软件包并且从公共元数据存储库中仅下载包括打包的文件的列表及其内容散列的包元数据;将元数据作为存根文件安装在所述文件系统中,存根文件
具有经由其内容散列指向数据的指针;以及如果相同的内容尚未存在于私有数据存储库中,则将所述数据异步地或按需地从所述公共数据存储库取回到所述私有数据存储库中。
132.在另一实施例中,提供了一种用于创建和共享元数据包的方法,包括遍历包规范文件中或现有包中列出的文件,计算每个文件的内容id,并且将id添加到包元数据;以及仅在文件的内容尚未存在于公共数据存储库处时将新包元数据上传到公共元数据存储库,同时将文件上传到公共数据存储库。
133.另外,在一个实施例中,包是文件元数据的集合,仅没有实际内容。安装包仅需要复制元数据,并且从包存储库取回元数据是资源高效且快速的。在包安装期间不需要存储装置或网络i/o,以及,当并且如果需要包数据,则使用文件元数据来取回必要的数据。
134.图9示出了根据一个示例性实施例的示例性系统架构900。如图所示,存储包数据的repo存储库902与存储元数据包的repo包存储库904和存储在本地要由容器访问的包数据的集群存储库906分开定位。容器主机908接收指令910以使用第一封装构建镜像。从repo包存储库904取回针对第一包的元数据912以构建镜像。
135.另外,如果在构建镜像期间需要文件,则首先检查集群存储库906。如果文件存在群集存储库906处,那么由容器主机908的获取器模块914从群集存储库906取回文件。如果文件不存在于集群存储906处,则容器主机908的获取器模块914从repo存储库902取回文件。
136.图10示出了根据一个示例性实施例的示例性包安装1000。如图所示,元数据包1002是从存储库下载的。附加地,创建在元数据包1002中列出的所有目录1004(例如,使用posix创建)。进一步,对于元数据包1002中列出的每个常规文件,创建文件并且通过ioct1系统调用来设置其filelink。filelink之后,并且如果内容尚未存在于内容存储库1006中,则取回内容。在一个实施例中,ioct1系统调用可以应用于整个列表以创建全部内容。
137.在一个实施例中,现有的(安装前/安装后)脚本集可以照常与文件系统交互,并且如果脚本集需要尚未被取回的任何文件,则包管理器将等待直到必要的数据已经被取回。
138.包创建
139.在一个实现中,包基于rpm。可以通过.spec文件提供定义。这可以与现有的.spec格式兼容。可以通过新的build-skinny-pkg工具工具来实现数据包创建。如下提供示例build-skiny-pkg工具:
140.example.spec1.141.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑
142.name:example
143.version:0.1.1
144.buildrequires:python
145.requires:bash
146.%build
147.python-m compileall%{name}.py
148.%install
149.mkdir-p%{buildroot}/usr/lib/%{name}
150.install-m 0644%{name}.py*%{buildroot}/usr/lib/%{name}/
151.%files
152.%dir/usr/lib/%{name}/
153./usr/lib/%{name}/%{name}.py*
154.上述规范可以创建.spkg包文件。工具build-skinny-pkg可以执行以下步骤:
155.1.旋转%{布尔德罗}
156.2.针对每个文件
157.a.计算散列
158.b.检查在repo存储库中是否已经存在
159.c.如果不是,则上传到repo存储库
160.d.向.spkg文件的报头添加元数据条目3.上传.spkg文件到repo包存储库
161.包文件布局和转换
162.数据包文件可以基于.rpm格式。它们可以包括报头前导码、报头索引(具有描述报头存储中的不同条目的标签)和报头存储。spkg包可以不具有有效载荷(例如,其可以为数据存档),而且可以包括存储每个文件的散列的新报头标签(hwtag_filelinks)。目录和非常规文件的文件链接可以被设置为
“‑
1”。
163.在一个实施例中,从.rpm至.spkg包的转化由以下步骤组成:
164.1.复制前导
165.2.复制索引并且添加新的hwtag_filelinks标签
166.3.从.rpm文件中提取内容
167.4.迭代通过文件列表并且对于每个文件
168.a.计算散列
169.b.上传到repo存储库
170.c.向报头存储库添加散列
171.优先化的内容取回
172.在一个实施例中,提取器可以并行地取回内容以不阻挡镜像构建。提取器可以按优先次序取回内容。可以首先获取在镜像构建期间所需的任何包文件。可以通过以下步骤确定优先取回次序:
173.1.扫描对二进制文件的调用的docker文件(run命令)
174.2.根据二进制文件在docker文件中的位置排序找到的二进制文件3.对于每个找到的二进制文件,扫描当前包用于匹配
175.4.如果发现匹配,则将二进制文件附加到已经优化的文件的列表5.按顺序取回优化的二进制
176.包还可以指定优选的取回次序作为包元数据的一部分。
177.切换存储库
178.在一个实施例中,从标准存储库到元数据存储库的转换可以通过两个不同的选项来实现。第一选项是提供全新的存储库和工具集并且使工具集与现有存储库工具集(例如,yum)兼容的新工具集。旧的工具集命令可以被别名化成用于无缝转换的新的工具集命令。
179.第二选项是通过改变现有工具以允许元数据包取回来更新现有工具集。可以添加指示是否应当取回元数据软件包的选项。每个存储库定义可以具有两个版本:一个用于传
统的并且一个用于元数据包。如果设置元数据包选项,则可以使用元数据包repo。
180.在一个实施例中,提供了一种存储并且服务元数据包以用于在镜像构建期间在容器镜像中的安装的方法。另外,提供了一种在容器镜像中安装元数据软件包的方法。进一步,提供了一种用于创建元数据软件包的方法,其与现有的包创建工具兼容。更进一步,提供了用于元数据软件包的文件布局。
181.此外,提供了一种将现有包转换为元数据软件包的方法。进一步,提供了一种用于元数据软件包的内容的按优先的次序取回的方法。
182.在一个实施例中,提供了一种用于容器根文件系统创建、操作和与容器镜像注册表的交互的方法,该方法包括:维护包含每个文件的路径、元数据和内容散列的每个容器镜像清单,同时将文件的内容保持在注册表的内容可寻址存储中;在容器开始期间,从所述镜像注册中心仅下载所述镜像清单,而不下载镜像内容,并且装载具有存储在索引节点中的内容散列的所述文件系统;在文件数据访问时,检查文件的内容是否在本地存在;如果内容丢失,则从注册表将其下载到高速缓存;将下载的文件内容保持在主机上的所有容器根文件系统实例之间共享的本地内容可寻址高速缓存中;以及当将镜像推送到注册表时,生成清单并且将镜像连同仅缺失的内容一起上传到注册表。
183.本发明可以是任何可能的集成技术细节水平的系统、方法和/或计算机程序产品。计算机程序产品可以包括其上具有用于使处理器执行本发明的实施例的计算机可读程序指令的计算机可读存储介质(或多个介质)。
184.计算机可读存储介质可以是可以保留和存储指令以用于指令执行设备使用的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下:便携式计算机盘,硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存),静态随机存取存储器(sram)、便携式致密盘只读存储器(cd-rom),数字通用盘(dvd)、记忆棒、软盘、机械编码设备(诸如穿孔卡片)或具有记录在其上的指令的凹槽中的凸起结构),以及上述的任意合适的组合。如本文中所使用的计算机可读存储介质不应被解释为瞬态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过导线传输的电信号。
185.本文所述的计算机可读程序指令可从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并且转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
186.用于执行本发明的操作的计算机可读程序指令可以是汇编指令,指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据,集成电路的配置数据,或以一种或多种编程语言的任何组合编写的源代码或目标代码,包括面向对象的smalltalk、c++等编程语言,以及过程式编程语言,例如“c”编程语言或类似的编程语言。计算机可读程序指令可完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立
软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网(wan))连接到用户的计算机,或者可以连接到外部计算机(例如,通过使用互联网服务提供商的互联网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla))可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以用于执行本发明的实施例。
187.本文中参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图描述本发明的实施例。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令来实现。
188.这些计算机可读程序指令可以被提供给计算机的处理器或其他可编程数据处理装置以产生机器,使得指令经由计算机或其他可编程数据处理装置的处理器执行,创建用于实现在流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在可以指引计算机的计算机可读存储介质中,可编程数据处理装置,和/或以特定方式起作用的其他设备,使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的实施例的指令。
189.计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置上,或使得在计算机上执行一系列操作步骤的其他装置,其他可编程装置或其他设备,以产生计算机实现的过程,使得在计算机上执行的指令,其他可编程装置或其他设备实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
190.附图中的流程图和框图图示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。对此,流程图或框图中的每个方框可以代表模块、段或指令的一部分,其包括用于实现规定的逻辑功能的一个或多个可执行指令。在一些替代实施例中,框中所标注的功能可以不以图中所标注的次序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以作为一个步骤完成、同时执行、基本同时地、以部分或全部时间上重叠的方式执行,或者这些框有时可以以相反的顺序执行。还将注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中的框的组合可以由基于专用硬件的系统来实现,所述基于专用硬件的系统执行指定的功能或动作或执行专用硬件与计算机指令的组合。
191.此外,根据不同实施例的系统可包括处理器和与处理器集成和/或能够由处理器执行的逻辑,该逻辑被配置成执行本文所叙述的过程步骤中的一个或多个。通过集成,意味着处理器具有嵌入其中的逻辑作为硬件逻辑,诸如专用集成电路(asic)、fpga等。通过处理器可执行,意味着逻辑是硬件逻辑;软件逻辑,诸如固件、操作系统的一部分、应用程序的一部分;处理器能够访问并且被配置为在由处理器执行时使处理器执行某种功能的硬件和软件逻辑的某种组合等。如本领域已知的,软件逻辑可以存储在任何存储器类型的本地和/或远程存储器上。可以使用此项技术中已知的任何处理器,例如软件处理器模块和/或硬件处理器,例如asic、fpga、中央处理单元(cpu)、集成电路(ic)、图形处理单元(gpu)等。
192.将清楚的是,前述系统和/或方法的不同特征可以任何方式组合,从而从以上呈现的描述中创建多个组合。
193.将进一步了解,本发明的实施例可以代表客户部署的服务的形式提供以按需提供服务。
194.已经出于说明的目的呈现了本发明的不同实施例的描述,但并不旨在是穷尽性的或局限于所披露的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域的普通技术人员而言将是明显的。选择在此使用的术语以最佳地解释实施例的原理、实际应用或在市场上找到的技术上的技术改进,或使得本领域普通技术人员能够理解在此披露的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1