CN114840310B - 容器创建方法、装置、电子设备和计算机可读存储介质 - Google Patents
容器创建方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN114840310B CN114840310B CN202210527189.4A CN202210527189A CN114840310B CN 114840310 B CN114840310 B CN 114840310B CN 202210527189 A CN202210527189 A CN 202210527189A CN 114840310 B CN114840310 B CN 114840310B
- Authority
- CN
- China
- Prior art keywords
- container
- daemon
- mode
- end node
- engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Abstract
本公开提供一种容器创建方法、装置、电子设备和可读存储介质,包括:通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息;确定目标容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;在无守护进程模式下,目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由主进程统一管理;在守护进程嵌入模式下,目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;在统一守护进程模式下,目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例;根据目标容器引擎的创建模式创建并拉起第一容器实例。
Description
技术领域
本公开涉及计算机与互联网技术领域,尤其涉及一种容器创建方法及装置、电子设备和计算机可读存储介质。
背景技术
容器可认为是提供一个与宿主机操作系统共享内核但与操作系统中的其他进程资源相隔离的执行环境。通过容器方式,可将每个资源设备上的资源进行划分,得到相互隔离且可独立使用的资源单元,以便于不同的用户直接调用这些资源单元。其中,Docker作为一种容器技术,得到了广泛应用。
但是相关技术中,容器的部署和拉起会占用大量的内存资源和磁盘资源,无法适用在资源受限的设备中。
发明内容
本公开的目的在于提供一种容器创建方法、装置、电子设备以及计算机可读存储介质,可以降低容器占用的内存资源和磁盘资源。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
本公开实施例提供了一种容器创建方法,包括:通过目标容器引擎接收第一容器实例的创建请求,所述第一容器实例的创建请求包括第一容器实例配置信息,所述目标容器引擎包括一主进程;根据所述第一容器实例配置信息确定所述目标容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述主进程统一管理;其中在所述守护进程嵌入模式下,所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;其中在所述统一守护进程模式下,所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例;根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例。
在一些实施例中,所述目标容器引擎的创建模式是所述无守护进程模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:所述主进程调用拉起第一容器运行时,通过所述第一容器运行时创建并启动所述第一容器实例;在所述第一容器实例成功启动后,所述第一容器运行时退出,并由所述主进程接管所述第一容器实例。
在一些实施例中,所述目标容器引擎的创建模式是所述守护进程嵌入模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:所述主进程为所述第一容器实例拉起一第一守护进程,所述第一守护进程的代码已继承嵌入至所述主进程中;所述第一守护进程调用拉起第二容器运行时,通过所述第二容器运行时创建并启动所述第一容器实例;在所述第一容器实例成功启动后,所述第二容器运行时退出,并由所述第一守护进程接管所述第一容器实例。
在一些实施例中,所述方法还包括:通过所述目标容器引擎接收第二容器实例的创建请求,所述第二容器实例的创建请求包括第二容器实例配置信息;根据所述第二容器实例配置信息确定所述目标容器引擎的创建模式是所述守护进程嵌入模式;所述主进程为所述第二容器实例拉起一第二守护进程,所述第二守护进程的代码已继承嵌入至所述主进程中;所述第二守护进程调用拉起第三容器运行时,通过所述第三容器运行时创建并启动所述第二容器实例;在所述第二容器实例成功启动后,所述第三容器运行时退出,并由所述第二守护进程接管所述第二容器实例。
在一些实施例中,所述目标容器引擎的创建模式是所述统一守护进程模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:确定所述目标容器引擎中不存在守护进程;所述主进程为所述目标容器引擎拉起一第三守护进程,所述第三守护进程用于对所述目标容器引擎中所有的容器实例进行管理;通过所述第三守护进程调用第四容器运行时,通过所述第四容器运行时创建并启动所述第一容器实例;在所述第一容器实例成功启动后,所述第四容器运行时退出,并由所述第三守护进程接管所述第一容器实例。
在一些实施例中,所述方法还包括:通过所述目标容器引擎接收第三容器实例的创建请求,所述第三容器实例的创建请求包括第三容器实例配置信息;根据所述第三容器实例配置信息确定所述目标容器引擎的创建模式是所述统一守护进程模式;确定所述目标容器引擎中已存在所述第三守护进程;通过所述第三守护进程调用第五容器运行时,通过所述第五容器运行时创建并启动所述第三容器实例;在所述第三容器实例成功启动后,所述第五容器运行时退出,并由所述第三守护进程接管所述第三容器实例。
在一些实施例中,所述第三守护进程对应的代码已集成嵌入至所述主进程中。
本公开实施例提供了一种容器创建方法,包括:云边容器编排系统中的云节点从端节点接收目标容器引擎的创建请求,所述目标容器引擎的创建请求包括所述端节点的内存信息和磁盘信息;根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述容器引擎不存在守护进程,并且所述容器引擎中的容器实例均由所述容器引擎的主进程统一管理;其中在所述守护进程嵌入模式下,所述容器引擎中的一个守护进程管理一个容器实例,各个守护进程均嵌入至所述主进程中;其中在所述统一守护进程模式下,所述容器引擎通过一个守护进程管理所述容器引擎中所有的容器实例;根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息,以便所述端节点根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎。
在一些实施例中,根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,包括:若所述端节点的内存大小小于第一内存阈值且所述端节点的磁盘大小小于磁盘阈值,则确定所述端节点的容器引擎的创建模式是所述无守护进程模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述守护进程嵌入模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的内存大小小于第二内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述统一守护进程模式。
在一些实施例中,所述目标容器引擎配置信息包括无守护进程引擎配置信息、低守护进程引擎配置信息和统一守护进程引擎配置信息;其中,根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息,以便所述端节点根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎,包括:若确定所述容器引擎的创建模式是无守护进程模式,则向所述端节点下发无守护进程引擎配置信息,以便所述端节点根据所述无守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述目标容器引擎的主进程统一管理;若确定所述容器引擎的创建模式是守护进程嵌入模式,则向所述端节点下发低守护进程引擎配置信息,以便所述端节点根据所述低守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;若确定所述容器引擎的创建模式是统一守护进程模式,则向所述端节点下发统一守护进程引擎配置信息,以便所述端节点根据所述统一守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例。
本公开实施例提供了一种容器创建装置,包括:容器实例创建请求模块、创建模式确定模块和容器实例创建模块。
其中,所述容器实例创建请求模块用于通过目标容器引擎接收第一容器实例的创建请求,所述第一容器实例的创建请求包括第一容器实例配置信息,所述目标容器引擎包括一主进程;所述创建模式确定模块可以用于根据所述第一容器实例配置信息确定所述目标容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述主进程统一管理;其中在所述守护进程嵌入模式下,所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;其中在所述统一守护进程模式下,所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例;所述容器实例创建模块可以用于根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例。
本公开实施例提供了一种容器创建系统,包括:云节点和端节点;其中,所述云节点用于从所述端节点接收目标容器引擎的创建请求,所述目标容器引擎的创建请求包括所述端节点的内存信息和磁盘信息;所述云节点用于根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述容器引擎不存在守护进程,并且所述容器引擎中的容器实例均由所述容器引擎的主进程统一管理;其中在所述守护进程嵌入模式下,所述容器引擎中的一个守护进程管理一个容器实例,各个守护进程均嵌入至所述主进程中;其中在所述统一守护进程模式下,所述容器引擎通过一个守护进程管理所述容器引擎中所有的容器实例;所述云节点用于根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息;所述端节点用于根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎。
本公开实施例提出一种电子设备,该电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项所述的容器创建方法。
本公开实施例提出一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述任一项所述的容器创建方法。
本公开实施例提出一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述容器创建方法。
本公开实施例提供的无守护进程模式下的容器创建方法,可以通过完全不设置守护进程来同时降低容器创建时磁盘资源和内存资源的占用,以便将通过该无守护进程模式部署的容器部署在磁盘资源和内存资源同时受限的硬件设备上;本公开实施例提供的守护进程嵌入模式下的容器创建方法,可以通过将守护进程的代码集成嵌入至主进程中,以减少容器拉起时占用的磁盘资源,同时通过一个容器实例由一个守护进程管理的方式来减少容器实例与主进程的依赖,以便在主进程更新或者挂掉的情况下,不对容器实例造成影响;统一守护进程模式下创建的容器,可以通过一个一个守护进行对所有的容器实例进行管理,既能减少容器占用的内存资源和磁盘资源,又能降低容器实例对主进程的依赖,以便在主进程更新或者挂掉的情况下,不对容器实例造成影响。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据相关技术示出的一种容器创建的结构示意图。
图2示出了可以应用于本公开实施例的容器创建方法或容器创建装置的示例性系统架构的示意图。
图3是根据一示例性实施例示出的一种容器创建方法的流程图。
图4是根据一示例性实施例示出的一种容器创建方法的流程图。
图5是根据相关技术示出的一种容器创建的结构示意图。
图6是根据一示例性实施例示出的一种容器创建方法的流程图。
图7是根据相关技术示出的一种容器创建的结构示意图。
图8是根据一示例性实施例示出的一种容器创建方法的流程图。
图9是根据一示例性实施例示出的一种容器创建方法的流程图。
图10是根据相关技术示出的一种容器创建的结构示意图。
图11是根据一示例性实施例示出的一种容器创建方法的流程图。
图12是根据一示例性实施例示出的一种容器创建方法的结构图。
图13是根据一示例性实施例示出的一种容器创建方法的场景示意图。
图14是根据一示例性实施例示出的一种容器创建方法的示意图。
图15是根据一示例性实施例示出的一种容器创建装置的框图。
图16示出了适于用来实现本公开实施例的的电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
本公开所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和步骤,也不是必须按所描述的顺序执行。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
在本申请的描述中,除非另有说明,“/”表示“或”的意思,例如,A/B可以表示A或B。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。此外,“至少一个”是指一个或多个,“多个”是指两个或两个以上。“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同;用语“包含”、“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等。
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述,需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
下面首先对本申请实施例涉及的部分用语进行解释说明,以便于本领域技术人员理解。
容器引擎:容器引擎的核心是准备运行容器所需要的资源以及管理容器生命周期。容器引擎能够创建和运行容器,常见的容器引擎包括docker、containerd等。
容器实例:容器实例是镜像的一个运行实例。
主进程:用于主管容器的进程,主管容器中的核心功能,例如是容器中的daemon端的containerd。
守护进程:用于维护管理容器实例的进程,例如docker-containerd-shim进程。
为什么在容器的启动或运行过程中需要一个守护进行docker-containerd-shim呢?其目的有如下几点:1、它允许容器运行时(即runC)在启动容器之后退出,简单说就是不必为每个容器一直运行一个容器运行时(runC);2、即使在containerd和dockerd都挂掉的情况下,容器的标准IO和其它的文件描述符也都是可用的;3、向containerd报告容器的退出状态
容器运行时:是容器运行时的载体,runC是目前使用最广泛的容器运行时。
前文介绍了本申请实施例所涉及到的一些名词概念,下面介绍本申请实施例涉及的技术特征。
如图1所示,相关技术中的容器引擎(以docker与containerd为例),主进程(如daemon端containerd)需要通过守护进程containerd-shim调用底层runtime(runc)来启动容器。守护进程containerd-shim由主进程containerd拉起,即主进程containerd是containerd-shim的父进程,而容器进程由containerd-shim进程调用runc拉起,容器成功启动后runc退出,由containerd-shim进程接管容器,每一个容器都会对应一个containerd-shim的进程,containerd主进程通过与每个containerd-shim进程通信来管理每个容器的生命周期。
这种方式在大规模容器部署的场景中会占用非常多的内存资源,并且在硬件资源受限的智能终端(如智能摄像头、路由器等)上运行容器的场景中也会由于shim二进制文件的尺寸造成磁盘空间的浪费。
以ARM-v7架构的智能摄像头为例,运行在其上的containerd-shim二进制文件大小为8.3MB,而每启动运行一个容器所起的containerd-shim进程占用内存9MB左右,这对于目前智能摄像头的一般配置(flash:64MB,DDR:128MB)来说,是很沉重的负担,也压榨了真正容器内所运行的业务应用的资源空间。
随着5G网络的发展,5G网络支持连接更多除了手机之外的物联网(Internet ofThings,IoT)设备,比如摄像头、家庭路由器等,这些终端设备硬件资源相对受限,无法满足通用容器方案的运行条件。在云网融合的端边云协同一体化发展要求下,完成终端容器虚拟化改造,将海量泛智能终端纳入云边容器编排系统,首先就需要实现在资源受限的终端条件下运行容器这一基本前提。
本发明提出一种资源受限条件下运行容器的方法,来解决上述问题。
下面结合附图对本公开示例实施方式进行详细说明。
图2示出了可以应用于本公开实施例的容器创建方法或容器创建装置的示例性系统架构的示意图。
如图2所示,系统架构200可以包括终端设备201、202、203,网络204和服务器205。网络204用以在终端设备201、202、203和服务器205之间提供通信链路的介质。网络204可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备201、202、203通过网络204与服务器205交互,以接收或发送消息等。其中,终端设备202、202、203可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机、台式计算机、可穿戴设备、虚拟现实设备、智能家居等等。
服务器205可以是提供各种服务的服务器,例如对用户利用终端设备202、202、203所进行操作的装置提供支持的后台管理服务器。后台管理服务器可以对接收到的请求等数据进行分析等处理,并将处理结果反馈给终端设备。
服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器等,本公开对此不做限制。
服务器205可例如通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程;服务器205可例如根据第一容器实例配置信息确定目标容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在无守护进程模式下,目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由主进程统一管理;其中在守护进程嵌入模式下,目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;其中在统一守护进程模式下,目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例;服务器205可例如根据目标容器引擎的创建模式创建并拉起第一容器实例。
应该理解,图2中的终端设备、网络和服务器的数目仅仅是示意性的,服务器205可以是一个实体的服务器,还可以为多个服务器组成,根据实际需要,可以具有任意数目的终端设备、网络和服务器。
在上述系统架构下,本公开实施例中提供了一种容器创建方法,该方法可以由任意具备计算处理能力的电子设备执行。
图3是根据一示例性实施例示出的一种容器创建方法的流程图。本公开实施例所提供的方法可以由任意具备计算处理能力的电子设备来执行,例如该方法可以由上述图1实施例中的服务器或终端设备来执行,也可以由服务器和终端设备共同执行,在下面的实施例中,以服务器为执行主体为例进行举例说明,但本公开并不限定于此。
参照图3,本公开实施例提供的容器创建方法可以包括以下步骤。
步骤S302,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
其中,第一容器实例的创建请求可以来自于本公开的执行设备本身,也可以来自于外部,本公开对此不做限制,本领域技术人员可以根据实际需求进行设置。
在一些实施例中,一个容器引擎可以包括一个主进程(例如daemon或者daemon端的containerd)。
步骤S304,根据第一容器实例配置信息确定目标容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在无守护进程模式下,目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由主进程统一管理;其中在守护进程嵌入模式下,目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;其中在统一守护进程模式下,目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例。
步骤S306,根据目标容器引擎的创建模式创建并拉起第一容器实例。
本实施例提供的无守护进程模式下的容器创建方法,可以通过完全不设置守护进程来同时降低容器创建时磁盘资源和内存资源的占用,以便将通过该无守护进程模式部署的容器部署在磁盘资源和内存资源同时受限的硬件设备上;本实施例提供的守护进程嵌入模式下的容器创建方法,可以通过将守护进程的代码集成嵌入至主进程中,以减少容器拉起时占用的磁盘资源,同时通过一个容器实例由一个守护进程管理的方式来减少容器实例与主进程的依赖,以便在主进程更新或者挂掉的情况下,不对容器实例造成影响;实施例提供的统一守护进程模式下的容器创建方法,可以通过一个守护进行对所有的容器实例进行管理,既能减少容器占用的内存资源和磁盘资源,又能降低容器实例对主进程的依赖,以便在主进程更新或者挂掉的情况下,不对容器实例造成影响。
图4是根据一示例性实施例示出的一种容器创建方法的流程图。
参考图4,上述容器创建方法可以包括以下步骤。
步骤S402,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
步骤S404,根据第一容器实例配置信息确定目标容器引擎的创建模式是无守护进程模式。
步骤S406,主进程调用拉起第一容器运行时,通过第一容器运行时创建并启动第一容器实例。
步骤S408,在第一容器实例成功启动后,第一容器运行时退出,并由主进程接管第一容器实例。
在一些实施例中,可以将上述无守护进程模式称之为no-shim模式:如图5所示,在这种模式下,daemon主进程直接通过runC命令启动、执行容器进程,启动容器后,daemon主进程接管容器并监控容器状态,当容器进程执行完成后,返回容器进程结束状态。当同时运行多个容器时,容器进程均由daemon主进程管理。
该模式具有以下有益效果:不需编译生成shim二进制文件,节省了磁盘空间;也不需另外启动shim进程,节省内存占用。
该模式可以应用到那些硬件非常受限(内存空间和磁盘空间严重不足)的容器载体,例如家庭摄像头、路由器等。
图6是根据一示例性实施例示出的一种容器创建方法的流程图。
参考图6,上述容器创建方法可以包括以下步骤。
步骤S602,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
步骤S604,根据第一容器实例配置信息确定目标容器引擎的创建模式是守护进程嵌入模式。
步骤S606,主进程为第一容器实例拉起一第一守护进程,第一守护进程的代码已继承嵌入至主进程中。
在一些实施例中,在守护进程嵌入模式,守护进程shim的实现逻辑代码以依赖库的形式import进daemon的项目代码,实现shim的功能整合。由于开源方案中daemon和shim二进制文件依赖了大量相同的库,所以整合后可以大大减少整体(daemon+shim)所占的磁盘空间。整合后的容器daemon启动方式是通过配置参数执行不同的业务代码实现主程序以及不同模式的启动。
步骤S608,第一守护进程调用拉起第二容器运行时,通过第二容器运行时创建并启动第一容器实例。
步骤S610,在第一容器实例成功启动后,第二容器运行时退出,并由第一守护进程接管第一容器实例。
如图7所示,在守护进程嵌入模式下,一个守护进程可以管理一个容器实例,所有守护进程的代码均集成至主进程对应的代码中。
为了更好的说明守护进程嵌入模式下,容器的创建过程,本公开还提供了图8所示的实施例。
图8是根据一示例性实施例示出的一种容器创建方法的流程图。
参考图8,上述容器创建方法可以包括以下步骤。
步骤S802,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
步骤S804,根据第一容器实例配置信息确定目标容器引擎的创建模式是守护进程嵌入模式。
步骤S806,主进程为第一容器实例拉起一第一守护进程,第一守护进程的代码已继承嵌入至主进程中。
步骤S808,第一守护进程调用拉起第二容器运行时,通过第二容器运行时创建并启动第一容器实例。
步骤S810,在第一容器实例成功启动后,第二容器运行时退出,并由第一守护进程接管第一容器实例。
步骤S812,通过目标容器引擎接收第二容器实例的创建请求,第二容器实例的创建请求包括第二容器实例配置信息。
步骤S814,根据第二容器实例配置信息确定目标容器引擎的创建模式是守护进程嵌入模式。
步骤S816,主进程为第二容器实例拉起一第二守护进程,第二守护进程的代码已继承嵌入至主进程中。
步骤S818,第二守护进程调用拉起第三容器运行时,通过第三容器运行时创建并启动第二容器实例。
步骤S820,在第二容器实例成功启动后,第三容器运行时退出,并由第二守护进程接管第二容器实例。
在一些实施例中,可以将上述守护进程嵌入模式称之为low-shim模式:如图7所示,在这种模式下,将守护进程shim集成进主进程daemon(或者daemon中的containerd),创建启动容器时,daemon主进程(或者daemon中的containerd)拉起shim进程,shim进程调用runC命令启动、执行容器进程,启动容器后,runC退出,shim进程接管容器并监控容器状态,当容器进程执行完成后,向daemon主进程(或者daemon中的containerd)报告容器进程结束状态。当同时运行多个容器时,每个容器均对应一个shim进程。
该守护进程嵌入模式具有以下有益效果:1、不需单独编译生成shim二进制文件,节省磁盘空间;2、daemon主进程挂掉或单个容器shim挂掉时,不影响其他容器运行。
该守护进程嵌入模式可以应用到那些内存相对来说还可以,但是磁盘空间不足的硬件设备上。
上述在守护进程嵌入模式下的容器创建方法,可以降低容器创建对内磁盘空间的占用,同时在主进程挂掉或者更新的情况下,通过守护进程依然可以管理维护容器实例,保证了容器实例的稳定性。
图9是根据一示例性实施例示出的一种容器创建方法的流程图。
参考图9,上述容器创建方法可以包括以下步骤。
步骤S902,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
步骤S904,根据第一容器实例配置信息确定目标容器引擎的创建模式是统一守护进程模式。
步骤S906,确定目标容器引擎中不存在守护进程。
步骤S908,主进程为目标容器引擎拉起一第三守护进程,第三守护进程用于对目标容器引擎中所有的容器实例进行管理。
步骤S910,通过第三守护进程调用第四容器运行时,通过第四容器运行时创建并启动第一容器实例。
步骤S912,在第一容器实例成功启动后,第四容器运行时退出,并由第三守护进程接管第一容器实例。
如图10所示,在统一守护进程模式下,一个守护进行可以管理目标容器引擎中所有的容器实例。
为了更好的说明统一守护进程模式下,容器的创建过程,本公开还提供了图11所示的实施例。
步骤S1102,通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程。
步骤S1104,根据第一容器实例配置信息确定目标容器引擎的创建模式是统一守护进程模式。
步骤S1106,确定目标容器引擎中不存在守护进程。
步骤S1108,主进程为目标容器引擎拉起一第三守护进程,第三守护进程用于对目标容器引擎中所有的容器实例进行管理。
步骤S1110,通过第三守护进程调用第四容器运行时,通过第四容器运行时创建并启动第一容器实例。
步骤S1112,在第一容器实例成功启动后,第四容器运行时退出,并由第三守护进程接管第一容器实例。
步骤S1114,通过目标容器引擎接收第三容器实例的创建请求,第三容器实例的创建请求包括第三容器实例配置信息。
步骤S1116,根据第三容器实例配置信息确定目标容器引擎的创建模式是统一守护进程模式。
步骤S1118,确定目标容器引擎中已存在第三守护进程。
步骤S1120,通过第三守护进程调用第五容器运行时,通过第五容器运行时创建并启动第三容器实例。
步骤S1122,在第三容器实例成功启动后,第五容器运行时退出,并由第三守护进程接管第三容器实例。
在一些实施例中,第三守护进程对应的代码可以独立于主进程以使得在主进程挂掉或者更新的情况下,通过第三守护进程依然可以管理维护容器实例,保证了容器实例的稳定性;在一些实施例中,第三守护进行对应的代码可以集成进主进程中以节约磁盘空间。本领域技术人员,可以根据实际需求进行设置,本公开对此不做限制。
在一些实施例中,可以将上述统一守护进程模式称之为Uni-shim模式:如图10所示,在这种模式下,创建启动容器时,daemon主进程拉起uni-shim进程,uni-shim进程调用runC命令启动、执行容器进程,启动容器后,runC退出,uni-shim进程接管容器并监控容器状态,当容器进程执行完成后,向daemon主进程报告容器进程结束状态。uni-shim进程有且只有一个,管理所有由daemon主进程发起创建运行的容器
该统一守护进程模式具有以下有益效果:1、在第三守护进程对应的代码集成嵌入至主进程的情况下,不需单独编译生成shim二进制文件,节省磁盘空间;2、多容器部署场景下只需要一个shim进程,减少内存占用;3、daemon需要升级或主进程挂掉,不影响容器运行。
上述统一守护进程模式可以应用到那些内存和磁盘相对来说还可以但是依然不太够,能够支撑一个守护进程的启动,但是不能支撑太多个守护进程的设备。
图12是根据一示例性实施例示出的一种容器创建方法的结构图。
参考图12,上述容器创建方法可以包括以下步骤。
步骤S1201,接收创建容器请求。
步骤S1202,读取配置。
在根据配置信息确定对应的容器创建模式是无守护进程模式时,执行步骤S1203。
在根据配置信息确定对应的容器创建模式是守护进程嵌入模式时,执行步骤S1204。
在根据配置信息确定对应的容器创建模式是统一守护进程模式时,执行步骤S1205。
其中,步骤S1203可以包括以下内容:接收创建容器请求->daemon进程异步exec()执行底层runtime创建容器->创建容器成功->daemon进程循环监控容器状态->容器进程实例结束。
其中,步骤S1204可以包括以下内容:接收创建容器请求->daemon进程异步fork()派生shim进程->shim进程异步exec()执行底层runtime创建容器->创建容器成功->shim进程循环监控容器状态->容器进程实例结束。
其中,步骤S1205可以包括以下内容:接收创建容器请求->判断是否已存在shim进程->如无,异步fork()派生shim进程;如有,直接下一步->shim进程异步exec()执行底层runtime创建容器->创建容器成功>shim进程循环监控容器状态->容器进程实例结束
本实施例提出的方法可以在资源受限条件下根据场景灵活的使用各种模式运行容器,有效规避一些资源受限的智能终端上无法顺利运行容器的问题,将有限的资源进行更合理的运用,也为终端容器虚拟化改造提出一个切实可行的基础。
上述实施例提供的技术方案具有以下有益效果。
1、将shim通过import依赖库的方式集成进容器daemon可执行文件。
2、通过配置参数执行不同的业务逻辑代码实现不同的工作模式。
3、三种模式是对现有容器方案的改进,相比之下可以节约大量磁盘空间以及内存空间资源。
4、提出了在资源受限的条件下运行容器的方法。
5、可以根据具体应用场景,灵活切换不同的容器运行模式以实现资源合理利用。
6、改变了目前容器解决方案单一固定的调用链方式。
7、为终端容器虚拟化改造提出一个切实可行的基础。
图13是根据一示例性实施例示出的一种容器创建方法的场景示意图。
该容器创建方法可以应用在端边云协同一体化场景下。如图13所示,在上述端云边协同一体化场景下的端云边协同系统(也可以是云边容器编排系统)可以包括一个云节点131和至少一个端节点(132、133或者134),该端节点可以就是终端设备本身,也可以是为终端设备提供服务的边节点(例如服务器),本申请对此不做限制。
参考图13,上述在端边云协同一体化场景下的容器创建方法具体可以包括以下步骤。
步骤S1402,云节点从端节点接收目标容器引擎的创建请求,目标容器引擎的创建请求包括端节点的内存信息和磁盘信息。
步骤S1404,根据端节点的内存信息和磁盘信息确定端节点的容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在无守护进程模式下,容器引擎不存在守护进程,并且容器引擎中的容器实例均由容器引擎的主进程统一管理;其中在守护进程嵌入模式下,容器引擎中的一个守护进程管理一个容器实例,各个守护进程均嵌入至主进程中;其中在统一守护进程模式下,容器引擎通过一个守护进程管理容器引擎中所有的容器实例。
在一些实施例中,若端节点的内存大小小于第一内存阈值且端节点的磁盘大小小于磁盘阈值,则确定端节点的容器引擎的创建模式是无守护进程模式;若端节点的内存大小大于或者等于第一内存阈值且端节点的磁盘大小小于磁盘阈值,则端节点的容器引擎的创建模式是守护进程嵌入模式;若端节点的内存大小大于或者等于第一内存阈值且端节点的内存大小小于第二内存阈值且端节点的磁盘大小小于磁盘阈值,则端节点的容器引擎的创建模式是统一守护进程模式。
步骤S1406,根据端节点的容器引擎的创建模式向端节点下发目标容器引擎配置信息,以便端节点根据目标容器引擎配置信息在端节点中创建目标容器引擎。
在一些实施例中,目标容器引擎配置信息包括无守护进程引擎配置信息、低守护进程引擎配置信息和统一守护进程引擎配置信息;其中,根据端节点的容器引擎的创建模式向端节点下发目标容器引擎配置信息,以便端节点根据目标容器引擎配置信息在端节点中创建目标容器引擎,包括:若确定容器引擎的创建模式是无守护进程模式,则向端节点下发无守护进程引擎配置信息,以便端节点根据无守护进程引擎配置信息在端节点中创建目标容器引擎,其中目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由目标容器引擎的主进程统一管理;若确定容器引擎的创建模式是守护进程嵌入模式,则向端节点下发低守护进程引擎配置信息,以便端节点根据低守护进程引擎配置信息在端节点中创建目标容器引擎,其中目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;若确定容器引擎的创建模式是统一守护进程模式,则向端节点下发统一守护进程引擎配置信息,以便端节点根据统一守护进程引擎配置信息在端节点中创建目标容器引擎,其中目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例。
基于同一发明构思,本公开实施例中还提供了一种容器创建装置,如下面的实施例。由于该装置实施例解决问题的原理与上述方法实施例相似,因此该装置实施例的实施可以参见上述方法实施例的实施,重复之处不再赘述。
图15是根据一示例性实施例示出的一种容器创建装置的框图。参照图15,本公开实施例提供的容器创建装置1500可以包括:容器实例创建请求模块1501、创建模式确定模块1502和容器实例创建模块1503。
其中,容器实例创建请求模块1501可以用于通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程;创建模式确定模块1502可以用于根据第一容器实例配置信息确定目标容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在无守护进程模式下,目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由主进程统一管理;其中在守护进程嵌入模式下,目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;其中在统一守护进程模式下,目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例;容器实例创建模块1503可以用于根据目标容器引擎的创建模式创建并拉起第一容器实例。
此处需要说明的是,上述容器实例创建请求模块1501、创建模式确定模块1502、和容器实例创建模块1503对应于方法实施例中的S302~S306,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
在一些实施例中,目标容器引擎的创建模式是无守护进程模式;其中,容器实例创建模块1503可以包括:第一容器运行时拉起子模块和第一容器运行时退出子模块。
其中,第一容器运行时拉起子模块可以用于主进程调用拉起第一容器运行时,通过第一容器运行时创建并启动第一容器实例;第一容器运行时退出子模块可以用于在第一容器实例成功启动后,第一容器运行时退出,并由主进程接管第一容器实例。
在一些实施例中,目标容器引擎的创建模式是守护进程嵌入模式;其中,容器实例创建模块1503可以包括:第一守护进程拉起子模块、第二容器运行时拉起子模块和第二容器运行时退出子模块。
其中,第一守护进程拉起子模块可以用于主进程为第一容器实例拉起一第一守护进程,第一守护进程的代码已继承嵌入至主进程中;第二容器运行时拉起子模块可以用于第一守护进程调用拉起第二容器运行时,通过第二容器运行时创建并启动第一容器实例;第二容器运行时退出子模块可以用于在第一容器实例成功启动后,第二容器运行时退出,并由第一守护进程接管第一容器实例。
在一些实施例中,该容器创建装置还包括:第二容器实例创建请求获取模块、模式判断子模块、第二守护进程拉起子模块、第三容器运行时拉起子模块和第三容器运行时退出子模块。
其中,第二容器实例创建请求获取模块可以用于过目标容器引擎接收第二容器实例的创建请求,第二容器实例的创建请求包括第二容器实例配置信息;模式判断子模块可以用于根据第二容器实例配置信息确定目标容器引擎的创建模式是守护进程嵌入模式;第二守护进程拉起子模块可以用于主进程为第二容器实例拉起一第二守护进程,第二守护进程的代码已继承嵌入至主进程中;第三容器运行时拉起子模块可以用于第二守护进程调用拉起第三容器运行时,通过第三容器运行时创建并启动第二容器实例;第三容器运行时退出子模块可以用于在第二容器实例成功启动后,第三容器运行时退出,并由第二守护进程接管第二容器实例。
在一些实施例中,目标容器引擎的创建模式是统一守护进程模式;其中,容器实例创建模块1503可以包括:守护进行判断子模块、第三守护进程拉起子模块、第四容器运行时拉起子模块和第四容器运行时退出子模块。
其中,守护进行判断子模块可以用于确定目标容器引擎中不存在守护进程;第三守护进程拉起子模块可以用于主进程为目标容器引擎拉起一第三守护进程,第三守护进程用于对目标容器引擎中所有的容器实例进行管理;第四容器运行时拉起子模块可以用于通过第三守护进程调用第四容器运行时,通过第四容器运行时创建并启动第一容器实例;第四容器运行时退出子模块可以用于在第一容器实例成功启动后,第四容器运行时退出,并由第三守护进程接管第一容器实例。
在一些实施例中,容器创建装置还可以包括:第三容器实例创建请求获取模块、创建模式确定模块、确定第三守护进程模块、第五容器运行时确定模块和第五容器运行时退出模块。
其中,第三容器实例创建请求获取模块可以用于通过目标容器引擎接收第三容器实例的创建请求,第三容器实例的创建请求包括第三容器实例配置信息;创建模式确定模块可以用于根据第三容器实例配置信息确定目标容器引擎的创建模式是统一守护进程模式;确定第三守护进程模块可以用于确定目标容器引擎中已存在第三守护进程;第五容器运行时确定模块可以用于通过第三守护进程调用第五容器运行时,通过第五容器运行时创建并启动第三容器实例;第五容器运行时退出模块可以用于在第三容器实例成功启动后,第五容器运行时退出,并由第三守护进程接管第三容器实例。
在一些实施例中,第三守护进程对应的代码已集成嵌入至主进程中。
由于装置1500的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
描述于本申请实施例中所涉及到的模块和/或子模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块和/或子模块也可以设置在处理器中。其中,这些模块和/或子模块的名称在某种情况下并不构成对该模块和/或子模块本身的限定。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
图16示出了适于用来实现本公开实施例的的电子设备的结构示意图。需要说明的是,图16示出的电子设备1600仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图16所示,电子设备1600包括中央处理单元(CPU)1601,其可以根据存储在只读存储器(ROM)1602中的程序或者从储存部分1608加载到随机访问存储器(RAM)1603中的程序而执行各种适当的动作和处理。在RAM 1603中,还存储有电子设备1600操作所需的各种程序和数据。CPU 1601、ROM 1602以及RAM 1603通过总线1604彼此相连。输入/输出(I/O)接口1605也连接至总线1604。
以下部件连接至I/O接口1605:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1607;包括硬盘等的储存部分1608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至I/O接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入储存部分1608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理单元(CPU)1601执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本公开所示的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备可实现功能包括:通过目标容器引擎接收第一容器实例的创建请求,第一容器实例的创建请求包括第一容器实例配置信息,目标容器引擎包括一主进程;
根据第一容器实例配置信息确定目标容器引擎的创建模式,创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在无守护进程模式下,目标容器引擎不存在守护进程,并且目标容器引擎中的容器实例均由主进程统一管理;其中在守护进程嵌入模式下,目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至主进程中;其中在统一守护进程模式下,目标容器引擎通过一个守护进程管理目标容器引擎中所有的容器实例;根据目标容器引擎的创建模式创建并拉起第一容器实例。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例的各种可选实现方式中提供的方法。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者智能设备等)执行根据本公开实施例的方法,例如图3、图4、图6、图8、图9、图11、图12或图14的一个或多个所示的步骤。
本领域技术人员在考虑说明书及实践在这里公开的公开后,将容易想到本公开的其他实施例。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不限于这里已经示出的详细结构、附图方式或实现方法,相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (13)
1.一种容器创建方法,其特征在于,包括:
端节点通过目标容器引擎接收第一容器实例的创建请求,所述第一容器实例的创建请求包括第一容器实例配置信息,所述目标容器引擎包括主进程;
所述端节点根据所述第一容器实例配置信息确定所述目标容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述主进程进行统一管理;其中在所述守护进程嵌入模式下,所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;其中在所述统一守护进程模式下,所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例,其中所述的容器引擎的创建模式是根据所述端节点的内存信息和磁盘信息确定的;其中根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,包括:若所述端节点的内存大小小于第一内存阈值且所述端节点的磁盘大小小于磁盘阈值,则确定所述端节点的容器引擎的创建模式是所述无守护进程模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述守护进程嵌入模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的内存大小小于第二内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述统一守护进程模式;
所述端节点根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例。
2.根据权利要求1所述方法,其特征在于,所述目标容器引擎的创建模式是所述无守护进程模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:
所述主进程调用拉起第一容器运行时,通过所述第一容器运行时创建并启动所述第一容器实例;
在所述第一容器实例成功启动后,所述第一容器运行时退出,并由所述主进程接管所述第一容器实例。
3.根据权利要求1所述方法,其特征在于,所述目标容器引擎的创建模式是所述守护进程嵌入模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:
所述主进程为所述第一容器实例拉起一第一守护进程,所述第一守护进程的代码已继承嵌入至所述主进程中;
所述第一守护进程调用拉起第二容器运行时,通过所述第二容器运行时创建并启动所述第一容器实例;
在所述第一容器实例成功启动后,所述第二容器运行时退出,并由所述第一守护进程接管所述第一容器实例。
4.根据权利要求3所述方法,其特征在于,所述方法还包括:
通过所述目标容器引擎接收第二容器实例的创建请求,所述第二容器实例的创建请求包括第二容器实例配置信息;
根据所述第二容器实例配置信息确定所述目标容器引擎的创建模式是所述守护进程嵌入模式;
所述主进程为所述第二容器实例拉起一第二守护进程,所述第二守护进程的代码已继承嵌入至所述主进程中;
所述第二守护进程调用拉起第三容器运行时,通过所述第三容器运行时创建并启动所述第二容器实例;
在所述第二容器实例成功启动后,所述第三容器运行时退出,并由所述第二守护进程接管所述第二容器实例。
5.根据权利要求1所述方法,其特征在于,所述目标容器引擎的创建模式是所述统一守护进程模式;其中,根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例,包括:
确定所述目标容器引擎中不存在守护进程;
所述主进程为所述目标容器引擎拉起一第三守护进程,所述第三守护进程用于对所述目标容器引擎中所有的容器实例进行管理;
通过所述第三守护进程调用第四容器运行时,通过所述第四容器运行时创建并启动所述第一容器实例;
在所述第一容器实例成功启动后,所述第四容器运行时退出,并由所述第三守护进程接管所述第一容器实例。
6.根据权利要求5所述方法,其特征在于,所述方法还包括:
通过所述目标容器引擎接收第三容器实例的创建请求,所述第三容器实例的创建请求包括第三容器实例配置信息;
根据所述第三容器实例配置信息确定所述目标容器引擎的创建模式是所述统一守护进程模式;
确定所述目标容器引擎中已存在所述第三守护进程;
通过所述第三守护进程调用第五容器运行时,通过所述第五容器运行时创建并启动所述第三容器实例;
在所述第三容器实例成功启动后,所述第五容器运行时退出,并由所述第三守护进程接管所述第三容器实例。
7.根据权利要求5所述方法,其特征在于,所述第三守护进程对应的代码已集成嵌入至所述主进程中。
8.一种容器创建方法,其特征在于,包括:
云边容器编排系统中的云节点从端节点接收目标容器引擎的创建请求,所述目标容器引擎的创建请求包括所述端节点的内存信息和磁盘信息;
根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述容器引擎不存在守护进程,并且所述容器引擎中的容器实例均由所述容器引擎的主进程统一管理;其中在所述守护进程嵌入模式下,所述容器引擎中的一个守护进程管理一个容器实例,各个守护进程均嵌入至所述主进程中;其中在所述统一守护进程模式下,所述容器引擎通过一个守护进程管理所述容器引擎中所有的容器实例;
根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息,以便所述端节点根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎;
其中,根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,包括:
若所述端节点的内存大小小于第一内存阈值且所述端节点的磁盘大小小于磁盘阈值,则确定所述端节点的容器引擎的创建模式是所述无守护进程模式;
若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述守护进程嵌入模式;
若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的内存大小小于第二内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述统一守护进程模式。
9.根据权利要求8所述方法,其特征在于,所述目标容器引擎配置信息包括无守护进程引擎配置信息、低守护进程引擎配置信息和统一守护进程引擎配置信息;其中,根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息,以便所述端节点根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎,包括:
若确定所述容器引擎的创建模式是无守护进程模式,则向所述端节点下发无守护进程引擎配置信息,以便所述端节点根据所述无守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述目标容器引擎的主进程统一管理;
若确定所述容器引擎的创建模式是守护进程嵌入模式,则向所述端节点下发低守护进程引擎配置信息,以便所述端节点根据所述低守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;
若确定所述容器引擎的创建模式是统一守护进程模式,则向所述端节点下发统一守护进程引擎配置信息,以便所述端节点根据所述统一守护进程引擎配置信息在所述端节点中创建所述目标容器引擎,其中所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例。
10.一种容器创建装置,其特征在于,部属于端节点中,包括:
容器实例创建请求模块,用于通过目标容器引擎接收第一容器实例的创建请求,所述第一容器实例的创建请求包括第一容器实例配置信息,所述目标容器引擎包括一主进程;
创建模式确定模块,用于根据所述第一容器实例配置信息确定所述目标容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述目标容器引擎不存在守护进程,并且所述目标容器引擎中的容器实例均由所述主进程进行统一管理;其中在所述守护进程嵌入模式下,所述目标容器引擎中的一个守护进程管理一个容器实例,各个守护进程对应的代码均集成嵌入至所述主进程中;其中在所述统一守护进程模式下,所述目标容器引擎通过一个守护进程管理所述目标容器引擎中所有的容器实例,其中所述的容器引擎的创建模式是根据所述端节点的内存信息和磁盘信息确定的;其中根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,包括:若所述端节点的内存大小小于第一内存阈值且所述端节点的磁盘大小小于磁盘阈值,则确定所述端节点的容器引擎的创建模式是所述无守护进程模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述守护进程嵌入模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的内存大小小于第二内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述统一守护进程模式;
容器实例创建模块,用于根据所述目标容器引擎的创建模式创建并拉起所述第一容器实例。
11.一种容器创建系统,其特征在于,包括:云节点和端节点;
其中,所述云节点用于从所述端节点接收目标容器引擎的创建请求,所述目标容器引擎的创建请求包括所述端节点的内存信息和磁盘信息;
所述云节点用于根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,所述创建模式包括无守护进程模式、守护进程嵌入模式和统一守护进程模式;其中在所述无守护进程模式下,所述容器引擎不存在守护进程,并且所述容器引擎中的容器实例均由所述容器引擎的主进程统一管理;其中在所述守护进程嵌入模式下,所述容器引擎中的一个守护进程管理一个容器实例,各个守护进程均嵌入至所述主进程中;其中在所述统一守护进程模式下,所述容器引擎通过一个守护进程管理所述容器引擎中所有的容器实例;其中,根据所述端节点的内存信息和磁盘信息确定所述端节点的容器引擎的创建模式,包括:若所述端节点的内存大小小于第一内存阈值且所述端节点的磁盘大小小于磁盘阈值,则确定所述端节点的容器引擎的创建模式是所述无守护进程模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述守护进程嵌入模式;若所述端节点的内存大小大于或者等于所述第一内存阈值且所述端节点的内存大小小于第二内存阈值且所述端节点的磁盘大小小于所述磁盘阈值,则所述端节点的容器引擎的创建模式是所述统一守护进程模式;
所述云节点用于根据所述端节点的容器引擎的创建模式向所述端节点下发目标容器引擎配置信息;
所述端节点用于根据所述目标容器引擎配置信息在所述端节点中创建所述目标容器引擎。
12.一种电子设备,其特征在于,包括:
存储器;以及
耦合到所述存储器的处理器,所述处理器被用于基于存储在所述存储器中的指令,执行如权利要求1-7任一项所述的容器创建方法或者如权利要求8-9任一项所述的容器创建方法。
13.一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如权利要求1-7任一项所述的容器创建方法或者如权利要求8-9任一项所述的容器创建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210527189.4A CN114840310B (zh) | 2022-05-16 | 2022-05-16 | 容器创建方法、装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210527189.4A CN114840310B (zh) | 2022-05-16 | 2022-05-16 | 容器创建方法、装置、电子设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114840310A CN114840310A (zh) | 2022-08-02 |
CN114840310B true CN114840310B (zh) | 2023-09-26 |
Family
ID=82569383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210527189.4A Active CN114840310B (zh) | 2022-05-16 | 2022-05-16 | 容器创建方法、装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114840310B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116088968A (zh) * | 2023-04-10 | 2023-05-09 | 北京渲光科技有限公司 | 图形引擎管理方法、装置、终端和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105787359A (zh) * | 2016-02-19 | 2016-07-20 | 百度在线网络技术(北京)有限公司 | 进程守护方法和装置 |
CN107220101A (zh) * | 2017-04-19 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 一种容器创建方法和装置 |
CN110275761A (zh) * | 2018-03-16 | 2019-09-24 | 华为技术有限公司 | 调度方法、装置和主节点 |
CN112231061A (zh) * | 2020-10-22 | 2021-01-15 | 浪潮云信息技术股份公司 | 一种云原生容器运行时的方法 |
CN113641457A (zh) * | 2021-08-20 | 2021-11-12 | 北京百度网讯科技有限公司 | 容器创建方法、装置、设备、介质及程序产品 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10884816B2 (en) * | 2017-03-28 | 2021-01-05 | International Business Machines Corporation | Managing system resources in containers and virtual machines in a coexisting environment |
-
2022
- 2022-05-16 CN CN202210527189.4A patent/CN114840310B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105787359A (zh) * | 2016-02-19 | 2016-07-20 | 百度在线网络技术(北京)有限公司 | 进程守护方法和装置 |
CN107220101A (zh) * | 2017-04-19 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 一种容器创建方法和装置 |
CN110275761A (zh) * | 2018-03-16 | 2019-09-24 | 华为技术有限公司 | 调度方法、装置和主节点 |
CN112231061A (zh) * | 2020-10-22 | 2021-01-15 | 浪潮云信息技术股份公司 | 一种云原生容器运行时的方法 |
CN113641457A (zh) * | 2021-08-20 | 2021-11-12 | 北京百度网讯科技有限公司 | 容器创建方法、装置、设备、介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN114840310A (zh) | 2022-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111158818B (zh) | 一种页面渲染方法和装置 | |
US11909812B2 (en) | Application control method and apparatus, electronic device, and storage medium | |
CN113765965A (zh) | 服务网格系统的生成方法、装置、服务网格系统 | |
CN114840310B (zh) | 容器创建方法、装置、电子设备和计算机可读存储介质 | |
CN109683992B (zh) | 用于管理对象的方法和装置 | |
CN112214250A (zh) | 一种应用程序组件的加载方法和装置 | |
CN109660379B (zh) | 一种网络方法和系统、及终端 | |
CN115658165A (zh) | 用于启动租户插件以及实现进程内通信的方法和装置 | |
CN113760487B (zh) | 一种业务处理方法和装置 | |
CN114356520A (zh) | 微应用的运行方法、装置、设备、存储介质及程序产品 | |
CN113098960A (zh) | 服务运行方法、装置、服务器及存储介质 | |
CN112905273A (zh) | 一种服务调用方法和装置 | |
CN115238902A (zh) | 用于管理机器学习模型的方法、设备和计算机程序产品 | |
CN113448679A (zh) | 一种处理调用请求的方法和装置 | |
CN113010428B (zh) | 服务器集群的测试方法、装置、介质以及电子设备 | |
US11811878B1 (en) | Session manager providing bidirectional data transport | |
US20230161603A1 (en) | Handling the running of software | |
CN117076160B (zh) | 组件调用方法、装置、设备和存储介质 | |
CN116991562B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN116541035A (zh) | 容器编排引擎的升级方法、系统、设备及介质 | |
CN113709199A (zh) | 推广信息的展示方法和装置 | |
CN117370043A (zh) | 一种进程间通信方法、装置、电子设备及存储介质 | |
CN114706656A (zh) | 创建容器镜像的方法、装置、电子设备和计算机可读介质 | |
CN115562816A (zh) | 一种容器编码调度引擎上Flink的健康监测方法和装置 | |
CN113946458A (zh) | 一种客户端代理的实现方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |