一种安全容器的启动方法、装置、电子设备及存储介质与流程

文档序号:31544481发布日期:2022-09-17 00:47阅读:121来源:国知局
一种安全容器的启动方法、装置、电子设备及存储介质与流程

1.本说明书一个或多个实施例涉及容器技术领域,尤其涉及一种安全容器的启动方法、装置、电子设备及机器可读存储介质。


背景技术:

2.随着云原生时代的到来,越来越多用户开始使用容器(container);容器是一种linux系统的内核虚拟化技术,可以用于隔离进程。
3.其中,传统容器,如runc容器等,是基于操作系统虚拟化技术的,可以使用宿主机的操作系统,与宿主机上的其他程序共享内核(kernel)。通过cgroups(control groups,linux控制组)和namespace机制,可以实现容器隔离。
4.而安全容器是基于硬件虚拟化技术的,可以使用宿主机所搭载的微虚机(microvm)的操作系统;微虚机是一种轻量虚拟机,可以作为安全容器中用户工作负载的运行环境。由于每个微虚机都具有独立的内核,部署在某个微虚机中的安全容器可以使用该微虚机的内核,因此通过宿主机所搭载的不同微虚机实现容器隔离。
5.由此可见,相较于传统容器,安全容器的隔离性更好,更加安全,但是安全容器的启动速度较慢,cpu和内存的开销较大。


技术实现要素:

6.有鉴于此,本说明书一个或多个实施例提供一种安全容器的启动方法、装置、电子设备及机器可读存储介质。
7.根据本说明书的第一方面,提供一种安全容器的启动方法,所述方法应用于宿主机上的容器引擎;所述宿主机上包括用于对所述宿主机上运行的安全容器进行管理的容器引擎和至少一个微虚机;所述微虚机上部署了至少一个安全容器;所述方法包括:
8.响应于与目标微虚机对应的容器启动模板创建请求,在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板;
9.将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;
10.响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
11.可选的,所述将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间,包括:
12.在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间;
13.将所述通用容器启动模板写入至所述目标内存地址空间。
14.可选的,在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用
容器启动模板的模板文件进行内存映射之前,所述方法还包括:
15.在所述文件系统的入口目录的子目录下,创建用于存储所述通用容器启动模板的模板文件。
16.可选的,所述在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间,包括:
17.在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行私有内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标私有内存地址空间。
18.可选的,所述从所述目标微虚机的内存空间中获取所述通用容器启动模板,包括:
19.在所述文件系统中确定用于存储所述通用容器启动模板的模板文件;
20.在所述目标微虚机的内存空间中确定所述模板文件被映射到的所述目标内存地址空间;
21.从所述目标内存地址空间中读取所述通用容器启动模板。
22.可选的,所述创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板,包括:
23.冷启动所述目标微虚机,以触发冷启动后的所述目标微虚机进一步启动其操作系统中用于启动安全容器的代理程序;
24.响应于检测到所述代理程序启动,对所述目标微虚机的运行时状态进行快照保存,以生成所述通用容器启动模板。
25.可选的,所述通用容器启动模板,包括用于启动所述目标微虚机上部署的任一安全容器的第一启动信息;所述容器启动请求携带了用于启动所述目标安全容器的第二启动信息;
26.所述基于获取到的所述通用容器启动模板启动所述目标安全容器,包括:
27.检测获取到的通用容器启动模板包括的第一启动信息与所述容器启动请求携带的第二启动信息是否适配;
28.若是,则根据获取到的通用容器启动模板启动所述目标安全容器;
29.若否,则根据所述第二启动信息对所述通用容器启动模板包括的第一启动信息进行更新,并根据更新后的通用容器启动模板启动所述目标安全容器。
30.可选的,所述第一启动信息,包括:用于启动所述目标微虚机的微虚机配置信息,和用于启动所述目标微虚机上部署的任一安全容器的容器配置信息;
31.所述根据获取到的通用容器启动模板或更新后的通用容器启动模板,启动所述目标安全容器,包括:
32.根据获取到的通用容器启动模板或更新后的通用容器启动模板中包括的微虚机配置信息,启动所述目标微虚机;
33.将所述目标微虚机切换至所述通用容器启动模板中保存的所述代理程序运行后的运行时状态,以使所述目标微虚机在所述运行时状态下运行所述代理程序;
34.根据获取到的通用容器启动模板或更新后的通用容器启动模板中包括的容器配置信息,启动所述目标微虚机上部署的所述目标安全容器。
35.可选的,所述支持大页存储的文件系统为linux hugetlbfs文件系统。
36.根据本说明书的第二方面,提供一种安全容器的启动装置,所述装置应用于宿主机上的容器引擎;所述宿主机上包括用于对所述宿主机上运行的安全容器进行管理的容器引擎和至少一个微虚机;所述微虚机上部署了至少一个安全容器;所述装置包括:
37.模板创建单元,用于响应于与目标微虚机对应的容器启动模板创建请求,在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板;
38.内存映射单元,用于将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;
39.容器启动单元,用于响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
40.根据本说明书的第三方面,提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
41.所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
42.根据本说明书的第四方面,提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
43.在以上实施例中,通过内存映射的方式,可以先将在支持大页存储的文件系统中创建的通用容器启动模板存储至目标微虚机的内存空间,再从所述目标微虚机的内存空间中获取所述通用容器启动模板,以启动所述目标微虚机上部署的目标安全容器;从而克服了相关技术中支持大页存储的文件系统不支持读/写系统调用的问题,实现了基于在支持大页存储的文件系统中创建的通用容器启动模板来启动目标安全容器。
44.相较于基于thp的模板启动方案,基于在支持大页存储的文件系统中创建的通用容器启动模板来启动安全容器,一方面,由于无需热插更大内存,因此可以加快安全容器的启动速度;另一方面,由于用于启动目标安全容器的通用容器启动模板是在支持大页存储的文件系统中创建的,可以保证为目标安全容器分配的内存完全使用大页内存,减少出现表项缺失(tlb miss)、缺页中断等问题,从而提升容器性能;再一方面,所述通用容器启动模板可以被所述宿主机上包括的至少一个微虚机共享,也即,可以被部署在不同微虚机中的安全容器共享,从而节约了所述文件系统中用于存储所述通用容器启动模板的内存开销。
附图说明
45.图1是一示例性的实施例示出的一种安全容器的启动方法的流程图;
46.图2是一示例性的实施例示出的一种安全容器的启动装置所在电子设备的结构示意图;
47.图3是一示例性的实施例示出的一种安全容器的启动装置的框图。
具体实施方式
48.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
49.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
50.为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面先对本说明书实施例涉及的安全容器的相关技术,进行简要说明。
51.随着云原生时代的到来,越来越多用户开始使用容器(container);容器是一种linux系统的内核虚拟化技术,可以用于隔离进程。
52.其中,传统容器,如runc容器等,是基于操作系统虚拟化技术的,可以使用宿主机的操作系统,与宿主机上的其他程序共享内核(kernel)。通过cgroups(control groups,linux控制组)和namespace机制,可以实现容器隔离。
53.而安全容器是基于硬件虚拟化技术的,可以使用宿主机所搭载的微虚机(microvm)的操作系统;微虚机是一种轻量虚拟机,可以作为安全容器中用户工作负载的运行环境。由于每个微虚机都具有独立的内核,部署在某个微虚机中的安全容器可以使用该微虚机的内核,因此通过宿主机所搭载的不同微虚机实现容器隔离,隔离性更好,更加安全。
54.在实际应用中,相较于传统容器,安全容器的启动速度较慢,cpu和内存的开销较大。为了提高安全容器的启动速度,并减少cpu开销和内存开销,可以采用模板启动方案,也即,基于已创建的容器模板来启动安全容器。进一步地,为了提升运行时的性能,安全容器需要使用宿主机中的大页内存(huge page)。
55.例如,可以采用基于thp(transparent huge pages,透明大页)的模板启动方案;具体地,可以先基于在磁盘等存储介质中、以小页存储的方式创建的容器模板来启动安全容器,启动之后再热插更大内存(按需热插小页内存或大页内存)。
56.其中,在页式虚拟存储器中,通常会将虚拟存储空间和物理存储空间都分割为若干固定大小的页(page),并以页为单位为各个线程分配存储空间。所述“小页”的大小,通常可以被设置为4k;所述“大页”的大小,通常可以被设置为2mb、1gb、甚至更大。
57.由此可见,在以上示出的实施例中,采用基于thp的模板启动方案时,一方面,由于需要热插更大内存,导致安全容器的启动速度变慢;另一方面,无法保证为安全容器分配的内存完全使用大页内存,无法最大程度地提升性能;再一方面,以小页存储的方式创建的容器模板,可能无法被部署在不同虚拟机中的安全容器共享,进而增加了内存开销。
58.有鉴于此,本说明书旨在提出一种基于在支持大页存储的文件系统中创建的通用容器启动模板,来启动安全容器的技术方案。
59.在实现时,宿主机上可以包括:用于对所述宿主机上运行的安全容器进行管理的容器引擎和至少一个微虚机;其中,每个微虚机上可以部署至少一个安全容器;所述容器引擎可以响应于与目标微虚机对应的容器启动模板创建请求,在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板;进一步地,所述容器引擎可以将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;进一步地,所述容器引擎可以响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
60.由此可见,在本说明书中的技术方案中,通过内存映射的方式,可以先将在支持大页存储的文件系统中创建的通用容器启动模板存储至目标微虚机的内存空间,再从所述目标微虚机的内存空间中获取所述通用容器启动模板,以启动所述目标微虚机上部署的目标安全容器;从而克服了相关技术中支持大页存储的文件系统不支持读/写系统调用的问题,实现了基于在支持大页存储的文件系统中创建的通用容器启动模板来启动目标安全容器。
61.相较于基于thp的模板启动方案,基于在支持大页存储的文件系统中创建的通用容器启动模板来启动安全容器,一方面,由于无需热插更大内存,因此可以加快安全容器的启动速度;另一方面,由于用于启动目标安全容器的通用容器启动模板是在支持大页存储的文件系统中创建的,可以保证为目标安全容器分配的内存完全使用大页内存,减少出现表项缺失(tlb miss)、缺页中断等问题,从而提升容器性能;再一方面,所述通用容器启动模板可以被所述宿主机上包括的至少一个微虚机共享,也即,可以被部署在不同微虚机中的安全容器共享,从而节约了所述文件系统中用于存储所述通用容器启动模板的内存开销。
62.下面通过具体实施例,并结合具体的应用场景对本技术进行描述。
63.请参见图1,图1是本说明书一示例性的实施例示出的一种安全容器的启动方法的流程图。所述方法可以应用于宿主机上的容器引擎;所述宿主机上可以包括用于对所述宿主机上运行的安全容器进行管理的容器引擎和至少一个微虚机;所述微虚机上可以部署了至少一个安全容器。所述方法可以执行以下步骤:
64.步骤102:响应于与目标微虚机对应的容器启动模板创建请求,在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板;
65.步骤104:将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;
66.步骤106:响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
67.在本说明书中,所述目标微虚机,可以为所述宿主机上包括的任一用于部署所述目标安全容器的微虚机;所述目标安全容器,可以为所述目标微虚机上部署的任一待启动的安全容器。
68.例如,容器引擎接收到的容器启动模板创建请求和/或容器启动请求中,可以携带所述目标微虚机的微虚机标识和/或所述目标安全容器的容器标识;响应于接收到所述容器启动模板创建请求和/或容器启动请求,可以将其中携带的微虚机标识所指示的微虚机
作为所述目标微虚机,和/或将其中携带的容器标识所指示的微虚机作为所述目标微虚机。
69.在本说明书中,响应于与所述目标微虚机对应的容器启动模板创建请求,可以在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板。
70.其中,所述通用容器启动模板,可以理解为,可以被不同微虚机共享的容器启动模板。由于可以将在支持大页存储的文件系统中存储的所述通用容器启动模板,以内存映射的方式分别存储至不同微虚机的内存空间,进而可以基于在不同微虚机的内存空间中存储的所述通用容器启动模板,启动在该微虚机上部署的一个或多个安全容器,因此所述通用容器模板可以被不同微虚机共享。另外,由于所述通用容器启动模板是在支持大页存储的文件系统中创建的,完全采用了大页内存,因此基于所述通用容器模板启动所述目标安全容器,为所述目标安全容器分配的内存可以完全使用大页内存。
71.例如,所述支持大页存储的文件系统可以为linux hugetlbfs文件系统;所述容器引擎可以接收与所述目标微虚机对应的容器启动模板创建请求;响应于所述容器启动模板创建请求,可以在linux hugetlbfs文件系统中创建通用容器启动模板,所述通用容器启动模板可以用于启动所述目标微虚机上部署的一个或多个安全容器。
72.在示出的一种实施方式中,可以采用快照技术生成所述通用容器启动模板,并将所述通用容器启动模板存储在支持大页存储的文件系统中。在实现时,所述创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板的过程,具体可以包括:冷启动所述目标微虚机,以触发冷启动后的所述目标微虚机进一步启动其操作系统中用于启动安全容器的代理程序;响应于检测到所述代理程序启动,对所述目标微虚机的运行时状态进行快照保存,以生成所述通用容器启动模板。
73.例如,响应于与目标微虚机对应的容器启动模板创建请求,可以根据当前的容器配置信息,确定待启动的目标微虚机的微虚机配置信息,所述当前的容器配置信息可以包括在当前的运行环境下启动所述目标微虚机所依赖的资源,如存储资源、网络资源等;其中,所述存储资源可以包括所述目标微虚机中模拟设备的后端文件路径、存储文件的文件名称等,所述网络资源可以包括网络端口等;进一步地,根据确定出的待启动的目标微虚机的微虚机配置信息,可以冷启动所述目标微虚机,以触发冷启动后的所述目标微虚机进一步启动其操作系统中用于启动安全容器的代理程序;响应于检测到所述代理程序启动,可以对所述目标微虚机的运行时状态(runtime状态)进行快照保存,以生成所述通用容器启动模板。
74.其中,所述检测所述代理程序是否启动的过程,具体可以包括:在冷启动所述目标微虚机之后,采用轮询机制,周期性地尝试连接至所述代理程序,若连接成功则确定检测到所述代理程序启动;或者,响应于接收到由所述代理程序启动后主动向所述容器引擎发送的通知消息,确定检测到所述代理程序启动。
75.其中,所述通用容器启动模板可以包括用于启动所述目标微虚机上部署的任一安全容器的第一启动信息;所述第一启动信息,具体可以包括:用于启动所述目标微虚机的微虚机配置信息,和用于启动所述目标微虚机上部署的任一安全容器的容器配置信息;所述通用容器启动模板还可以用于保存所述代理程序启动后所述目标微虚机的运行时状态。所述容器配置信息,具体可以包括但不限于容器规格、容器中的应用所对应的用户地址信息、
容器启动的时间戳、容器id等。
76.需要说明的是,在以上示出的实施方式中,在所述目标微虚机的操作系统中的代理程序启动成功后,可以对所述目标微虚机的运行时状态进行快照保存,得到所述通用容器启动模板;由于每个安全容器实例的客户虚拟机的操作系统和代理程序的启动过程相似,因此基于所述通用容器启动模板启动安全容器时,无需重新启动客户虚拟机的操作系统和代理程序,可以将所述目标微虚机切换至所述通用容器启动模板中保存的所述代理程序运行后的运行时状态,以使所述目标微虚机在所述运行时状态下运行所述代理程序,从而加快了安全容器的启动速度,节约了安全容器启动时的cpu开销。
77.在本说明书中,在支持大页存储的文件系统中创建所述通用容器启动模板之后,可以将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间。
78.例如,在linux hugetlbfs文件系统中创建所述通用容器启动模板之后,可以将所述通用容器启动模板,以内存映射的方式存储至所述目标微虚机的内存空间。
79.需要说明的是,在相关技术中,所述支持大页存储的文件系统通常不支持读/写系统调用,也即,所述容器引擎无法直接通过读/写系统调用的方式来访问所述文件系统。基于此,在本说明书的技术方案中,通过内存映射的方式,可以先将在支持大页存储的文件系统中创建的通用容器启动模板存储至目标微虚机的内存空间,再从所述目标微虚机的内存空间中获取所述通用容器启动模板,从而所述容器引擎可以获取到在所述文件系统中创建的通用容器启动模板。
80.在示出的一种实施方式中,在将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间之前,所述方法还可以包括:在所述文件系统的入口目录的子目录下,创建用于存储所述通用容器启动模板的模板文件。
81.例如,所述容器引擎可以在linux hugetlbfs文件系统的入口目录(也即挂载点)的子目录下,创建用于存储所述通用容器启动模板的模板文件,还可以使用truncate/ftruncate等系统调用,将所述模板文件的文件长度设置为与guest内存大小一致。
82.在这种情况下,所述将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间的过程,具体可以包括:在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间;将所述通用容器启动模板写入至所述目标内存地址空间。
83.例如,在linux hugetlbfs文件系统中创建的所述通用容器启动模板,可以存储在相应的模板文件中;可以在所述目标微虚机的内存空间中申请目标内存地址空间,并建立所述模板文件与所述目标内存地址空间之间的对应关系,进行内存映射,将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间;进一步地,可以通过memcpy()函数将所述通用容器启动模板写入至所述目标内存地址空间。
84.需要说明的是,由于所述通用容器启动模板是在支持大页存储的文件系统中创建的,完全采用了大页内存,因此在所述目标微虚机的内存空间中,为用于存储所述通用容器启动模板的所述目标内存地址空间分配的也是大页内存。
85.在一个可能的实施例中,为了进一步节约所述目标微虚机中用于存储所述通用容器启动模板的内存,可以将所述通用容器启动模板以私有内存映射的方式存储至所述目标
微虚机的内存空间,进而可以基于所述目标微虚机的内存空间中存储的同一通用容器启动模板,启动所述目标微虚机上部署的多个安全容器。
86.在实现时,所述在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间的过程,具体可以包括:在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行私有内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标私有内存地址空间。
87.例如,在所述目标微虚机的内存空间中,可以使用map_private flag,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行私有内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标私有内存地址空间。需要说明的是,通过私有内存映射,每个微虚机对映射到其内存空间中的目标私有内存地址空间中的模板文件进行修改时,不会导致数据源(也即所述文件系统中存储的所述通用容器启动模板)发生变化,也不会将修改内容同步至其他安全容器示例的内存中,避免基于该通用容器启动模板启动的所有安全容器实例都出现错误。
88.在本说明书中,由于所述文件系统不支持读/写系统调用,所述容器引擎无法直接从所述文件系统中获取所述通用容器启动模板,来启动所述目标容器,因此,响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,所述容器引擎可以从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
89.例如,在支持大页存储的文件系统中创建所述通用容器启动模板,并将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间之后,响应于接收到针对所述目标微虚机上部署的目标安全容器的容器启动请求,所述容器引擎可以从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
90.在示出的一种实施方式中,在将所述文件系统中用于存储所述通用容器启动模板的模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间,并将所述通用容器启动模板写入至所述目标内存地址空间之后,所述从所述目标微虚机的内存空间中获取所述通用容器启动模板的过程,具体可以包括:在所述文件系统中确定用于存储所述通用容器启动模板的模板文件;在所述目标微虚机的内存空间中确定所述模板文件被映射到的所述目标内存地址空间;从所述目标内存地址空间中读取所述通用容器启动模板。
91.例如,在将linux hugetlbfs文件系统中用于存储所述通用容器启动模板的模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间,并将所述通用容器启动模板写入至所述目标内存地址空间之后,响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,可以在linux hugetlbfs文件系统中确定用于存储所述通用容器启动模板的模板文件;进一步地,可以在所述目标微虚机的内存空间中确定所述模板文件被映射到的所述目标内存地址空间,并可以从所述目标内存地址空间中读取所述通用容器启动模板;进一步地,可以基于获取到的所述通用容器启动模板启动所述目标安全容器。
92.在实际应用中,所述容器启动请求中携带的用于启动所述目标安全容器的启动信息,与所述容器引擎获取到的所述通用容器启动模板中包括的启动信息,不一定是完全适
配的;若二者适配,则可以直接基于所述通用容器启动模板中包括的启动信息,启动所述目标安全容器;若二者不适配,则可以对所述通用容器启动模板中包括的启动信息进行更新。
93.在示出的一种实施方式中,所述通用容器启动模板包括用于启动所述目标微虚机上部署的任一安全容器的第一启动信息;所述容器启动请求携带了用于启动所述目标安全容器的第二启动信息;所述基于获取到的所述通用容器启动模板启动所述目标安全容器的过程,具体可以包括:检测获取到的通用容器启动模板包括的第一启动信息与所述容器启动请求携带的第二启动信息是否适配;若是,则根据获取到的通用容器启动模板启动所述目标安全容器;若否,则根据所述第二启动信息对所述通用容器启动模板包括的第一启动信息进行更新,并根据更新后的通用容器启动模板启动所述目标安全容器。
94.例如,响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,所述容器引擎可以从所述目标微虚机的内存空间中获取所述通用容器启动模板;进一步地,所述容器引擎可以检测获取到的通用容器启动模板包括的第一启动信息与所述容器启动请求携带的第二启动信息是否适配;若是,则根据获取到的通用容器启动模板启动所述目标安全容器;若否,则根据所述第二启动信息对所述通用容器启动模板包括的第一启动信息进行更新,并根据更新后的通用容器启动模板启动所述目标安全容器。
95.其中,关于检测所述第一启动信息与所述第二启动信息是否适配的过程,具体可以包括:确定所述第一启动信息中包括的微虚机配置信息与所述第二启动信息中包括的微虚机配置信息是否一致;以及,确定所述第一启动信息中包括的容器配置信息与所述第二启动信息中包括的容器配置信息是否一致;若上述二者均一致,则所述第一启动信息与所述第二启动信息适配;若上述二者中的至少一者不一致,所述第一启动信息与所述第二启动信息不适配,并根据所述第二启动信息对所述第一启动信息进行更新。
96.其中,关于基于所述通用容器启动模板启动所述目标安全容器的具体实现方式,如下:
97.在一个可能的实施例中,所述根据获取到的通用容器启动模板,启动所述目标安全容器的过程,具体可以包括:根据获取到的通用容器启动模板中包括的微虚机配置信息,启动所述目标微虚机;将所述目标微虚机切换至所述通用容器启动模板中保存的所述代理程序运行后的运行时状态,以使所述目标微虚机在所述运行时状态下运行所述代理程序;根据获取到的通用容器启动模板中包括的容器配置信息,启动所述目标微虚机上部署的所述目标安全容器。
98.在另一个可能的实施例中,所述根据更新后的通用容器启动模板,启动所述目标安全容器的过程,具体可以包括:根据更新后的通用容器启动模板中包括的微虚机配置信息,启动所述目标微虚机;将所述目标微虚机切换至所述通用容器启动模板中保存的所述代理程序运行后的运行时状态,以使所述目标微虚机在所述运行时状态下运行所述代理程序;根据更新后的通用容器启动模板中包括的容器配置信息,启动所述目标微虚机上部署的所述目标安全容器。
99.在示出的一种实施方式中,可以在所述文件系统中创建多个通用容器启动模板,并将所述多个通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,所述容器引擎可以通过安全容器进程解析出安全容器实例的容器配置信息(也即,所述第二启动信息中携带的容
器配置信息),所述安全容器实例的容器配置信息可以包括安全容器实例的容器规格、网络配置信息等;进一步地,所述容器引擎可以根据所述容器启动请求指示的所述安全容器实例的容器规格,从所述目标微虚机的内存空间中的所述多个通用容器启动模板中,获取一个满足该容器规格的通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
100.需要说明的是,在以上示出的实施方式中,根据所述容器启动请求对应的容器规格来获取通用容器启动模板,可以优先基于与该容器规格一致的通用容器启动模板来启动所述目标安全容器;由于所述通用容器启动模板中包含了一个完整的且已启动成功的微虚机,且该微虚机对应的容器规格与用户请求启动的所述目标安全容器的容器规格一致,因此基于该通用容器启动模板启动所述目标安全容器之后,无需调整所述目标安全容器的容器规则,从而进一步提升了安全容器的启动效率。若当前不存在与用户请求启动的所述目标安全容器的容器规格一致的通用容器启动模板,还可以选用容器规格与请求的容器规格相差最小的通用容器启动模板,以便于基于该通用容器启动模板快速启动所述目标安全容器之后,通过微调可以快速达到用户请求的容器规格。
101.进一步地,在启动所述目标安全容器之后,所述容器引擎还可以利用所述代理程序,在所述目标安全容器中创建用户的工作负载,用于实现用户的应用程序。
102.通过以上技术方案可知,通过内存映射的方式,可以先将在支持大页存储的文件系统中创建的通用容器启动模板存储至目标微虚机的内存空间,再从所述目标微虚机的内存空间中获取所述通用容器启动模板,以启动所述目标微虚机上部署的目标安全容器;从而克服了相关技术中支持大页存储的文件系统不支持读/写系统调用的问题,实现了基于在支持大页存储的文件系统中创建的通用容器启动模板来启动目标安全容器。
103.相较于基于thp的模板启动方案,基于在支持大页存储的文件系统中创建的通用容器启动模板来启动安全容器,一方面,由于无需热插更大内存,因此可以加快安全容器的启动速度;另一方面,由于用于启动目标安全容器的通用容器启动模板是在支持大页存储的文件系统中创建的,可以保证为目标安全容器分配的内存完全使用大页内存,减少出现表项缺失(tlb miss)、缺页中断等问题,从而提升容器性能;再一方面,所述通用容器启动模板可以被所述宿主机上包括的至少一个微虚机共享,也即,可以被部署在不同微虚机中的安全容器共享,从而节约了所述文件系统中用于存储所述通用容器启动模板的内存开销。
104.与上述安全容器的启动方法的实施例对应的,本说明书还提供了一种安全容器的启动装置的实施例。
105.请参见图2,图2是本说明书一示例性的实施例示出的一种安全容器的启动装置所在电子设备的结构示意图。在硬件层面,该设备包括处理器202、内部总线204、网络接口206、内存208以及非易失性存储器210,当然还可能包括其他应用所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器202从非易失性存储器210中读取对应的计算机程序到内存208中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
106.请参见图3,图3是本说明书一示例性的实施例示出的一种安全容器的启动装置的
框图。该安全容器的启动装置可以应用于如图2所示的电子设备中,以实现本说明书的技术方案。
107.其中,所述安全容器的启动装置可以包括:
108.模板创建单元302,用于响应于与目标微虚机对应的容器启动模板创建请求,在支持大页存储的文件系统中创建用于启动所述目标微虚机上部署的安全容器的通用容器启动模板;
109.内存映射单元304,用于将所述通用容器启动模板以内存映射的方式存储至所述目标微虚机的内存空间;
110.容器启动单元306,用于响应于针对所述目标微虚机上部署的目标安全容器的容器启动请求,从所述目标微虚机的内存空间中获取所述通用容器启动模板,并基于获取到的所述通用容器启动模板启动所述目标安全容器。
111.在本实施例中,所述内存映射单元304,具体用于:
112.在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标内存地址空间;
113.将所述通用容器启动模板写入至所述目标内存地址空间。
114.在本实施例中,所述模板创建单元302,具体用于:
115.在所述文件系统的入口目录的子目录下,创建用于存储所述通用容器启动模板的模板文件。
116.在本实施例中,所述内存映射单元304,具体用于:
117.在所述目标微虚机的内存空间中,对所述文件系统中用于存储所述通用容器启动模板的模板文件进行私有内存映射,以将所述模板文件映射到所述目标微虚机的内存空间中的目标私有内存地址空间。
118.在本实施例中,所述容器启动单元306,具体用于:
119.在所述文件系统中确定用于存储所述通用容器启动模板的模板文件;
120.在所述目标微虚机的内存空间中确定所述模板文件被映射到的所述目标内存地址空间;
121.从所述目标内存地址空间中读取所述通用容器启动模板。
122.在本实施例中,所述模板创建单元302,具体用于:
123.冷启动所述目标微虚机,以触发冷启动后的所述目标微虚机进一步启动其操作系统中用于启动安全容器的代理程序;
124.响应于检测到所述代理程序启动,对所述目标微虚机的运行时状态进行快照保存,以生成所述通用容器启动模板。
125.在本实施例中,所述通用容器启动模板,包括用于启动所述目标微虚机上部署的任一安全容器的第一启动信息;所述容器启动请求携带了用于启动所述目标安全容器的第二启动信息;
126.所述容器启动单元306,具体用于:
127.检测获取到的通用容器启动模板包括的第一启动信息与所述容器启动请求携带的第二启动信息是否适配;
128.若是,则根据获取到的通用容器启动模板启动所述目标安全容器;
129.若否,则根据所述第二启动信息对所述通用容器启动模板包括的第一启动信息进行更新,并根据更新后的通用容器启动模板启动所述目标安全容器。
130.在本实施例中,所述第一启动信息,包括:用于启动所述目标微虚机的微虚机配置信息,和用于启动所述目标微虚机上部署的任一安全容器的容器配置信息;
131.所述容器启动单元306,具体用于:
132.根据获取到的通用容器启动模板或更新后的通用容器启动模板中包括的微虚机配置信息,启动所述目标微虚机;
133.将所述目标微虚机切换至所述通用容器启动模板中保存的所述代理程序运行后的运行时状态,以使所述目标微虚机在所述运行时状态下运行所述代理程序;
134.根据获取到的通用容器启动模板或更新后的通用容器启动模板中包括的容器配置信息,启动所述目标微虚机上部署的所述目标安全容器。
135.在本实施例中,所述支持大页存储的文件系统为linux hugetlbfs文件系统。
136.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
137.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
138.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
139.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
140.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
141.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书
中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
142.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
143.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1