CN117215712A - 一种容器的创建方法、装置及存储介质 - Google Patents

一种容器的创建方法、装置及存储介质 Download PDF

Info

Publication number
CN117215712A
CN117215712A CN202210622548.4A CN202210622548A CN117215712A CN 117215712 A CN117215712 A CN 117215712A CN 202210622548 A CN202210622548 A CN 202210622548A CN 117215712 A CN117215712 A CN 117215712A
Authority
CN
China
Prior art keywords
node
virtual machine
memory
container
physical
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.)
Pending
Application number
CN202210622548.4A
Other languages
English (en)
Inventor
冯杰亨
陈春明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202210622548.4A priority Critical patent/CN117215712A/zh
Priority to PCT/CN2023/087179 priority patent/WO2023231572A1/zh
Publication of CN117215712A publication Critical patent/CN117215712A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines

Abstract

本申请公开了一种容器的创建方法、装置及存储介质,涉及计算机通信技术领域。该方法由容器集群中的第一节点执行,该方法包括:获取用于指示创建安全容器的第一创建请求,基于第一创建请求创建第一虚拟机,并在第一虚拟机中运行该安全容器。其中,第一虚拟机的内存的物理资源为第一存储节点中的第一物理存储空间。这样,当需要将该安全容器从第一节点迁移至容器集群中的另一节点时,只需将第一物理存储空间作为用于运行迁移后的安全容器的虚拟机的内存物理资源,就能实现在不影响容器业务连续性、不丢失容器业务数据情况下对该安全容器的迁移。

Description

一种容器的创建方法、装置及存储介质
技术领域
本申请涉及计算机通信技术领域,尤其涉及一种容器的创建方法、装置及存储介质。
背景技术
Kubernetes(简称为K8S)是一个开源容器编排、调度和管理系统,被视为云原生时代的操作系统。采用K8S实现的集群又可以称为K8S集群。一个K8S集群包括若干个物理机或虚拟机(virtual machine,VM),一个物理机或者一个虚拟机可以视为一个节点(node)。K8S以pod为最小单元在集群内的节点上创建容器。一个pod可以包括一个或多个容器。其中,容器一般用于为应用进程提供运行环境,或者可以理解为用于运行应用实例。
通常,pod的生命周期短暂。因此,pod会被频繁的创建、调度以及销毁。当pod被调度到某个节点后,一般会一直在这个节点中运行。由于pod不具备自愈能力,因此当节点不满足pod的存活要求时(例如节点的资源耗尽),这种情况下,该节点会删除该pod。并且,K8S会在另一个节点上新建一个pod来代替被删除的pod。
然而,K8S删除pod、以及在另一个节点新建pod的过程会导致pod中的容器所运行的应用实例被中断,从而破坏了业务的连续性并导致业务数据丢失。因此,如何创建在迁移时不会影响业务连续性、不丢失业务数据的容器,是当前亟待解决的技术问题。
发明内容
本申请提供了一种容器的创建方法、装置及存储介质,该方法能够在不影响容器业务连续性、不丢失容器业务数据情况下实现对容器的迁移。
为达上述目的,本申请提供如下技术方案:
第一方面,本申请提供了一种容器的创建方法,该方法应用于第一节点。该方法包括:获取用于指示创建目标容器的第一创建请求;基于第一创建请求创建第一虚拟机;在第一虚拟机中运行目标容器。其中,目标容器为安全容器,第一创建请求包括运行目标容器的第一虚拟机的资源参数,第一虚拟机的内存的物理资源为第一存储节点中的第一物理存储空间。
这样,当需要将基于本申请所提供方法创建的安全容器从第一节点迁移至另一节点时,只需将第一物理存储空间作为用于运行迁移后的安全容器的虚拟机的内存物理资源,就能实现在不影响容器业务连续性、不丢失容器业务数据情况下对该安全容器的迁移。
在一种可能的设计方式中,上述的第一节点通过远程直接内存访问RDMA访问第一物理存储空间。
通过该可能的设计,第一节点中创建的第一虚拟机可以将第一存储节点的第一物理存储空间当做内存来访问,即实现了将第一物理存储空间作为第一虚拟机的内存的目的。
在另一种可能的设计方式中,上述的第一物理存储空间为持久化内存介质。
通过该可能的设计,由于持久化内存介质的存储性能介于传统DRAM与闪存存储器(例如NAND闪存)之间。因此作为第一虚拟机内存的第一物理存储空间相比闪存存储器拥有更高的访问速度、更低的访问延迟,而相比传统DRAM拥有更大的存储容量,且数据断电不丢失,可以持久化存储,成本也相对较低。
在另一种可能的设计方式中,在上述的基于第一创建请求创建第一虚拟机之前,上述方法还包括:根据第一创建请求,确定第一虚拟机的内存大小;根据第一虚拟机的内存大小,向第一存储节点申请第一物理存储空间,并将第一物理存储空间确定为第一虚拟机的内存的物理资源。其中,第一物理存储空间大于或等于第一虚拟机的内存大小。
在另一种可能的设计方式中,上述方法还包括:将第一节点中的数据处理单元DPU的第二物理存储空间确定为第一虚拟机的缓存的物理资源;指示DPU建立第二物理存储空间和第一物理存储空间之间的映射关系。其中,DPU用于通过RDMA访问第一物理存储空间,并用于将第二物理存储空间的数据写入第一物理存储空间。
通过该可能的设计,当第一节点创建第一虚拟机后,在第一虚拟机将数据写入第一物理存储空间的过程中,对于第一节点中的第一虚拟机为将数据写入第一物理存储空间而发起的进程而言,当数据被写入DPU的第二物理存储空间后,第一节点中的第一虚拟机即可确定该进程的数据写入任务已完成。后续,DPU作为第一节点中的独立单元,会通过RDMA操作将写入第二物理存储空间的数据写入第一物理存储空间。
也就是说,第一节点中的第一虚拟机无需在接收到第一存储节点返回的RDMA操作的响应报文后,才确定进程的数据写入任务已完成。换言之,DPU的第二物理存储空间是作为第一节点将数据写入第一物理存储空间的缓存来用的。对于第一节点而言,当确定数据已写入第二物理存储空间,即确定数据已写入第一物理存储空间。这样的话,第一节点中的写入数据的相关进程资源即可被快速释放,从而节省了第一节点的运行用于写数据的进程所需的资源。
在另一种可能的设计方式中,上述DPU还用于从第一物理存储空间读取目标容器的热数据。
这样,通过该可能的设计,当DPU预先将目标容器中的应用进程在近一段时间内访问次数较多的数据(即热数据)从第一物理存储空间读取到第二物理存储空间,从而,当目标容器中的应用进程再次访问这些热数据时,DPU可以直接向应用进程返回这些数据,从而提高了应用进程访问数据的效率。
在另一种可能的设计方式中,上述第一节点是容器集群中的任一个节点,该容器集群中还包括第二节点,当目标容器被迁移至第二节点,第二节点中运行目标容器的第二虚拟机的内存的物理资源为第一物理存储空间。
通过该可能的设计,在目标容器被迁移至第二节点,且将第一物理存储空间作为第二节点中第二虚拟机的内存物理资源,就能实现在不影响容器业务连续性、不丢失容器业务数据情况下对该安全容器的迁移。
在另一种可能的设计方式中,上述第一节点是容器集群中的任一个节点,该容器集群中还包括第三节点,第三节点用于创建目标容器的备份容器,第三节点上运行备份容器的第三虚拟机为暂停状态,第三虚拟机的内存的物理资源为第一物理存储空间。
在另一种可能的设计方式中,当上述第一虚拟机为故障或暂停状态,则上述第三虚拟机为运行状态。
通过该可能的设计实现了将目标容器从第一节点迁移至第三节点的目的,且由于第一物理存储空间作为用于运行迁移后的安全容器的第三虚拟机的内存物理资源,从而实现了在不影响容器业务连续性、不丢失容器业务数据情况下对该安全容器的迁移。
在另一种可能的设计方式中,上述方法还包括:当目标容器被迁移至容器集群中的另一节点后,更新访问目标容器的网络路由信息。
在另一种可能的设计方式中,上述方法还包括:当目标容器被迁移至容器集群中的另一节点后,向容器集群中除第一节点外的其他节点发送路由更新消息,以使其他节点更新访问目标容器的网络路由信息。
通过上述两种可能的设计方式,能够实现用户设备后续正常访问目标容器的目的,且用户对目标容器迁移的过程是无感知的。
第二方面,本申请提供了一种容器的创建装置。
在一种可能的设计方式中,该创建装置用于执行上述第一方面提供的任一种方法。本申请可以根据上述第一方面提供的任一种方法,对该创建装置进行功能模块的划分。例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。示例性的,本申请可以按照功能将该创建装置划分为获取单元和处理单元等。上述划分的各个功能模块执行的可能的技术方案和有益效果的描述均可以参考上述第一方面或其相应的可能的设计提供的技术方案,此处不再赘述。
在另一种可能的设计中,该创建装置包括:存储器、网络接口、以及一个或多个处理器,该一个或多个处理器通过网络接口接收或发送数据,该一个或多个处理器被配置为读取存储在存储器中的程序指令,以使得创建装置执行如第一方面及其任一种可能的设计方式提供的任一种方法。
第三方面,本申请提供了一种容器的创建方法,该方法应用于第二节点。该方法包括:接收容器迁移请求,该容器迁移请求指示将运行于第一节点中第一虚拟机的目标容器迁移至第二节点,以及指示第二节点创建用于运行目标容器的第二虚拟机,该目标容器为安全容器。将第一存储节点中的第一物理存储空间确定为第二虚拟机的内存的物理资源,该第一物理存储空间为第一虚拟机的内存的物理资源。基于第二虚拟机的内存的物理资源,创建第二虚拟机,并在第二虚拟机中运行目标容器。
基于本申请提供的方法,目标容器在迁移前后的内存的物理资源是一样的。这样,迁移后运行于第二节点的第二虚拟机中的目标容器的内存数据,即为迁移前运行于第一节点的第一虚拟机的目标容器的内存数据。因此,当迁移前后的目标容器的内存数据相同,这表明目标容器在迁移前后的业务状态是相同的。即,本申请方法能够实现在迁移容器时不影响容器业务的连续性、且不丢失容器的业务数据。
在另一种可能的设计中,上述的容器迁移请求中包括目标容器的身份标识号ID,则上述的将第一存储节点中的第一物理存储空间确定为第二虚拟机的内存的物理资源包括:向第一存储节点发送包括目标容器的ID的内存请求消息,该内存请求消息用于请求获取与目标容器的ID具有对应关系的第一物理存储空间的地址。接收第一存储节点返回的第一物理存储空间的地址,并将该地址指示的第一物理存储空间确定为第二虚拟机的内存的物理资源。
该可能的设计为第二节点获取第一物理存储空间(即第一虚拟机的内存的物理资源)的地址,从而将第一物理存储空间作为第二虚拟机的内存的物理资源的一种实现方式。
在另一种可能的设计中,上述容器迁移请求中包括第一虚拟机的身份标识号ID,则上述的将第一存储节点中的第一物理存储空间确定为第二虚拟机的内存的物理资源包括:向第一存储节点发送包括第一虚拟机的ID的内存请求消息,该内存请求消息用于请求获取与第一虚拟机的ID具有对应关系的第一物理存储空间的地址。接收第一存储节点返回的第一物理存储空间的地址,并将该地址指示的第一物理存储空间确定为第二虚拟机的内存的物理资源。
该可能的设计为第二节点获取第一物理存储空间(即第一虚拟机的内存的物理资源)的地址,从而将第一物理存储空间作为第二虚拟机的内存的物理资源的另一种实现方式。
第四方面,本申请提供了一种容器的创建装置。
在一种可能的设计方式中,该创建装置用于执行上述第三方面提供的任一种方法。本申请可以根据上述第三方面提供的任一种方法,对该创建装置进行功能模块的划分。例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。示例性的,本申请可以按照功能将该创建装置划分为接收单元和处理单元等。上述划分的各个功能模块执行的可能的技术方案和有益效果的描述均可以参考上述第三方面或其相应的可能的设计提供的技术方案,此处不再赘述。
在另一种可能的设计中,该创建装置包括:存储器、网络接口、以及一个或多个处理器,该一个或多个处理器通过网络接口接收或发送数据,该一个或多个处理器被配置为读取存储在存储器中的程序指令,以使得创建装置执行如第三方面及其任一种可能的设计方式提供的任一种方法。
第五方面,本申请提供了一种容器集群,该容器集群包括第一节点和第二节点。其中,第一节点用于执行如第一方面及其任一种可能的设计方式提供的任一种方法,以创建目标容器。第二节点用于执行如第三方面及其任一种可能的设计方式提供的任一种方法,以实现将运行于第一节点的目标容器迁移至所述第二节点。
第六方面,本申请提供了一种计算机可读存储介质,该计算机可读存储介质包括程序指令,当程序指令在计算机或处理器上运行时,使得计算机或处理器执行第一方面中或第二方面中的任一种可能的实现方式提供的任一种方法。
第七方面,本申请提供了一种计算机程序产品,当其在容器的创建装置上运行时,使得第一方面中的任一种可能的实现方式提供的任一种方法被执行。
第八方面,本申请提供了一种芯片系统,包括:处理器,处理器用于从存储器中调用并运行该存储器中存储的计算机程序,执行第一方面中的实现方式提供的任一种方法。
可以理解的是,上述提供的任一种装置、计算机存储介质、计算机程序产品或芯片系统等均可以应用于上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。
在本申请中,上述容器的创建装置的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,属于本申请权利要求及其等同技术的范围之内。
附图说明
图1为本申请实施例提供的一种容器集群的架构示意图;
图2为本申请实施例提供的一种第一节点的硬件结构示意图;
图3为本申请实施例提供的一种容器的创建方法的流程示意图;
图4为本申请实施例提供的一种目标容器在处理业务时的数据读写流程示意图;
图5为本申请实施例提供的另一种容器的创建方法的流程示意图;
图6为本申请实施例提供的一种共享内存的示意图;
图7为本申请实施例提供的又一种容器的创建方法的流程示意图;
图8为本申请实施例提供的另一种目标容器在处理业务时的数据读写流程示意图;
图9为本申请实施例提供的又一种容器的创建方法的流程示意图;
图10为本申请实施例提供的又一种容器的创建方法的流程示意图;
图11为本申请实施例提供的一种容器的创建装置的结构示意图;
图12为本申请实施例提供的另一种容器的创建装置的结构示意图;
图13为本申请实施例提供的一种芯片系统的示意图。
具体实施方式
为了更清楚的理解本申请实施例,下面对本申请实施例中涉及的部分术语或技术进行说明:
1)、容器
容器可以用于为应用进程提供运行环境,或者可以理解为用于运行应用实例。
一般的,容器可以分为普通容器和安全容器。其中,普通容器可以直接运行于节点中,安全容器则运行于集群中的节点上所创建的虚拟机中。
相比普通容器,运行于虚拟机中的安全容器具有更高的安全性。
这是由于用于运行容器的虚拟机通常仅用于运行容器,这种虚拟机一般被称为轻量化虚拟机。轻量化虚拟机和普通虚拟机一样配置有独立的操作系统内核,且在虚拟化层被安全隔离。也就是说,运行于轻量化虚拟机的容器不会共享宿主节点(即用于运行该轻量化虚拟机的节点(包括物理节点和虚拟节点))的操作系统内核。因此,安全容器比普通容器更具安全性。
另外,由于轻量化虚拟机仅用于运行容器,因此轻量化虚拟机仅需配置支持安全容器运行的功能模块即可,即轻量化虚拟机比普通虚拟机的启动和运行都更快。
2)、其他术语
在本申请的实施例中,术语“第一”、“第二”并不是表示顺序关系,而是为了区别不同的对象,以下文件中提到的第一、第二等也是为了区别不同的报文等,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。
还应理解,在本申请的各个实施例中,各个过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在实际中,对于安全容器,当需要迁移安全容器时,可以通过迁移用于运行安全容器的虚拟机来实现安全容器的迁移。
在一种可能的实现方式中,可以通过同时在两个节点上创建两个相同的虚拟机,并将其中一个虚拟机作为主虚拟机,另一个虚拟机作为备虚拟机。其中,主虚拟机正常处理用户提交的业务,并将用户提交的业务传递至备虚拟机,以使备虚拟机对用户提交的业务进行处理,从而备虚拟机可以得到和主虚拟机相同的处理结果。当主虚拟机确定备虚拟机已处理完成用户业务,则将自己处理用户业务后得到的处理结果输出给用户。而备虚拟机的所有对外输出被屏蔽,即备虚拟机不向外输出自身得到的处理结果。当主虚拟机失效/故障时,运行主虚拟机的节点只需通知运行备虚拟机的节点解除对备虚拟机的输出屏蔽,即可实现主、备虚拟机的即时切换,从而达到在不中断业务的情况下实现迁移虚拟机的目的,进而实现迁移运行于虚拟机中的安全容器的目的。
然而,通过该方式实现虚拟机中容器的迁移时,主、备虚拟机中的容器所运行的应用实例需要都完成对用户业务的处理后,主虚拟机才会向用户输出业务的处理结果,这会造成用户面业务的响应延迟,从而降低了用户的体验。
基于此,本申请实施例提供了一种容器的创建方法,该方法在创建安全容器时所创建的第一虚拟机的内存的物理资源被设置为第一存储节点中的第一物理存储空间。这样,基于该方法创建的安全容器在迁移时,只需将用于运行迁移后的安全容器的第二虚拟机的内存的物理资源也设置为第一物理存储空间,也即第一物理存储空间作为用于运行迁移前后的安全容器的虚拟机的共享内存。通过这种方式迁移安全容器,能够实现不丢失业务数据、不中断用户业务、且用户无感知。
本申请实施例还提供了一种容器集群,该容器集群可以包括控制节点和用于部署容器的多个节点(或称为工作节点(worker node))。其中,控制节点用于管理该多个工作节点上运行的容器,例如用于指示工作节点创建容器、或监控工作节点上容器的运行情况等。可选的,为实现容灾备份,控制节点的数量可以是多个。
可选的,上述的多个工作节点可以是物理节点,也可以是虚拟节点,对此不作限定。上述的控制节点可以是任意具有计算处理能力的节点设备,该节点设备可以是物理节点,也可以是虚拟节点,对此不作限定。其中,物理节点例如可以是通用计算机、笔记本电脑等计算设备,虚拟节点例如可以是虚拟机等,不限于此。
可以理解,上述控制节点可以是独立的节点设备,当然,该控制节点的功能也可以由上述多个工作节点中的任一个工作节点实现,即控制节点是该任一个工作节点中的功能模块,对此不作限定。为简单描述,本申请实施例在下文中以控制节点是独立的节点设备进行说明。
可选的,该容器集群还可以包括一个或多个存储节点。
本申请实施例提供的容器集群中的一个或多个存储节点,可以用于为容器集群中部署有安全容器的工作节点提供共享内存。该共享内存例如是由多个持久化内存介质(如XL-Flash等)组成的内存单元。由于持久化内存介质的存储性能介于传统动态随机存取存储器(dynamic random access memory,DRAM)与闪存存储器(flash memory)(例如NAND闪存)之间。因此该共享内存相比闪存存储器拥有更高的访问速度、更低的访问延迟,而相比传统DRAM拥有更大的存储容量,且数据断电不丢失,可以持久化存储,成本也相对较低。
可选的,本申请实施例所提供的容器集群中的一个或多个存储节点,还可以用于为该容器集群中的工作节点上所运行的容器的镜像文件提供存储空间。该存储空间例如是由多个非易失性存储介质组成的存储单元,如机械硬盘、固态硬盘等。该存储空间的存储性能弱于持久化内存介质,但容量更大,成本更低。其中,容器的镜像文件(或者称为容器镜像(container image))中存储有该容器的程序代码,以及用于存储该容器需要持久化存储的数据等,对此不作详述。
需要说明,为容器集群中部署有安全容器的节点提供共享内存的存储节点,以及为容器集群中的节点所运行的容器的镜像文件提供存储空间的存储节点,可以是容器集群中相同的存储节点,当然也可以是容器集群中不同的存储节点,对此不作限定。
当然,本申请实施例中的容器集群中也可以不包括存储节点。这种情况下,可以通过独立存储系统中的存储节点来为该容器集群提供数据存储服务。例如该存储系统中的存储节点可以用于为该容器集群中部署有安全容器的节点提供共享内存的存储服务,和/或用于为该容器集群中节点上运行的容器的镜像文件提供存储空间,对此不作限定。
为简单描述,本申请实施例在下文中以本申请实施例提供的容器集群中包括一个或多个存储节点为例进行说明。
作为示例,参考图1,图1示出了本申请实施例提供的一种容器集群100的架构示意图。
如图1所示,容器集群100包括控制节点101、控制节点102以及用于部署容器的n个工作节点,该n个工作节点分别为工作节点111、工作节点112、工作节点113、…、以及工作节点11n。其中n是大于3的整数。其中,控制节点102为控制节点101的备份控制节点。
容器集群100还包括2个存储节点,分别为存储节点121和存储节点122。存储节点121和存储节点122可以分别和上述n个工作节点之间具有通信连接。这样,该n个工作节点可以通过远程直接内存访问(remote direct memory access,RDMA)来访问存储节点121和存储节点122。其中,为容器集群100中部署有安全容器的工作节点提供共享内存的存储节点,以及为上述n个工作节点中运行的容器的镜像文件提供存储空间的存储节点,可以均为存储节点121,或者均为存储节点122,或者分别是存储节点121和存储节点122。
可以理解,尽管图1中未示出,控制节点101、控制节点102和存储节点121(和/或存储节点122)之间也可以具有通信连接,以便控制节点101、控制节点102可以访问存储节点121(和/或存储节点122)。
还应理解,尽管图1中未示出,工作节点111、工作节点112、工作节点113、…、以及工作节点11n之间可以互相通信。
本申请实施例还提供了一种容器的创建装置,该装置应用于上述的容器集群。可选的,该装置可以是上述容器集群中的任一个用于部署容器的工作节点(下文中称为第一节点),或者,该装置是第一节点中的功能模块,对此不作限定。作为示例,第一节点可以是图1所示容器集群100中的工作节点111、工作节点112或工作节点113等等,对此不作限定。
以本申请实施例提供的容器的创建装置是容器集群中的第一节点为例,参考图2,图2示出了第一节点的硬件结构示意图。如图2所示,第一节点20包括处理器201、存储器202、网络接口203以及总线204。处理器201、存储器202、网络接口203之间通过总线204连接。
处理器201是第一节点20的控制中心,可以是一个通用中央处理器(centralprocessing unit,CPU),处理器201还可能是其他通用处理器、数字信号处理器(digitalsignal processing,DSP)、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件、图形处理器(graphics processingunit,GPU)、神经网络处理单元(neural processing unit,NPU)、张量处理器(tensorprocessing unit,TPU)或人工智能(artificial intelligent)芯片、数据处理器(dataprocessing unit,DPU)等。
作为一个示例,处理器201包括一个或多个CPU,例如图2中所示的CPU 0和CPU 1。此外,本申请并不限定每个处理器中处理器核的个数。
存储器202用于存储程序指令或应用进程所要访问的数据,处理器201可以通过执行存储器202中的程序指令,以实现本申请实施例提供的容器的创建方法。
存储器202包括易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。
其中,易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、DRAM、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
非易失性存储器可以是储存级内存(storage class memory,SCM)、固态硬盘(solid state drive,SSD)、机械硬盘(hard disk drive,HDD)等。其中,储存级内存例如可以是非易失性内存(non-volatile memory,NVM)、相变化内存(phase-change memory,PCM)、持久化内存等。
在一种可能的实现方式中,存储器202独立于处理器201存在。存储器202通过总线204与处理器201相连接,用于存储数据、指令或者程序代码。处理器201调用并执行存储器202中存储的指令或程序代码时,能够实现本申请实施例提供的容器的创建方法。
在另一种可能的实现方式中,存储器202和处理器201集成在一起。
网络接口203,用于第一节点20与其他设备(如图1中所示容器集群100中的存储节点等)通过通信网络连接,所述通信网络可以是以太网,无线接入网(radio accessnetwork,RAN),无线局域网(wireless local area networks,WLAN)等。网络接口203包括用于接收数据/报文的接收单元,以及用于发送数据/报文的发送单元。
在本申请实施例中,网络接口203可以是支持RDMA的网络接口卡(networkinterface card,NIC),支持RDMA的NIC可以简写为RNIC。
其中,RDMA是一种用于解决网络传输中数据处理延迟的传输层网络协议。RDMA能够减少数据传输过程中在用于传输数据的主机设备内部对数据的复制操作,并且无需用于传输数据的主机设备的操作系统介入,因此RDMA能够降低用于传输数据的主机设备的CPU负载。
总线204,可以是工业标准体系结构(industry standard architecture,ISA)总线、外部设备互连(peripheral component interconnect,PCI)总线、高速串行计算机扩展总线(peripheral component interconnect express,PCIe)、计算快速链路(computeexpress link,CXL)或扩展工业标准体系结构(extended industry standardarchitecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在一些实施例中,可选的,上述的第一节点20还可以配置有独立的DPU 205。其中,DPU 205通过总线204与处理器201、存储器202、网络接口203通信。
DPU 205包括存储模块和RNIC驱动模块。可选的,DPU 205的硬件实现可以是能够实现存储功能和RNIC功能的ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,本申请实施例对此不作具体限定。可以理解,在实际中,DPU 205可以呈现为一张具有存储功能和RNIC功能的电路板/卡。
其中,DPU 205的存储模块可以包括DRAM。
可选的,该存储模块中的物理存储空间可以作为第一节点20上所运行的虚拟机的缓存,并支持内存访问语义和直接访问(Direct Access,DAX)的访问机制。这样,DPU 205的存储模块可以在第一节点20上呈现为支持DAX的持久化内存设备。其中,DAX访问机制是一种支持用户态软件直接访问存储于持久化内存中数据的机制。这样,第一节点20在访问DPU205的存储模块中的数据时,就如同访问自身的内存,而无需先执行将数据拷贝到操作系统的页高速缓存(page cache)过程。
DPU 205的RNIC驱动模块,用于和存储节点(例如图1中的存储节点121或存储节点122)进行通信,并通过RDMA访问存储节点中用作共享内存的物理存储空间。
需要说明的是,当第一节点20配置了DPU 205时,上述的网络接口203可以支持RDMA,也可以不支持RDMA,本申请实施例对此不作限定。
需要指出的是,图2中示出的结构并不构成对第一节点20的限定,除图2所示部件之外,该第一节点20还可以包括比图2所示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合附图,对本申请实施例提供的容器的创建方法进行说明。
在第一种可能的实现方式中,参考图3,图3示出了本申请实施例提供的一种容器的创建方法的流程示意图。可选的,该方法应用于图1所示的容器集群100,并可以由具有图2所示硬件结构的第一节点执行。该方法可以包括以下步骤:
S101、第一节点获取用于指示创建目标容器的第一创建请求。
其中,目标容器为安全容器。安全容器的说明可以参考上文,这里不作赘述。
可选的,在具体实现时,第一创建请求中可以携带第一指示信息,第一指示信息用于指示第一节点创建支持动态迁移特性的目标容器。
可以理解,支持动态迁移特性的目标容器即为第一节点基于本申请实施例所述的方法创建的容器。其中,支持动态迁移特性是指在不中断业务的情况下完成正常运行的容器的迁移的特性。
具体的,第一创建请求还用于指示第一节点创建用于运行目标容器的轻量化虚拟机(下文中以该轻量化虚拟机是第一虚拟机为例进行说明),并指示第一节点在创建完成的第一虚拟机中运行目标容器。
第一创建请求中包括目标容器的身份标识号(identity document,ID)(或目标容器所属pod的ID)、目标容器的镜像ID以及包括运行目标容器所需资源的资源参数。该资源参数包括运行目标容器所需的CPU资源大小以及内存资源大小等。
其中,目标容器的镜像ID用于标识目标容器的镜像文件,第一节点可以基于目标容器的镜像ID访问该目标容器的镜像文件。
可选的,目标容器的镜像文件预存于第二存储节点。第二存储节点可以和上文所述的第一存储节点是同一个存储节点,也可以是不同的存储节点,对此不作限定。第二存储节点中预存有一个或多个容器的镜像文件,容器的镜像文件中存储有该容器的程序代码,以及用于存储该容器需要持久化存储的数据等,对此不作详述。可以理解,第二存储节点中预存的容器的程序代码可以是设计人员预先设计开发的容器的程序代码,包括不同程序代码的容器镜像文件可以通过不同的ID标识,对此不作限定。
可选的,第一创建请求中还可以包括第一虚拟机的ID。可以理解,第一虚拟机的ID也可以是第一节点根据第一创建请求中的目标容器ID或目标容器所属pod的ID,生成的用于运行目标容器的第一虚拟机的ID,对此不作限定。其中,目标容器ID(或目标容器所属pod的ID),与第一虚拟机的ID具有对应关系。
在一种可能的实现方式中,第一节点可以接收容器集群的控制节点(例如图1所示的控制节点10)发送的第一创建请求。
具体实现时,以图1所示的容器集群100是安装有K8S系统的K8S集群为例,这种情况下,容器集群100中的控制节点10和n个工作节点均安装有K8S容器管理模块。其中,控制节点10的K8S容器管理模块可以基于用户输入指示生成第一创建请求。
示例性的,控制节点10中的K8S容器管理模块可以通过控制节点10的输入接口(例如键盘、鼠标、触摸屏等)接收到用户输入的指示,进而生成第一创建请求,其中,用户输入的指示例如包括目标容器的ID、目标容器的镜像ID等。可以理解,容器的ID例如可以是容器的名称、编号等,对此不作限定。镜像ID例如可以是容器镜像文件的名称、编号等,对此不作限定。
然后,控制节点10基于预定的选择策略或接收到的用户的指示,确定用于部署目标容器的节点为容器集群100中的第一节点,并向第一节点发送生成的第一创建请求。作为响应,第一节点可以接收到该第一创建请求。其中,本申请实施例对预定的选择策略不作限定,该预定的选择策略例如可以是负载均衡策略等。
在另一种可能的实现方式中,第一节点可以基于用户输入的指示生成第一创建请求。示例性的,第一节点可以通过输入接口(例如键盘、鼠标、触摸屏等)接收到用户输入的指示,进而生成第一创建请求。本申请实施例对此不作具体限定。
S102、第一节点根据第一创建请求确定第一虚拟机的内存的物理资源。其中,第一虚拟机用于运行目标容器。
具体的,第一节点根据第一创建请求确定第一虚拟机的内存的物理资源的过程可以通过步骤S1021-S1022实现:
S1021、第一节点根据第一创建请求,确定第一虚拟机的内存大小。
由于目标容器为安全容器,且运行安全容器的虚拟机一般为仅用于运行安全容器的轻量化虚拟机。可以理解的是,若第一创建请求仅指示创建一个目标容器,则运行目标容器所需的资源,可以看作是创建第一虚拟机所需的资源。若第一创建请求指示创建包括目标容器在内的多个容器,则运行该多个容器所需的资源,可以看作是创建第一虚拟机所需的资源。这种情况下,第一创建请求中包括运行该多个容器所需资源的资源参数,运行该多个容器所需的资源包括运行目标容器所需的资源。
以第一创建请求仅指示创建一个目标容器为例,第一节点可以根据第一创建请求中包括的运行目标容器所需资源的资源参数,确定创建第一虚拟机所需资源的资源参数。例如,第一节点根据第一创建请求中包括的运行目标容器所需资源的资源参数,确定创建第一虚拟机所需的CPU资源大小和内存大小等。
应理解,第一虚拟机的内存可以理解为第一虚拟机的物理内存,第一虚拟机的物理内存实际为虚拟机进程的一段虚拟内存。
S1022、第一节点根据第一虚拟机的内存大小,向第一存储节点申请第一虚拟机的内存的物理资源。
具体的,第一节点可以根据第一虚拟机的内存大小,向第一存储节点申请一段物理存储空间,以作为第一虚拟机的内存的物理资源。
可选的,第一节点可以根据第一虚拟机的内存大小,生成第一内存请求消息,并向第一存储节点发送第一内存请求消息。
例如,第一节点可以通过自身的网络接口(例如图2所示的网络接口203),向第一存储节点发送第一内存请求消息。其中,第一内存请求消息用于指示第一存储节点为第一虚拟机分配一段物理存储空间。第一内存请求消息中携带第一虚拟机的内存大小,第一内存请求消息中还可以携带有目标容器的ID(或目标容器所属pod的ID)、和/或第一虚拟机的ID。这里,第一虚拟机的ID的说明可以参考上文,不再赘述。第一存储节点可以是第一节点所在容器集群中的存储节点(例如图1所示的存储节点121),也可以是该容器集群能够访问的独立存储系统中的存储节点,对此不作限定。
响应于接收到的第一内存请求消息,第一存储节点为第一虚拟机分配一段物理存储空间,并将该“一段物理存储空间”的地址(物理地址或逻辑地址)返回第一节点。
为便于描述,在本申请实施例中,将第一存储节点为第一虚拟机分配的该“一段物理存储空间”称为第一物理存储空间。可选的,第一物理存储空间可以是由多个持久化内存介质(如XL-Flash等)组成的内存单元。由于持久化内存介质的存储性能介于传统DRAM与闪存存储器之间,因此第一物理存储空间相比闪存存储器拥有更高的访问速度、更低的访问延迟,而相比传统DRAM拥有更大的存储容量,且数据断电不丢失,可以持久化存储,成本也相对较低。
可选的,第一存储节点为第一虚拟机分配的第一物理存储空间的大小,可以等于第一虚拟机的内存大小,也可以大于第一虚拟机的内存大小,对此不作限定。
可选的,第一存储节点可以随机的将自身内存中当前空闲、且大于或等于第一虚拟机内存大小的一段物理存储空间,作为第一物理存储空间分配给第一虚拟机。或者,第一存储节点可以基于预设规则将自身内存中当前空闲、且大于或等于第一虚拟机内存大小的一段物理存储空间,作为第一物理存储空间分配给第一虚拟机。本申请实施例对该预设规则不作限定。
可选的,为便于管理本地的存储空间,第一存储节点在为第一虚拟机分配第一物理存储空间后,还在上述第一内存请求消息中携带有第一虚拟机的ID时,建立第一物理存储空间的地址和第一虚拟机ID之间的对应关系。或者,在第一内存请求消息中携带有目标容器的ID(或目标容器所属pod的ID),建立第一物理存储空间的地址和目标容器的ID(或目标容器所属pod的ID)之间的对应关系。或者,在第一内存请求消息中携带有目标容器的ID(或目标容器所属pod的ID)和第一虚拟机的ID,建立第一物理存储空间的地址、目标容器的ID(或目标容器所属pod的ID)、以及第一虚拟机ID之间的对应关系。
响应于第一存储节点向第一节点返回的第一物理存储空间的地址,第一节点即获取到第一物理存储空间的地址,从而完成了向第一存储节点申请第一虚拟机的内存的物理资源的过程。
需要说明,第一节点可以通过RDMA操作访问第一存储节点的第一物理存储空间。
在一些示例中,第一节点可以根据第一存储节点返回的第一物理存储空间的地址,注册一个新的DAX存储设备。
其中,该DAX存储设备是虚拟的存储设备,该DAX存储设备在第一节点上并无实际的物理存储空间,该DAX存储设备用于指示第一存储节点返回的第一物理存储空间的地址对应的存储空间。其中,DAX的相关说明可以参考上文,这里不作赘述。
在一些实施例中,上述的第一物理存储空间除作为第一虚拟机的内存的物理资源外,第一物理存储空间中的一部分存储空间,还可以用于存储第一虚拟机的CPU状态信息。
这种情况下,第一物理存储空间的大小至少等于:第一虚拟机的内存大小和第一虚拟机的CPU状态信息的大小之和。其中,CPU状态信息包括寄存器信息(例如寄存器的标识和当前值)、中断信息等,对此不作限定。这种情况下,第一物理存储空间包括第一空间和第二空间。其中,第一空间用于存储第一虚拟机的内存数据,第二空间用于存储第一虚拟机的CPU状态信息。
S103、第一节点基于第一创建请求和确定的物理资源,创建第一虚拟机。
具体的,第一节点可以基于第一创建请求,先创建用于创建第一虚拟机的虚拟机进程。可以理解,该虚拟机进程用于创建(或管理/监控)第一虚拟机,即第一虚拟机相当于是该虚拟机进程中的一个或多个线程。
作为示例,以图1所示的容器集群100是安装有K8S系统的K8S集群为例,则容器集群100中的第一节点在获取第一创建请求后,第一节点中的K8S容器管理模块则将第一创建请求发送至第一节点的虚拟机监控器(virtual machine monito,VMM),并由VMM指示第一节点创建用于创建第一虚拟机的虚拟机进程。
这样,基于上述确定出的创建第一虚拟机所需资源的资源参数,第一节点可以通过上述创建的虚拟机进程创建第一虚拟机。
具体的,基于第一虚拟机的内存大小,第一节点可以先通过虚拟机进程编址一段虚拟内存,以作为第一虚拟机的物理内存(下文中称为第一物理内存)。然后,第一节点通过虚拟机进程建立第一物理内存和第一物理存储空间之间的映射关系,以实现将第一物理存储空间作为第一虚拟机的内存的物理资源。
第一节点可以通过虚拟机进程建立第一物理内存和该虚拟机进程的第一虚拟内存之间的映射关系。其中,第一虚拟内存是该虚拟机进程的虚拟内存中的一段内存,且第一虚拟内存的地址与第一物理内存的地址一一对应。第一节点还通过虚拟机进程建立第一虚拟内存和第一存储节点返回的第一物理存储空间之间的映射关系,从而实现将第一物理存储空间作为第一虚拟机的内存的物理资源的目的。
其中,第一虚拟内存(或第一物理内存)的大小,小于或等于第一物理存储空间大小,且第一物理存储空间中包括与第一虚拟内存(或第一物理内存)的地址一一对应的地址。换句话说,第一物理存储空间中的一段或全部存储空间的地址与第一虚拟内存(或第一物理内存)的地址一一对应。
作为示例,当第一节点通过虚拟机进程建立第一虚拟内存和第一物理存储空间之间的映射关系时,第一节点可以打开基于第一物理存储空间的地址在第一节点注册的DAX存储设备,并通过虚拟机进程调用mmap接口来建立第一虚拟内存和第一物理存储空间之间的映射关系。
另外,第一节点还基于确定出的第一虚拟机所需的CPU资源大小,并通过虚拟机进程为第一虚拟机申请第一节点的CPU资源,这里不作详述。
这样,在确定第一虚拟机的内存的物理资源和第一虚拟机的CPU资源后,第一节点可以通过虚拟机进程创建第一虚拟机。例如,第一节点可以在本地预存的虚拟机镜像文件中读取虚拟机的操作系统代码,并通过虚拟机进程在确定的资源中运行该操作系统代码,以完成第一虚拟机的创建。其中,虚拟机镜像文件中的操作系统代码为虚拟机的操作系统代码。
需要说明,在本申请实施例中,容器集群中的工作节点预存有虚拟机镜像文件。虚拟机镜像文件中包括虚拟机的操作系统代码,并且,虚拟机镜像文件可以用于存储虚拟机运行过程中需要持久化存储的数据。可以理解,虚拟机镜像文件可以看作是虚拟机的硬盘。
还需要说明,在第一虚拟机创建后,第一节点可以通过虚拟机进程将第一虚拟机的CPU状态信息写入第一物理存储空间中的第二空间。其中,第二空间和CPU状态信息的说明可以参考S1022中的相关描述,这里不作赘述。
具体的,第一节点可以通过虚拟机进程先将第一虚拟机的CPU状态信息写入第一虚拟内存。由于第一虚拟内存对应的实际物理存储空间为第一节点的第二物理内存(即第一节点的一段本地物理内存),因此,第一节点通过虚拟机进程实际是将CPU状态信息写入第二物理内存,并进一步将该CPU状态信息写入第一节点的RNIC的内存中。这样,RNIC即可将该CPU状态信息通过RDMA操作(例如写(write)操作/发送(send)操作)写入第一存储节点的第一物理空间中的第二空间中,从而实现对第一虚拟机的CPU状态信息的记录。
还需说明,在第一虚拟机运行的过程中,当第一节点通过虚拟机进程监控到第一虚拟机的CPU状态发生变化,则通过上述描述的过程将第一虚拟机当前的CPU状态信息写入第一存储节点的第一物理空间中的第二空间中,以更新第二空间中记录的CPU状态信息,从而保证第一虚拟机的最新CPU状态信息被记录于第二空间中。
S104、第一节点在第一虚拟机中创建目标容器。
第一节点可以先基于第一创建请求中的镜像ID,访问第二存储节点中的该镜像ID所标识的镜像文件,并读取该镜像文件中的程序代码。进而,第一节点在第一虚拟机中运行该程序代码,从而完成目标容器的创建。
然后,第一节点通过虚拟机进程将第一虚拟机的状态设置为运行状态。
应理解,第一节点在基于镜像ID访问第二存储节点中的该镜像ID所标识的镜像文件时,还向第二存储节点发送目标容器的ID。
进而,第二存储节点可以建立目标容器ID和上述镜像ID之间的对应关系。这样,当将目标容器迁移至其他节点时,该其他节点即可通过目标容器的ID,在第二存储节点中查找到与目标容器ID对应的镜像文件,并读取将该镜像文件中的程序代码,以创建目标容器,从而实现目标容器的迁移。
至此,目标容器可以在第一节点中的第一虚拟机上正常运行。
下面参考图4,对基于图3所述方法创建的目标容器在处理业务时的数据读写流程进行说明。
如图4所示,第一节点创建并运行有虚拟机进程,虚拟机进程创建第一虚拟机,即第一虚拟机作为虚拟机进程的一个或多个线程运行于虚拟机进程中。进一步的,目标容器运行于第一虚拟机中,目标容器中运行有应用进程1、应用进程2以及应用进程3。
第一种情况:用户设备访问目标容器中的应用进程1,并通过应用进程1向第一虚拟机写入数据1。
这种情况下,第一节点通过应用进程1首先将数据1写入第一物理内存(即第一虚拟机的物理内存)。由于第一物理内存与虚拟机进程的第一虚拟内存对应,即第一节点首先将数据1写入与第一物理内存对应第一虚拟内存。
当第一节点向第一虚拟内存写入数据时,第一节点会为第一虚拟内存分配一段实际的物理内存(即第一节点的一段本地物理内存,如图4所示的第二物理内存)。因此,第一节点通过应用进程1将数据1写入第一虚拟内存,实际为将数据1写入第二物理内存。
基于第一虚拟内存和第一物理存储空间之间的映射关系,第一节点可以进一步将第二物理内存中的数据1写入第一节点的RNIC的内存中。这样,RNIC即可将数据1通过RDMA操作(例如write操作/send操作)写入第一存储节点的第一物理存储空间中的第一空间,从而实现第一物理存储空间中的数据和第一物理内存中的数据同步。其中,第一空间的说明可以参考上文描述。
其中,可选的,第一节点的RNIC可以实时的将写入RNIC内存的数据1通过RDMA操作写入第一空间。
或者,RNIC也可以周期性的将写入RNIC内存的数据通过RDMA操作写入第一空间。当然,RNIC还可以在写入RNIC内存的数据大小超过阈值时,通过RDMA操作将这些数据写入第一空间,本申请实施例对此不作限定。
第二种情况:用户设备访问目标容器中的应用进程1,并通过应用进程1读取第一虚拟机的数据2。
这种情况下,第一节点中的第一虚拟机通过应用进程1查询与第一物理内存对应的第二物理内存(即第一节点的一段本地物理内存)。当第一节点确定第二物理内存中不存在数据2,则第一节点的操作系统触发缺页异常事件。
然后,第一节点指示RNIC生成用于读取数据2的RDMA读请求,以从第一存储节点的第一物理存储空间中的第一空间读取到数据2,并进一步将数据2返回应用进程1。
在一些实施例中,当第一节点所在的容器集群中的控制节点(例如图1所示容器集群100中的控制节点10)监控到上述目标容器需要迁移时,控制节点向该容器集群中除第一节点之外的另一个节点发送容器迁移请求,以指示将该目标容器迁移至该另一个节点。
下面对目标容器的迁移过程进行说明。参考图5,图5示出了本申请实施例提供的另一种容器的创建方法的流程示意图。可选的,该方法可以应用于图1所示的容器集群,该方法包括以下步骤:
S201、控制节点在容器集群中确定第二节点。
具体的,控制节点在确定第一节点通过图3所示方法在上创建的上述目标容器需要迁移时,则在容器集群中确定用于迁移该目标容器的第二节点。其中,第二节点是该容器集群中除第一节点之外的任一个工作节点。例如,假设第一节点是图1所示容器集群100中的工作节点111,则第二节点可以是容器集群100中的工作节点112、工作节点113或工作节点11n中的任一个,对此不作限定。
作为示例,当控制节点监控到第一节点中的目标容器所需的资源即将耗尽,或者监控到第一节点中运行该目标容器的上述第一虚拟机的资源即将耗尽,或者监控到第一节点的资源即将耗尽,或者监控到第一节点(或第一虚拟机,亦或目标容器)故障,或者监控到第一节点(或第一虚拟机,亦或目标容器)因其他原因暂停、又或者控制节点接收到用户迁移目标容器的指示,等等,控制节点在容器集群中确定第二节点。
可选的,控制节点可以随机的在容器集群中确定第二节点。或者,控制节点可以基于预设策略在容器集群中确定第二节点,该预设策略例如是负载均衡策略,对此不作限定。又或者,控制节点基于获取的用户指示中携带的第二节点的ID,在容器集群中确定第二节点。
S202、控制节点向第二节点发送容器迁移请求,以指示第二节点创建用于运行目标容器的第二虚拟机。
其中,运行于第一节点中第一虚拟机的目标容器即为待迁移容器。
具体的,容器迁移请求用于指示第二节点创建用于运行目标容器的轻量化虚拟机(下文中以该轻量化虚拟机是第二虚拟机为例进行说明),并指示第二节点在创建完成的第二虚拟机中运行目标容器。容器迁移请求中可以包括目标容器的ID(或目标容器所属pod的ID)、运行目标容器所需资源的资源参数。其中,运行目标容器所需资源的资源参数包括运行该目标容器所需的CPU资源大小以及内存资源大小等。
可选的,容器迁移请求中还可以包括第二虚拟机的ID和第一虚拟机的ID。可以理解的是,第二虚拟机的ID也可以是第二节点根据容器迁移请求中的目标容器ID或目标容器所属pod的ID,生成的用于运行目标容器的第二虚拟机的ID,对此不作限定。
需要说明,第二虚拟机的ID和第一虚拟机的ID可以相同,也可以不同,对比不作限定。可以理解,当第二虚拟机的ID和第二虚拟机的ID相同时,容器迁移请求中可以只包括一个虚拟机的ID即可。
S203、第二节点根据接收到的容器迁移请求,获取第一物理存储空间的地址。
需要说明,为实现在不中断业务的情况下实现目标容器的迁移,第二节点可以根据容器迁移请求中的第一虚拟机的ID和/或目标容器的ID(或目标容器所属pod的ID),获取上文所述的第一物理存储空间(即第一虚拟机的内存的物理资源)的地址,以便将第一物理存储空间确定为第二虚拟机的内存的物理资源。这样,第一虚拟机的内存数据即可作为第二虚拟机的内存数据。其中,第一物理存储空间的详细说明可以参考上文,这里不予赘述。
具体的,第二节点可以在接收到容器迁移请求后,根据容器迁移请求生成内存请求消息(例如第二内存请求消息),并向第一存储节点发送第二内存请求消息。其中,第二内存请求消息用于请求获取第一存储节点为第一虚拟机分配的第一物理存储空间的地址。作为示例,第二节点可以通过自身的网络接口向第一存储节点发送第二内存请求消息。
在一种可能的实现方式中,当第一节点在为第一虚拟机申请第一物理存储空间时,向第一存储节点发送的第一内存请求消息中包括第一虚拟机的ID,即表明第一存储节点中记录有第一物理存储空间的地址和第一虚拟机的ID之间的对应关系。
这样的话,第二内存请求消息中包括第一虚拟机的ID。进而,作为接收到第二内存请求消息的响应,第一存储节点根据第一虚拟机的ID在记录的对应信息中,查找并确定与第一虚拟机的ID具有对应关系的第一物理存储空间的地址,并将该地址返回第二节点。这样,第二节点即获取到第一物理存储空间的地址。
在另一种可能的实现方式中,当第一节点在为第一虚拟机申请第一物理存储空间时,向第一存储节点发送的第一内存请求消息中包括目标容器的ID(或目标容器所属pod的ID),即表明第一存储节点中记录有第一物理存储空间的地址和目标容器的ID(或目标容器所属pod的ID)之间的对应关系。
这样的话,第二内存请求消息中包括目标容器的ID(或目标容器所属pod的ID)。进而,作为接收到第二内存请求消息的响应,第一存储节点根据目标容器的ID(或目标容器所属pod的ID)在记录的对应信息中,查找并确定与目标容器的ID(或目标容器所属pod的ID)具有对应关系的第一物理存储空间的地址,并将该地址返回第二节点。这样,第二节点即获取到第一物理存储空间的地址。
在又一种可能的实现方式中,当第一节点在为第一虚拟机申请第一物理存储空间时,向第一存储节点发送的第一内存请求消息中包括目标容器的ID(或目标容器所属pod的ID)和第一虚拟机的ID,即表明第一存储节点中记录有第一物理存储空间的地址、目标容器的ID(或目标容器所属pod的ID)、以及第一虚拟机的ID之间的对应关系。
这样的话,第二内存请求消息中包括目标容器的ID(或目标容器所属pod的ID)或第一虚拟机的ID中的至少一个ID。进而,作为接收到第二内存请求消息的响应,第一存储节点根据该至少一个ID在记录的对应信息中查找并确定与该至少一个ID具有对应关系的第一物理存储空间的地址,并将该地址返回第二节点。这样,第二节点即获取到第一物理存储空间的地址。
在一些示例中,第二节点可以根据获取的第一物理存储空间的地址,注册一个新的DAX存储设备。第二节点根据获取的第一物理存储空间的地址,注册一个新的DAX存储设备的说明,可以参考上文第一节点根据第一存储节点返回的第一物理存储空间的地址,注册一个新的DAX存储设备的描述,不再赘述。
S204、第二节点根据第一物理存储空间的地址,创建第二虚拟机。
具体的,第二节点可以根据容器迁移请求中运行目标容器的资源参数,确定创建第二虚拟机所需资源的资源参数,例如确定创建第二虚拟机所需的CPU资源大小和内存大小。
进一步的,第二节点根据容器迁移请求,先创建用于创建第二虚拟机的虚拟机进程,并通过虚拟机进程建立第二虚拟机的物理内存和第一物理存储空间之间的映射关系,从而实现第一物理存储空间作为第二虚拟机的内存的物理资源的目的。其中,第二节点通过虚拟机进程建立第二虚拟机的物理内存和第一物理存储空间之间的映射关系的详细说明,可以参考S103中第一节点通过虚拟机进程建立第一物理内存(即第一虚拟机的物理内存)和第一物理存储空间之间的映射关系的描述,不再赘述。
另外,基于确定出的创建第二虚拟机的CPU资源大小,第二节点还通过虚拟机进程为第二虚拟机申请第二节点的CPU资源,这里不作详述。需要说明,第二节点还可以利用虚拟机进程,并通过RDMA操作(例如读操作)访问第一物理存储空间,以读取第一物理存储空间的第二空间中记录的CPU状态信息,并基于读取到的CPU状态信息设置第二虚拟机所申请的CPU资源的状态。其中,第二空间和CPU状态信息的说明可以参考S1022中的相关描述,不再赘述。
这样,在确定第二虚拟机的内存的物理资源和CPU资源后,第二节点通过虚拟机进程创建第二虚拟机。例如,第二节点可以在本地预存的虚拟机镜像文件中读取虚拟机的操作系统代码,并通过虚拟机进程在确定的资源中运行该操作系统代码,以完成第二虚拟机的创建。其中,虚拟机镜像文件的相关说明可以参考上文描述,不再赘述。
此外,第二节点在通过虚拟机进程创建第二虚拟机后,在第二虚拟机运行的过程中,当第二节点通过虚拟机进程监控到第二虚拟机的CPU状态发生变化,则将第二虚拟机当前的CPU状态信息写入第一存储节点的第一物理空间中的第二空间中,以更新第二空间中记录的CPU状态信息,从而保证第二虚拟机的最新CPU状态信息被记录于第二空间中。其中,第二节点将第二虚拟机的CPU状态信息写入第一物理存储空间中的第二空间的说明,可以参考上文中第一节点将第一虚拟机当前的CPU状态信息写入第一存储节点的第一物理空间中的第二空间中的描述,不作赘述。
S205、第二节点在第二虚拟机中创建目标容器。
第二节点可以先基于上述容器迁移请求中的目标容器ID、以及第二存储节点中预存的目标容器ID和镜像ID之间的对应关系,在第二存储节点中的查找到目标容器的镜像文件,并读取该镜像文件中的程序代码。进而,第二节点在第二虚拟机中运行该程序代码,从而完成目标容器的创建。
其中,第二存储节点中预存的目标容器ID和镜像ID之间的对应关系,可以参考上文S104中的相关描述,不再赘述。
可以理解的是,控制节点在指示第二节点迁移目标容器时,还可以向运行迁移前的目标容器的第一节点发送迁移目标容器的指示。
这样的话,在一种可能的情况中,第二节点在创建第二虚拟机、以及在第二虚拟机中创建目标容器后,将第二虚拟机的状态设置为运行状态。例如,第二节点可以通过虚拟机进程将第二虚拟机的状态设置为运行状态。
这种情况下,可选的,控制节点监控到第二节点创建的目标容器已经开始运行,则向第一节点发送删除目标容器的指示。作为响应,第一节点删除本地的目标容器。或者,第一节点可以在接收到控制节点发送的迁移目标容器的指示后的第一预设时长到来时,删除本地的目标容器。其中,第一预设时长用于保证第一节点将第一虚拟机的本地内存数据全部写入第一物理存储空间。
结合上文可知,用于运行迁移后的目标容器的第二虚拟机和用于运行迁移前的目标容器的第一虚拟机所需资源的资源参数相同(均基于运行目标容器所需资源的资源参数确定),第二虚拟机的CPU状态和第一虚拟机的CPU状态相同,因此,第二虚拟机和第一虚拟机的资源配置和CPU状态均相同。并且,第二虚拟机的内存的物理资源和第一虚拟机的内存的物理资源相同,即第二虚拟机与第一虚拟机共享内存的物理资源,也即第一物理存储空间作为用于运行迁移前后的安全容器的虚拟机的共享内存。这样的话,当第二节点将第二虚拟机的状态设置为运行状态时,第一虚拟机在第一节点的本地内存中的内存数据已全部通过RDMA操作写入第一物理存储空间,则表示第二虚拟机和第一虚拟机的内存数据、进程状态也都是相同的。这样,基于本申请方法迁移目标容器时没有造成内存数据丢失,从而不会中断用户业务,且用户无感知。
此外,第二虚拟机中运行的目标容器的镜像文件和第一虚拟机中运行的目标容器的镜像文件相同,即迁移后运行于第二虚拟机的目标容器和迁移前运行于第一虚拟机的目标容器的文件数据也是相同的。可见基于本申请实施例提供的方法迁移目标容器时也不会造成目标容器的文件数据丢失。
在另一种可能的情况中,当第二节点在完成创建第二虚拟机、以及完成在第二虚拟机中创建目标容器,并且已接收到第一节点发送的开启目标容器的指示消息,则将第二虚拟机的状态设置为运行状态。当第二节点在完成创建第二虚拟机、以及完成在第二虚拟机中创建目标容器后,还未接收到第一节点发送的开启目标容器的指示消息,则先将第二虚拟机的状态设置为暂停状态,并在接收到第一节点发送的开启目标容器的指示消息时,将第二虚拟机的状态设置为运行状态,以开启目标容器。作为示例,第二节点可以通过虚拟机进程将第二虚拟机的状态设置为暂停状态或运行状态。
这种情况下,第一节点在接收到控制节点发送的迁移目标容器的指示后,作为响应,第一节点查询并确定与第一物理内存(即第一虚拟机的物理内存)对应的第二物理内存(即第一节点的一段本地物理内存)中的内存数据是否已全部写入第一物理存储空间。应理解,第二物理内存中的内存数据为第一虚拟机的内存数据。其中,第一物理内存和第二物理内存的对应关系的说明可以参考上文描述,不再赘述。
如果第一节点确定第二物理内存中的内存数据已全部写入第一物理存储空间,则删除本地的目标容器,并向第二节点发送开启目标容器的指示消息,以指示第二节点在完成创建完成第二虚拟机、并完成在第二虚拟机中创建目标容器后,将第二虚拟机的状态设置为运行状态。
如果第一节点确定第二物理内存中的内存数据还未全部写入第一物理存储空间,则计算第二物理内存中还未写入第一物理存储空间的剩余内存数据的大小,并基于预设算法确定将该剩余内存数据全部写入第一物理存储空间需要的预估时长。其中,本申请实施例对该预设算法不作具体限定,例如该预设算法可以是基于当前网络速率和剩余内存数据大小的任意算法。
进一步的,第一节点确定预估时长是否小于第二预设时长。如果第一节点确定预估时长小于或等于第二预设时长,则暂停运行本地的目标容器,并在距离当前时刻的预估时长后,第一节点再次确定第二物理内存中的内存数据是否已全部写入第一物理存储空间。其中,本申请实施例对第二预设时长的具体取值不作限定。
如果在距离当前时刻的预估时长后,第一节点确定第二物理内存中的内存数据已全部写入第一物理存储空间,则删除本地的目标容器,并向第二节点发送开启目标容器的指示消息,以指示第二节点在完成创建完成第二虚拟机、并完成在第二虚拟机中创建目标容器后,将第二虚拟机的状态设置为运行状态。
如果在距离当前时刻的预估时长后,第一节点确定第二物理内存中的内存数据还未全部写入第一物理存储空间,则在距离上述当前时刻的第二预设时长后,再次确定第二物理内存中的内存数据是否已全部写入第一物理存储空间。若在距离上述当前时刻的第二预设时长后,第一节点确定第二物理内存中的内存数据已全部写入第一物理存储空间,则删除本地的目标容器,并向第二节点发送开启目标容器的指示消息,以指示第二节点在完成创建完成第二虚拟机、并完成在第二虚拟机中创建目标容器后,将第二虚拟机的状态设置为运行状态。
这样,用于运行迁移后的目标容器的第二虚拟机和用于运行迁移前的目标容器的第一虚拟机的内存数据和进程状态均相同,且迁移后运行于第二虚拟机的目标容器和迁移前运行于第一虚拟机的目标容器的文件数据也是相同的。结合上文可知,用于运行迁移后的目标容器的第二虚拟机和用于运行迁移前的目标容器的第一虚拟机的资源配置、CPU状态相同。因此,基于本申请方法迁移目标容器时没有造成内存数据丢失,从而不会中断用户业务,且用户无感知。
S206、第二节点更新目标容器的网络路由信息。
可选的,第二节点可以在将第二虚拟机的状态设置为运行状态后,对自身存储的路由信息中用于指示访问目标容器的网络路由信息进行更新。例如,第二节点将原本的访问目标容器的网络路由信息中容器所属节点的地址由第一节点的地址修改为第二节点的地址。
可选的,第二节点可以向容器集群内除第二节点外的部分或全部工作节点发送路由更新消息,以指示接收到该路由更新消息的工作节点更新自身存储的路由信息中指示访问目标容器的网络路由信息。
可选的,第二节点也可以在接收到第一节点或控制节点发送的路由更新消息后,更新自身存储的路由信息中用于指示访问目标容器的网络路由信息。
可以理解,当控制节点在监控到目标容器已迁移至第二节点(例如控制节点监控到第二节点中的第二虚拟机开始正常运行),则向容器集群内的部分或全部工作节点发送路由更新消息,以指示接收到该路由更新消息的工作节点更新自身存储的路由信息中指示访问目标容器的网络路由信息。或者,第一节点在删除本地的目标容器后,更新自身存储的路由信息中用于指示访问目标容器的网络路由信息,以及,向容器集群内除第一节点外的部分或全部工作节点发送路由更新消息,以指示接收到该路由更新消息的工作节点更新自身存储的路由信息中指示访问目标容器的网络路由信息。本申请实施例对此不作限定。
至此,当通过第一种可能的实现方式中所述的方法在第一节点上创建目标容器后,在将该目标容器迁移至容器集群中的另一节点(例如第二节点)时,只需将用于运行迁移前的目标容器的第一节点的第一虚拟机的内存的物理资源(即第一存储节点上的第一物理存储空间),确定为用于运行迁移后的目标容器的第二节点的第二虚拟机的内存的物理资源。也就是说,第一存储节点上的第一物理存储空间不仅作为迁移前运行于第一虚拟机的目标容器的内存,还作为迁移后运行于第二虚拟机的目标容器的内存。也即,迁移前运行于第一虚拟机的目标容器和迁移后运行于第二虚拟机的目标容器共享内存,具体如图6所示。并且,迁移前运行于第一虚拟机的目标容器和迁移后运行于第二虚拟机的目标容器的镜像文件也是相同的。因此,通过第一种可能的实现方式中所述的方法能够实现在迁移容器时不丢失内存数据、文件数据,不中断用户业务、且用户无感知。
在第二种可能的实现方式中,参考图7,图7示出了本申请实施例提供的又一种容器的创建方法的流程示意图。可选的,该方法应用于图1所示的容器集群100,并可以由具有图2所示硬件结构的第一节点执行。在该方法中,第一节点可以先执行实施例一中的S101和S1021,接着,第一节点可以执行步骤S303-S305。
S303、第一节点根据第一虚拟机的内存大小,将第一节点中DPU的第二物理存储空间确定为第一虚拟机的缓存的物理资源。
其中,第一节点中配置有DPU,DPU的说明可以参考上文描述。第二物理存储空间为DPU的存储模块中的一段内存空间,第二物理存储空间可以是普通的内存空间,例如DRAM构成的内存单元。可以看出,第二物理存储空间也是第一节点本地的一段存储空间。
具体的,第一节点在基于第一创建请求中运行目标容器所需资源的资源参数确定出第一虚拟机的内存大小后,基于第一虚拟机的内存大小,将DPU中的一段物理存储空间(即第二物理存储空间)确定为第一虚拟机的缓存的物理资源。其中,本申请实施例对第二物理存储空间的大小不作限定,例如,第二物理存储空间的大小可以大于或等于第一虚拟机的内存大小,也可以小于或等于第一虚拟机的内存大小。
S304、第一节点中的DPU根据第一虚拟机的内存大小,向第一存储节点申请第一虚拟机的内存的物理资源。
具体的,DPU可以根据第一虚拟机的内存大小,向第一存储节点申请一段物理存储空间(即第一物理存储空间),以作为第一虚拟机的内存的物理资源。
其中,第一节点中的DPU根据第一虚拟机的内存大小,向第一存储节点申请第一虚拟机的内存的物理资源的详细说明,可以参考S1022第一节点根据第一虚拟机的内存大小,向第一存储节点申请第一虚拟机的内存的物理资源的过程描述,不再赘述。
可以理解的是,S1022和S303的区别在于执行主体不同,S1022的执行主体为第一节点,例如S1022可以由第一节点的CPU和网卡配合执行,而S303的执行主体为第一节点中的独立单元DPU。DPU的详细说明可以参考上文对图2所示第一节点中的DPU的相关描述,这里不再赘述。
需要说明,当第一节点的DPU接收第一存储节点返回的第一物理存储空间的地址后,存储第一物理存储空间的地址。
还需说明,第一物理存储空间的大小可以大于或等于DPU的第二物理存储空间的大小,也可以小于或等于DPU的第二物理存储空间的大小,对此不作限定。
S305、第一节点基于第一创建请求和确定的物理资源,创建第一虚拟机。
具体的,第一节点可以基于第一创建请求,创建用于创建第一虚拟机的虚拟机进程。其中第一节点创建虚拟机进程的相关说明,可以参考上文S103的相关描述,不再赘述。
进一步的,第一节点可以通过虚拟机进程建立第一物理内存和第二物理存储空间之间的映射关系,以及通过DPU建立第二物理存储空间和第一物理存储空间之间的映射关系,从而实现将第一物理存储空间作为第一虚拟机的内存的物理资源,将第二物理存储空间作为第一虚拟机的缓存的物理资源。其中,第一物理内存、第一物理存储空间以及第二物理存储空间的详细说明可以参考上文,不再赘述。
具体的,第一节点可以通过虚拟机进程建立第一物理内存和该虚拟机进程的第一虚拟内存之间的映射关系。第一节点还通过虚拟机进程建立第一虚拟内存和DPU的一段虚拟空间(以下称为DPU虚拟空间)之间的映射关系,这里,第二物理存储空间即作为DPU虚拟空间的物理存储空间,从而实现了建立第一物理内存和第二物理存储空间之间的映射关系的目的。进而,第一节点中的DPU建立第二物理存储空间和第一物理存储空间之间的映射关系。从而,第一物理存储空间即作为第一虚拟机的内存的物理资源,而第二物理存储空间则作为第一虚拟机的缓存的物理资源。其中,第一虚拟内存是该虚拟机进程的虚拟内存中的一段内存,且第一虚拟内存的地址与第一物理内存的地址一一对应。DPU虚拟空间中包括与第一虚拟内存的地址一一对应的地址,即第一虚拟内存的地址与DPU虚拟空间中的一段空间或全部空间的地址一一对应。第一物理存储空间中包括与DPU虚拟空间的地址一一对应的地址,即DPU虚拟空间的地址和第一物理存储空间中的一段空间或全部空间的地址一一对应。
作为示例,第一节点可以通过虚拟机进程调用mmap接口来建立第一虚拟内存和DPU虚拟空间之间的映射关系,而DPU可以在创建完成的第一虚拟机向DPU虚拟空间写入数据时,为其在第二物理存储空间中分配一段空闲的物理存储空间,以用于存储数据。
可以理解,第一节点的DPU接收并存储第一存储节点返回的第一物理存储空间的地址,即相当于建立了第二物理存储空间和第一物理存储空间之间的映射关系。
另外,第一节点还基于确定出的第一虚拟机所需的CPU资源大小,并通过虚拟机进程为第一虚拟机申请第一节点的CPU资源,不作详述。
这样,在确定第一虚拟机的内存的物理资源、缓存的物理资源以及第一虚拟机的CPU资源后,第一节点可以通过虚拟机进程创建第一虚拟机。例如,第一节点可以在本地预存的虚拟机镜像文件中读取虚拟机的操作系统代码,并通过虚拟机进程在确定的资源中运行该操作系统代码,以完成第一虚拟机的创建。其中,虚拟机镜像文件的相关说明可以参考上文描述,不再赘述。
需要说明,在第一虚拟机创建后,第一节点可以通过虚拟机进程将第一虚拟机的CPU状态信息经第二物理存储空间写入第一物理存储空间中的第二空间。其中,第二空间和CPU状态信息的说明可以参考S1022中的相关描述,这里不作赘述。
具体的,第一节点可以通过虚拟机进程先将第一虚拟机的CPU状态信息写入第一虚拟内存。由于第一虚拟内存对应的实际物理存储空间为第二物理内存(即第一节点的一段本地物理内存)。因此,第一节点通过虚拟机进程实际是将CPU状态信息写入第二物理内存,并进一步将该CPU状态信息写入第一节点的DPU中第二物理存储空间中。这样,DPU基于自身配置的RNIC驱动模块,将第二存储空间中的CPU状态信息通过RDMA操作(例如写操作/发送操作)写入第一存储节点的第一物理空间中的第二空间中,从而实现第一虚拟机的CPU状态信息的记录。
还需说明,在第一虚拟机运行的过程中,当第一节点通过虚拟机进程监控到第一虚拟机的CPU状态发生变化,则通过上述描述的过程将第一虚拟机当前的CPU状态信息经第二物理存储空间写入第一存储节点的第一物理空间中的第二空间中,以更新第二空间中记录的CPU状态信息,从而保证第一虚拟机的最新CPU状态信息被记录于第二空间中。
然后,第一节点执行S104,以完成目标容器的创建,并运行目标容器。
下面参考图8对基于图7所述方法创建的目标容器在处理业务时的数据读写进行说明。如图8所示,第一节点运行有虚拟机进程,虚拟机进程创建第一虚拟机,即第一虚拟机作为虚拟机进程的一个或多个线程运行于虚拟机进程中。进一步的,目标容器运行于第一虚拟机中,目标容器中运行有应用进程1、应用进程2以及应用进程3。
第一种情况:用户设备访问目标容器中的应用进程1,并通过应用进程1向第一虚拟机写入数据1。
这种情况下,第一节点通过应用进程1首先将数据1写入第一物理内存(即第一虚拟机的物理内存)。由于第一物理内存即为虚拟机进程的第一虚拟内存,即第一节点首先将数据1写入与第一物理内存对应第一虚拟内存。
当第一节点向第一虚拟内存写入数据时,第一节点会为第一虚拟内存分配一段实际的物理内存(即第一节点的一段本地物理内存,如图8所示的第二物理内存)。因此,第一节点通过应用进程1将数据1写入第一虚拟内存,实际为将数据1写入第二物理内存。
进一步,基于第一虚拟内存和DPU虚拟空间之间的映射关系,第一节点通过应用进程1将第二物理内存的数据1写入DPU虚拟空间,进而DPU可以在第二物理存储空间中为DPU虚拟空间分配一段地址空间以存储数据1。
然后,DPU基于自身配置的RNIC驱动模块,将第二物理存储空间中的数据1通过RDMA操作(例如write操作/send操作)写入第一存储节点的第一物理存储空间中的第一空间,从而实现第一物理存储空间中的数据和第一物理内存中的数据同步。其中,第一空间的说明可以参考上文描述。
其中,可选的,DPU可以实时的将写入第二物理存储空间的数据1通过RDMA操作写入第一空间。
或者,DPU也可以周期性的将写入第二物理存储空间的数据通过RDMA操作写入第一空间。当然,DPU还可以在写入第二物理存储空间的数据大小超过阈值时,通过RDMA操作将这些数据写入第一空间,本申请实施例对此不作限定。
应理解,在上述的第一节点将数据1写入第一物理存储空间的过程中,对于第一节点中的第一虚拟机为将数据1写入第一物理存储空间而发起的进程而言,当数据1被写入DPU的第二物理存储空间后,第一节点中的第一虚拟机即可确定该进程的数据写入任务已完成。后续,DPU作为第一节点中的独立单元,会通过RDMA操作将写入第二物理存储空间的数据1写入第一物理存储空间。
也就是说,第一节点中的第一虚拟机无需在接收到第一存储节点返回的RDMA操作的响应报文后,才确定进程的数据写入任务已完成。换言之,DPU的第二物理存储空间是作为第一节点将数据写入第一物理存储空间的缓存来用的。对于第一节点而言,当确定数据1已写入第二物理存储空间,即确定数据1已写入第一物理存储空间。这样的话,第一节点中的写入数据的相关进程资源即可被快速释放,从而节省了第一节点的运行用于写数据的进程所需的资源。
第二种情况:用户设备访问目标容器中的应用进程1,并通过应用进程1读取第一虚拟机的数据2。
这种情况下,第一节点中的第一虚拟机通过应用进程1查询与第一物理内存对应的第二物理内存(即第一节点的一段本地物理内存)。当第一节点确定第二物理内存中不存在数据2,第一节点的操作系统触发缺页异常事件。
然后,第一节点中的第一虚拟机进一步查询DPU的第二物理存储空间中是否包括数据2。当第二物理存储空间中包括数据2,则向应用进程2返回数据2。当第二物理存储空间中也不包括数据2,则DPU中的RNIC驱动模块生成用于读取数据2的RDMA读请求,以从第一存储节点的第一物理存储空间中的第一空间读取到数据2,并进一步将数据2返回应用进程1。
在一些可能的情况中,DPU中可以预置热数据算法。这样,DPU基于热数据算法,可以确定出目标容器中的应用进程在近一段时间内访问次数较多的数据(称为热数据)。进而,DPU可以通过RDMA操作将这些热数据预先从第一物理存储空间读取到第二物理存储空间。从而,当目标容器中的应用进程再次访问这些热数据时,DPU可以直接向应用进程返回这些数据,从而提高了应用进程访问数据的效率。
在一些实施例中,当第一节点所在的容器集群中的控制节点(例如图1所示容器集群100中的控制节点10)监控到上述目标容器需要迁移时,控制节点向该容器集群中除第一节点之外的另一个节点发容器送迁移请求,以指示将该目标容器迁移至该另一个节点。
参考图9,图9示出了本申请实施例提供的又一种容器的创建方法的流程示意图。可选的,该方法可以应用于图1所示的容器集群,该方法可以先执行S201-S202,然后执行以下步骤:
S403、第二节点根据容器迁移请求,将第二节点中DPU的第三物理存储空间确定为第二虚拟机的缓存的物理资源。
其中,DPU的说明可以参考上文,不再赘述。
其中,第二节点根据容器迁移请求,将第二节点中DPU的第三物理存储空间确定为第二虚拟机的缓存的物理资源的详细说明,可以参考S303中第一节点根据第一创建请求确定的第一虚拟机的内存大小,将第一节点中DPU的第二物理存储空间确定为第一虚拟机的缓存的物理资源描述,不再赘述。
S404、第二节点的DPU根据容器迁移请求,获取第一物理存储空间的地址。
具体的,第二节点的DPU根据容器迁移请求,获取第一物理存储空间的地址的详细说明,可以参考S203中第二节点根据接收到的容器迁移请求,获取第一物理存储空间的地址的描述,不再赘述。
可以理解,S404和S203的区别在于执行主体不同,S203的执行主体为第二节点,例如S1022可以由第二节点的CPU和网卡配合执行,而S404的执行主体为第二节点中的独立单元DPU。DPU的详细说明可以参考上文对图2所示第一节点中的DPU的相关描述,这里不再赘述。
S405、第二节点根据第三物理存储空间以及第一物理存储空间的地址,创建第二虚拟机。
第二节点可以根据容器迁移请求,先创建用于创建第二虚拟机的虚拟机进程,并通过虚拟机进程建立第二虚拟机的物理内存和第三物理存储空间之间的映射关系,以及,通过第二节点的DPU建立第三物理存储空间和第一物理存储空间的映射关系,从而将第一物理存储空间作为第二虚拟机的内存的物理资源,以及将DPU的第三物理存储空间作为第二虚拟机的缓存的物理资源。
其中,第二节点建立第二虚拟机的物理内存和第三物理存储空间之间的映射关系,以及建立第三物理存储空间和第一物理存储空间的映射关系的详细说明,可以参考S305中第一节点建立第一物理内存和第二物理存储空间之间的映射关系,以及建立第二物理存储空间和第一物理存储空间之间的映射关系的描述,不再赘述。
具体的,第二节点可以还根据容器迁移请求中运行目标容器的资源参数,确定创建第二虚拟机所需资源的资源参数,例如确定创建第二虚拟机所需的CPU资源大小。需要说明,第二节点还可以指示DPU通过RDMA操作(例如读操作)访问第一物理存储空间,以读取第一物理存储空间的第二空间中的CPU状态信息,并基于读取到的CPU状态信息设置第二虚拟机所申请的CPU资源的状态。其中,第二空间和CPU状态信息的说明可以参考S1022中的相关描述,不再赘述。
这样,第二节点可以根据第二虚拟机的内存的物理资源、第二虚拟机的缓存的物理资源、CPU资源后,第二节点通过虚拟机进程创建第二虚拟机。例如,第二节点可以在本地预存的虚拟机镜像文件中读取虚拟机的操作系统代码,并通过虚拟机进程在确定的资源中运行该操作系统代码,以完成第二虚拟机的创建。其中,虚拟机镜像文件的相关说明可以参考上文描述,不再赘述。
此外,第二节点在通过虚拟机进程创建第二虚拟机后,在第二虚拟机运行的过程中,当第二节点通过虚拟机进程监控到第二虚拟机的CPU状态发生变化,则将第二虚拟机当前的CPU状态信息经第三物理存储空间写入第一存储节点的第一物理空间中的第二空间中,以更新第二空间中记录的CPU状态信息,从而保证第二虚拟机的最新CPU状态信息被记录于第二空间中。其中,第二节点将第二虚拟机的CPU状态信息经第三物理存储空间写入第一物理存储空间中的第二空间的说明,可以参考上文S305中第一节点将第一虚拟机当前的CPU状态信息经第二物理存储空间写入第一存储节点的第一物理空间中的第二空间中的相关描述,不作赘述。
S406、第二节点在第二虚拟机中创建目标容器。
第二节点在第二虚拟机中创建目标容器,以完成目标容器的迁移。其中,S406的详细说明可以参考上文S205的描述。
需要说明的是,在S406中,第一节点查询并确定DPU的第二物理存储空间中第一虚拟机的内存数据是否已全部写入第一物理存储空间,以确定是否向第二节点发送开启目标的指示消息。
其中,第一节点查询并确定DPU的第二物理存储空间中第一虚拟机的内存数据是否已全部写入第一物理存储空间,以确定是否向第二节点发送开启目标容器的指示消息的详细说明,可以参考S205中第一节点查询并确定第二物理内存中的内存数据是否已全部写入第一物理存储空间,以确定是否向第二节点发送开启目标容器的指示消息的描述,不再赘述。
然后,第二节点执行S206,从而完成了目标容器的迁移。
至此,当通过第二种可能的实现方式中所述的方法在第一节点上创建目标容器后,在将该目标容器迁移至容器集群中的另一节点(例如第二节点)时,只需将用于运行迁移前的目标容器的第一节点的第一虚拟机的内存的物理资源(即第一存储节点上的第一物理存储空间),确定为用于运行迁移后的目标容器的第二节点的第二虚拟机的内存的物理资源。也就是说,第一存储节点上的第一物理存储空间不仅作为迁移前运行于第一虚拟机的目标容器的内存,还作为迁移后运行于第二虚拟机的目标容器的内存。也即,迁移前运行于第一虚拟机的目标容器和迁移后运行于第二虚拟机的目标容器共享内存,具体如图6所示。并且,迁移前运行于第一虚拟机的目标容器和迁移后运行于第二虚拟机的目标容器的镜像文件也是相同的。因此,通过第二种可能的实现方式中所述的方法能够实现在迁移容器时不丢失内存数据、文件数据,不中断用户业务、且用户无感知。
此外,在第二种可能的实现方式中,由于第一节点和第二节点的DPU中可以预先缓存目标容器的热数据,因此当目标容器中的应用进程访问这些热数据时,DPU可以直接向应用进程返回这些数据,从而提高了应用进程访问数据的效率。
在第三种可能的实现方式中,为进一步提高容器迁移的效率,参考图10,图10示出了本申请实施例提供的又一种容器的创建方法的流程示意图。可选的,该方法应用于图1所示的容器集群100。该方法可以在执行图3或图7所示S101-S104的方法的基础上,继续执行以下步骤:
S501、第三节点获取用于指示创建目标容器第二创建请求。
其中,该目标容器即为第一节点基于图3或图7所示方法创建的目标容器。第三节点是第一节点所在容器集群中除第一节点外的任一个工作节点。作为示例,假设第一节点是图1所示容器集群100中的工作节点111,第三节点可以是图1所示容器集群100中的工作节点113。
第三节点获取用于指示创建目标容器第二创建请求的说明,可以参考上文S101中第一节点获取第一创建请求的描述,第二创建请求的说明可以参考上文S101中第一创建请求的描述,不再赘述。
S502、第三节点基于第二创建请求,创建目标容器。
其中,第三节点可以先基于第二创建请求创建用于运行目标容器的第三虚拟机,并在第三虚拟机中创建目标容器。
具体的,第三节点基于第二创建请求创建目标容器的详细说明,可以参考图3所示方法中第一节点根据第一创建请求创建目标容器的描述,或者参考图7所示方法中第一节点根据第一创建请求创建目标容器的描述,不再赘述。
需要说明的是,第三虚拟机的内存的物理资源为第一物理存储空间,即第三节点中用于运行目标容器的第三虚拟机的内存的物理资源,和第一节点中用于运行目标容器的第一虚拟机的内存的物理资源相同。或者可以理解为,第三节点中用于运行目标容器的第三虚拟机和第一节点中用于运行目标容器的第一虚拟机共享相同的内存物理资源。
还需要说明,第三节点在创建完成目标容器后,将运行目标容器的第三虚拟机的状态设置为暂停状态。这样的话,第三节点中运行于第三虚拟机的目标容器,即可作为第一节点中运行于第一虚拟机的目标容器的备份容器。也即,第一节点中运行于第一虚拟机的目标容器为主目标容器,第三节点中运行于第三虚拟机的目标容器备目标容器。
还需说明,本申请实施例对第一节点创建主目标容器和第三节点创建备目标容器的先后顺序不作具体限定。例如,第一节点可以先基于图3或图7所述的方法创建主目标容器,第三节点再基于图10所述的方法创建备目标容器。或者,第一节点基于图3或图7所述的方法创建主目标容器的同时,第三节点基于图10所述的方法创建备目标容器。不限于此。
至此,本申请实施例即完成了创建主、备目标容器。
在一些实施例中,当控制节点监控到第一节点中的目标容器需要迁移时:
一种可能的实现方式中,控制节点向第三节点发送开启目标容器的指示消息。作为响应,第三节点将用于运行目标容器的第三虚拟机的状态设置为运行状态。从而,作为备目标容器的第三虚拟机中的目标容器开始处理业务。
可选的,在第三节点将第三虚拟机的状态设置为运行状态之前,第三节点还可以通过RDMA操作从第一物理存储空间的第二空间中读取第一虚拟机最新的CPU状态信息,以用于更新第三虚拟机的CPU状态。例如,第三节点可以直接通过RDMA操作从第一物理存储空间的第二空间中读取第一虚拟机最新的CPU状态信息,或者,第三节点的DPU通过RDMA操作从第一物理存储空间的第二空间中读取第一虚拟机最新的CPU状态信息,对此不作限定。
可选的,控制节点还向第一节点发送暂停/删除目标容器的指示消息。作为响应,第一节点删除本地的目标容器。
另一种可能的实现方式中,控制节点向第一节点发送迁移目标容器的指示消息。作为响应,第一节点查询并确定本地存储的第一虚拟机的内存数据是否已全部写入第一物理存储空间,以确定是否向第三节点发送开启目标容器的指示消息。其中,第一节点确定本地存储的第一虚拟机的内存数据是否已全部写入第一物理存储空间的说明,可以参考S205中第一节点查询并确定第二物理内存中的内存数据是否已全部写入第一物理存储空间的描述,不再赘述。
当第三节点接收到第一节点发送的开启目标容器的指示消息后,则将第三虚拟机的状态设置为运行状态。从而,作为备目标容器的第三虚拟机中的目标容器开始处理业务。
可选的,在第三节点将第三虚拟机的状态设置为运行状态之前,第三节点还可以通过RDMA操作从第一物理存储空间的第二空间中读取第一虚拟机最新的CPU状态信息,以用于更新第三虚拟机的CPU状态。
进一步的,在第三节点将第三虚拟机的状态设置为运行状态之后,第三节点和第一节点更新访问目标容器的网络路由信息,以完成将目标容器从第一节点迁移至第三节点。或者,在第一节点向第三节点发送开启目标容器的指示消息后,第一节点和第三节点更新访问目标容器的网络路由信息,以完成将目标容器从第一节点迁移至第三节点。
其中,第三节点、第一节点更新访问目标容器的网络路由信息的说明,可以参考S206中第二节点更新目标容器的网络路由信息的描述,不再赘述。
可以看出,通过该实施例提供的方法进行容器迁移时,无需在控制节点指示迁移容器时,再新建用于运行目标容器的虚拟机,而是直接启用已预先创建好的用于运行备份容器的虚拟机,从而快速的实现了在不丢失内存数据、不中断用户业务、且用户无感知的情况下高效地完成容器的迁移。
此外,在该实施例中,当目标容器从第一节点迁移至第三节点,第三节点中运行于第三虚拟机的目标容器即升级为主目标容器,并用于运行应用进程以处理用户业务。然后,第三节点所属容器集群中除第三节点外(或者除第三节点和第一节点外)的任一个工作节点,可以获取指示创建目标容器的创建请求,以创建该主目标容器的备目标容器。对此不作详述。
至此,当通过第三种可能的实现方式中所述的方法在第一节点上创建主目标容器、且在第三节点上创建备目标容器后,由于主、备目标容器共享内存(即共享第一存储节点的第一物理存储空间),因此本申请实施例可以通过切换主、备目标容器的运行状态,从而能够快速的实现在不丢失内存数据、不中断用户业务、且用户无感知的情况下完成容器的迁移。
综上,通过本申请实施例提供的容器创建方法所创建的容器在迁移时,通过令迁移前后的容器共享存储节点中的一段物理存储空间,从而可以实现在不丢失内存数据、不中断用户业务、且用户无感知的情况下完成容器的迁移。
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。
为了实现上述功能,如图11所示,图11示出了本申请实施例提供的一种容器的创建装置110的结构示意图。容器的创建装置110应用于图1所示容器集群中的第一节点,容器的创建装置110可以用于执行上述的创建容器的方法,例如用于执行图3、图5、图7、图9或图10所示方法中由第一节点执行的部分。
其中,容器的创建装置110可以包括获取单元111和处理单元112。
获取单元111,用于获取用于指示创建目标容器的第一创建请求。处理单元112,用于基于第一创建请求创建第一虚拟机,以及,在第一虚拟机中运行目标容器。其中,目标容器为安全容器,第一创建请求包括运行该目标容器的第一虚拟机的资源参数,第一虚拟机的内存的物理资源为第一存储节点中的第一物理存储空间。
作为示例,结合图3,获取单元111可以用于执行S101,处理单元112可以用于执行S103和S104。
可选的,上述的第一节点通过RDMA访问第一物理存储空间。
可选的,上述的第一物理存储空间为持久化内存介质。
可选的,处理单元112还用于在基于第一创建请求创建第一虚拟机之前:根据第一创建请求确定第一虚拟机的内存大小;根据第一虚拟机的内存大小,向第一存储节点申请第一物理存储空间,并将第一物理存储空间确定为第一虚拟机的内存的物理资源。其中,第一物理存储空间大于或等于第一虚拟机的内存大小。
作为示例,结合图3,处理单元112可以用于执行S102。
可选的,处理单元112还用于:将第一节点中的DPU的第二物理存储空间确定为第一虚拟机的缓存的物理资源;指示DPU建立第二物理存储空间和第一物理存储空间之间的映射关系。其中,第一节点中的DPU用于通过RDMA访问第一物理存储空间,并用于将第二物理存储空间的数据写入第一物理存储空间。
作为示例,结合图7,处理单元112可以用于执行S303。
可选的,第一节点中的DPU还用于从第一物理存储空间读取目标容器的热数据。
可选的,第一节点是上述容器集群中的任一个节点,该容器集群中还包括第二节点,当目标容器被迁移至第二节点,第二节点中运行目标容器的第二虚拟机的内存的物理资源为第一物理存储空间。
可选的,第一节点是上述容器集群中的任一个节点,该容器集群中还包括第三节点,第三节点用于创建目标容器的备份容器,第三节点上运行备份容器的第三虚拟机为暂停状态,第三虚拟机的内存的物理资源为第一物理存储空间。
可选的,当第一虚拟机为故障或暂停状态,上述第三虚拟机为运行状态。
可选的,处理单元112,还用于当目标容器被迁移至容器集群中的另一节点后,更新访问目标容器的网络路由信息。
可选的,容器的创建装置110还包括:发送单元113,用于当目标容器被迁移至容器集群中的另一节点后,向容器集群中除第一节点外的其他节点发送路由更新消息,以使其他节点更新访问目标容器的网络路由信息。
关于上述可选方式的具体描述可以参见前述的方法实施例,此处不再赘述。此外,上述提供的任一种容器的创建装置110的解释以及有益效果的描述均可参考上述对应的方法实施例,不再赘述。
作为示例,结合图2,容器的创建装置110中的获取单元111和发送单元113所实现的功能可以通过图2中的网络接口203实现,或者,获取单元111所实现的功能可以通过图2所示第一节点的输入接口(例如键盘、触摸屏、鼠标等输入接口)实现,处理单元112实现的功能可以通过图2中的处理器201实现。
如图12所示,图12示出了本申请实施例提供的一种容器的创建装置120的结构示意图。容器的创建装置120应用于图1所示容器集群中的第二节点,容器的创建装置120可以用于执行上述的创建容器的方法,例如用于执行图5或图9所示方法中由第二节点执行的部分。
其中,容器的创建装置120可以包括接收单元121和处理单元122。
接收单元121,用于接收容器迁移请求,该容器迁移请求指示将运行于第一节点中第一虚拟机的目标容器迁移至第二节点,以及指示第二节点创建用于运行目标容器的第二虚拟机,该目标容器为安全容器。处理单元122,用于将第一存储节点中的第一物理存储空间确定为第二虚拟机的内存的物理资源;基于第二虚拟机的内存的物理资源,创建第二虚拟机;以及,在第二虚拟机中运行目标容器。其中,第一物理存储空间为第一虚拟机的内存的物理资源。
作为示例,结合图5,接收单元121可以用于执行S202,处理单元122可以用于执行S203、S204和S205。
可选的,上述容器迁移请求中包括目标容器的ID,则容器的创建装置120还包括:发送单元123,用于向第一存储节点发送包括目标容器的ID的内存请求消息,该内存请求消息用于请求获取与目标容器的ID具有对应关系的第一物理存储空间的地址。接收单元121,还用于接收第一存储节点返回的第一物理存储空间的地址。处理单元123,具体用于将接收到的地址所指示的第一物理存储空间确定为第二虚拟机的内存的物理资源。
可选的,上述容器迁移请求中包括第一虚拟机的ID,则容器的创建装置120还包括:发送单元123,用于向第一存储节点发送包括第一虚拟机的ID的内存请求消息,该内存请求消息用于请求获取与第一虚拟机的ID具有对应关系的第一物理存储空间的地址。接收单元122,用于接收第一存储节点返回的第一物理存储空间的地址。处理单元123,具体用于将接收到的地址所指示的第一物理存储空间确定为第二虚拟机的内存的物理资源。
关于上述可选方式的具体描述可以参见前述的方法实施例,此处不再赘述。此外,上述提供的任一种容器的创建装置120的解释以及有益效果的描述均可参考上述对应的方法实施例,不再赘述。
作为示例,结合图2,容器的创建装置120中的接收单元121和发送单元123所实现的功能可以通过图2中的网络接口203实现,处理单元122实现的功能可以通过图2中的处理器201实现。
本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
需要说明的是,图11或图12中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,还可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
本申请实施例还提供一种容器集群,该容器集群包括第一节点和第二节点。其中,第一节点用于执行上文所述方法中由第一节点执行的部分,例如用于执行图3所示方法以创建目标容器。第二节点用于执行上文所述方法中由第二节点执行的部分,例如执行图5所示方法,以实现将运行于第一节点的目标容器迁移至第二节点。
本申请实施例还提供一种芯片系统130,如图13所示,该芯片系统130包括至少一个处理器和至少一个。作为示例,当该芯片系统130包括一个处理器和一个接口电路时,则该一个处理器可以是图13中实线框所示的处理器131(或者是虚线框所示的处理器131),该一个接口电路可以是图13中实线框所示的接口电路132(或者是虚线框所示的接口电路132)。当该芯片系统130包括两个处理器和两个接口电路时,则该两个处理器包括图13中实线框所示的处理器131和虚线框所示的处理器131,该两个接口电路包括图13中实线框所示的接口电路132和虚线框所示的接口电路132。对此不作限定。
处理器131和接口电路132可通过线路互联。例如,接口电路132可用于接收信号(例如获取上文所述的第一创建请求或容器迁移请求等)。又例如,接口电路132可用于向其它模块(例如处理器131)发送信号。示例性的,接口电路132可读取存储器中存储的指令,并将该指令发送给处理器131。当该指令被处理器131执行时,可使得容器的创建装置执行上述实施例中的各个步骤。当然,该芯片系统130还可以包含其他分立器件,本申请实施例对此不作具体限定。
本申请实施例还提供一种计算机程序产品,以及用于存储该计算机程序产品的计算机可读存储介质。
该计算机程序产品可以包括一个或多个程序指令,当该一个或多个程序指令被一个或多个处理器运行时可以提供以上针对图3、图5、图7、图9或图10描述的功能或者部分功能。因此,例如,参考图3中S101~S104的一个或多个特征可以由该计算机程序产品中的一个或多个指令来承担。
在一些示例中,诸如针对图3、图5、图7、图9或图10描述的容器的创建装置可以被配置为,响应于通过计算机可读存储介质中存储的一个或多个程序指令,提供各种操作、功能、或者动作。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上和执行计算机执行指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (31)

1.一种容器的创建方法,其特征在于,应用于第一节点;所述方法包括:
获取用于指示创建目标容器的第一创建请求,所述目标容器为安全容器,所述第一创建请求包括运行所述目标容器的第一虚拟机的资源参数;
基于所述第一创建请求创建所述第一虚拟机,所述第一虚拟机的内存的物理资源为第一存储节点中的第一物理存储空间;
在所述第一虚拟机中运行所述目标容器。
2.根据权利要求1所述的方法,其特征在于,所述第一节点通过远程直接内存访问RDMA访问所述第一物理存储空间。
3.根据权利要求1或2所述的方法,其特征在于,第一物理存储空间为持久化内存介质。
4.根据权利要求1-3中任一项所述的方法,其特征在于,在所述基于所述第一创建请求创建所述第一虚拟机之前,所述方法还包括:
根据所述第一创建请求,确定所述第一虚拟机的内存大小;
根据所述第一虚拟机的内存大小,向所述第一存储节点申请所述第一物理存储空间,所述第一物理存储空间大于或等于所述第一虚拟机的内存大小;
将所述第一物理存储空间确定为所述第一虚拟机的内存的物理资源。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
将所述第一节点中的数据处理单元DPU的第二物理存储空间确定为所述第一虚拟机的缓存的物理资源;
指示所述DPU建立所述第二物理存储空间和所述第一物理存储空间之间的映射关系;所述DPU用于通过RDMA访问所述第一物理存储空间,并用于将所述第二物理存储空间的数据写入所述第一物理存储空间。
6.根据权利要求5所述的方法,其特征在于,所述DPU还用于从所述第一物理存储空间读取所述目标容器的热数据。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述第一节点是容器集群中的任一个节点,所述容器集群中还包括第二节点,则当所述目标容器被迁移至所述第二节点,所述第二节点中运行所述目标容器的第二虚拟机的内存的物理资源为所述第一物理存储空间。
8.根据权利要求1-6中任一项所述的方法,其特征在于,所述第一节点是容器集群中的任一个节点,所述容器集群中还包括第三节点,所述第三节点用于创建所述目标容器的备份容器,所述第三节点上运行所述备份容器的第三虚拟机为暂停状态,所述第三虚拟机的内存的物理资源为所述第一物理存储空间。
9.根据权利要求8所述的方法,其特征在于,当所述第一虚拟机为故障或暂停状态,所述第三虚拟机为运行状态。
10.根据权利要求1-9中任一项所述的方法,其特征在于,所述方法还包括:
当所述目标容器被迁移至所述容器集群中的另一节点后,更新访问所述目标容器的网络路由信息。
11.根据权利要求1-10中任一项所述的方法,其特征在于,所述方法还包括:
当所述目标容器被迁移至所述容器集群中的另一节点后,向所述容器集群中的其他节点发送路由更新消息,以使所述其他节点更新访问所述目标容器的网络路由信息。
12.一种容器的创建方法,其特征在于,应用于第二节点;所述方法包括:
接收容器迁移请求;所述容器迁移请求指示将运行于第一节点中第一虚拟机的目标容器迁移至所述第二节点,以及指示所述第二节点创建用于运行所述目标容器的第二虚拟机,所述目标容器为安全容器;
将第一存储节点中的第一物理存储空间确定为所述第二虚拟机的内存的物理资源;所述第一物理存储空间为所述第一虚拟机的内存的物理资源;
基于所述第二虚拟机的内存的物理资源,创建所述第二虚拟机;
在所述第二虚拟机中运行所述目标容器。
13.根据权利要求12所述的方法,其特征在于,所述容器迁移请求中包括所述目标容器的身份标识号ID,则所述将第一存储节点中的第一物理存储空间确定为所述第二虚拟机的内存的物理资源包括:
向所述第一存储节点发送内存请求消息,所述内存请求消息包括所述目标容器的ID,所述内存请求消息用于请求获取与所述目标容器的ID具有对应关系的所述第一物理存储空间的地址;
接收所述第一存储节点返回的所述第一物理存储空间的地址;
将所述地址指示的所述第一物理存储空间确定为所述第二虚拟机的内存的物理资源。
14.根据权利要求12所述的方法,其特征在于,所述容器迁移请求中包括所述第一虚拟机的身份标识号ID,则所述将第一存储节点中的第一物理存储空间确定为所述第二虚拟机的内存的物理资源包括:
向所述第一存储节点发送内存请求消息,所述内存请求消息包括所述第一虚拟机的ID,所述内存请求消息用于请求获取与所述第一虚拟机的ID具有对应关系的所述第一物理存储空间的地址;
接收所述第一存储节点返回的所述第一物理存储空间的地址;
将所述地址指示的所述第一物理存储空间确定为所述第二虚拟机的内存的物理资源。
15.一种容器的创建装置,其特征在于,应用于第一节点;所述装置包括:
获取单元,用于获取用于指示创建目标容器的第一创建请求,所述目标容器为安全容器,所述第一创建请求包括运行所述目标容器的第一虚拟机的资源参数;
处理单元,用于基于所述第一创建请求创建所述第一虚拟机,所述第一虚拟机的内存的物理资源为第一存储节点中的第一物理存储空间;以及,在所述第一虚拟机中运行所述目标容器。
16.根据权利要求15所述的装置,其特征在于,所述第一节点通过远程直接内存访问RDMA访问所述第一物理存储空间。
17.根据权利要求15或16所述的装置,其特征在于,第一物理存储空间为持久化内存介质。
18.根据权利要求15-17中任一项所述的装置,其特征在于,所述处理单元还用于在基于所述第一创建请求创建所述第一虚拟机之前,
根据所述第一创建请求,确定所述第一虚拟机的内存大小;
根据所述第一虚拟机的内存大小,向所述第一存储节点申请所述第一物理存储空间,所述第一物理存储空间大于或等于所述第一虚拟机的内存大小;
将所述第一物理存储空间确定为所述第一虚拟机的内存的物理资源。
19.根据权利要求18所述的装置,其特征在于,所述处理单元还用于,
将所述第一节点中的数据处理单元DPU的第二物理存储空间确定为所述第一虚拟机的缓存的物理资源;
指示所述DPU建立所述第二物理存储空间和所述第一物理存储空间之间的映射关系;所述DPU用于通过RDMA访问所述第一物理存储空间,并用于将所述第二物理存储空间的数据写入所述第一物理存储空间。
20.根据权利要求19所述的装置,其特征在于,所述DPU还用于从所述第一物理存储空间读取所述目标容器的热数据。
21.根据权利要求15-20中任一项所述的装置,其特征在于,所述第一节点是容器集群中的任一个节点,所述容器集群中还包括第二节点,则当所述目标容器被迁移至所述第二节点,所述第二节点中运行所述目标容器的第二虚拟机的内存的物理资源为所述第一物理存储空间。
22.根据权利要求15-20中任一项所述的装置,其特征在于,所述第一节点是容器集群中的任一个节点,所述容器集群中还包括第三节点,所述第三节点用于创建所述目标容器的备份容器,所述第三节点上运行所述备份容器的第三虚拟机为暂停状态,所述第三虚拟机的内存的物理资源为所述第一物理存储空间。
23.根据权利要求22所述的装置,其特征在于,当所述第一虚拟机为故障或暂停状态,所述第三虚拟机为运行状态。
24.根据权利要求15-23中任一项所述的装置,其特征在于,
所述处理单元,还用于当所述目标容器被迁移至所述容器集群中的另一节点后,更新访问所述目标容器的网络路由信息。
25.根据权利要求15-24中任一项所述的装置,其特征在于,所述装置还包括:
发送单元,用于当所述目标容器被迁移至所述容器集群中的另一节点后,向所述容器集群中的其他节点发送路由更新消息,以使所述其他节点更新访问所述目标容器的网络路由信息。
26.一种容器的创建装置,其特征在于,应用于第二节点;所述装置包括:
接收单元,用于接收容器迁移请求;所述容器迁移请求指示将运行于第一节点中第一虚拟机的目标容器迁移至所述第二节点,以及指示所述第二节点创建用于运行所述目标容器的第二虚拟机,所述目标容器为安全容器;
处理单元,用于将第一存储节点中的第一物理存储空间确定为所述第二虚拟机的内存的物理资源;基于所述第二虚拟机的内存的物理资源,创建所述第二虚拟机;以及,在所述第二虚拟机中运行所述目标容器;其中,所述第一物理存储空间为所述第一虚拟机的内存的物理资源。
27.根据权利要求26所述的装置,其特征在于,所述容器迁移请求中包括所述目标容器的身份标识号ID,则所述装置还包括:
发送单元,用于向所述第一存储节点发送内存请求消息,所述内存请求消息包括所述目标容器的ID,所述内存请求消息用于请求获取与所述目标容器的ID具有对应关系的所述第一物理存储空间的地址;
所述接收单元,还用于接收所述第一存储节点返回的所述第一物理存储空间的地址;
所述处理单元,具体用于将所述地址指示的所述第一物理存储空间确定为所述第二虚拟机的内存的物理资源。
28.根据权利要求26所述的装置,其特征在于,所述容器迁移请求中包括所述第一虚拟机的身份标识号ID,则所述装置还包括:
发送单元,用于向所述第一存储节点发送内存请求消息,所述内存请求消息包括所述第一虚拟机的ID,所述内存请求消息用于请求获取与所述第一虚拟机的ID具有对应关系的所述第一物理存储空间的地址;
所述接收单元,用于接收所述第一存储节点返回的所述第一物理存储空间的地址;
所述处理单元,具体用于将所述地址指示的所述第一物理存储空间确定为所述第二虚拟机的内存的物理资源。
29.一种容器的创建装置,其特征在于,包括:存储器、网络接口、以及一个或多个处理器,所述一个或多个处理器通过所述网络接口接收或发送数据,所述一个或多个处理器被配置为读取存储在所述存储器中的程序指令,以执行如权利要求1-11或12-14中任一项所述的方法。
30.一种容器集群,其特征在于,所述容器集群包括第一节点和第二节点,
所述第一节点用于执行如权利要求1-11中任一项所述的方法,以创建目标容器;
所述第二节点用于执行如权利要求12-14中任一项所述的方法,以将运行于所述第一节点的所述目标容器迁移至所述第二节点。
31.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括程序指令,当所述程序指令在计算机或处理器上运行时,使得所述计算机或所述处理器执行权利要求1-11或12-14中任一项所述的方法。
CN202210622548.4A 2022-06-02 2022-06-02 一种容器的创建方法、装置及存储介质 Pending CN117215712A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210622548.4A CN117215712A (zh) 2022-06-02 2022-06-02 一种容器的创建方法、装置及存储介质
PCT/CN2023/087179 WO2023231572A1 (zh) 2022-06-02 2023-04-08 一种容器的创建方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210622548.4A CN117215712A (zh) 2022-06-02 2022-06-02 一种容器的创建方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN117215712A true CN117215712A (zh) 2023-12-12

Family

ID=89026859

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210622548.4A Pending CN117215712A (zh) 2022-06-02 2022-06-02 一种容器的创建方法、装置及存储介质

Country Status (2)

Country Link
CN (1) CN117215712A (zh)
WO (1) WO2023231572A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354076B (zh) * 2015-10-23 2019-01-25 北京云端光科技术有限公司 一种应用部署方法及装置
CN109885377B (zh) * 2018-11-23 2023-04-28 中国银联股份有限公司 统一资源调度协调器及其创建虚拟机和/或容器的方法、统一资源调度系统
CN113900773B (zh) * 2021-10-25 2024-04-09 北京计算机技术及应用研究所 一种基于国产平台虚拟机和容器的超融合调度方法
CN114185641B (zh) * 2021-11-11 2024-02-27 北京百度网讯科技有限公司 虚拟机冷迁移方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
WO2023231572A1 (zh) 2023-12-07

Similar Documents

Publication Publication Date Title
US11226847B2 (en) Implementing an application manifest in a node-specific manner using an intent-based orchestrator
CN107209710B (zh) 节点系统、服务器设备、缩放控制方法和程序
US8775755B2 (en) Peer-to-peer transcendent memory
US10838829B2 (en) Method and apparatus for loading data from a mirror server and a non-transitory computer readable storage medium
EP3200073B1 (en) Method, apparatus and system for migrating virtual machine backup information
US11809732B2 (en) Method and apparatus of data migration based on use algorithm
US11392363B2 (en) Implementing application entrypoints with containers of a bundled application
US20190235777A1 (en) Redundant storage system
US20210405902A1 (en) Rule-based provisioning for heterogeneous distributed systems
US10541862B2 (en) VNF processing policy determining method, apparatus, and system
CN110096220B (zh) 一种分布式存储系统、数据处理方法和存储节点
US10620871B1 (en) Storage scheme for a distributed storage system
CN110119304B (zh) 一种中断处理方法、装置及服务器
CN111147274B (zh) 为集群解决方案创建高度可用的仲裁集的系统和方法
CA3129982A1 (en) Method and system for accessing distributed block storage system in kernel mode
US8621260B1 (en) Site-level sub-cluster dependencies
US20190215281A1 (en) Fenced Clone Applications
US20230273801A1 (en) Method for configuring compute mode, apparatus, and computing device
CN112631994A (zh) 数据迁移方法及系统
CN117215712A (zh) 一种容器的创建方法、装置及存储介质
CN115794368A (zh) 业务系统、内存管理方法及装置
CN115202803A (zh) 一种故障处理方法及装置
CN112711469A (zh) 云主机迁移方法、装置、计算机设备和存储介质
CN117519908B (zh) 一种虚拟机热迁移方法、计算机设备及介质
US10761874B2 (en) Dynamic virtual input/output and NUMA node management

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