一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于可编程容器内核的容器内核升级方法及装置与流程

2022-12-10 13:21:10 来源:中国专利 TAG:
1.本说明书实施例通常涉及操作系统领域,尤其涉及基于可编程容器内核的容器内核升级方法及装置。
背景技术
::2.应用容器(也称为安全容器)是一种运行时技术。在应用容器技术中,为每个应用程序提供独立的应用容器内核,该应用容器内核是轻量级操作系统,可以为应用容器中的容器应用程序提供操作系统执行环境,但将容器应用程序的执行与主机操作系统隔离开,由此避免容器应用程序直接访问主机资源,从而可以在应用容器与主机之间或应用容器之间提供隔离保护。在应用容器内核为容器应用程序提供系统服务时,如果应用容器内核出现操作系统漏洞和/或新增新功能,则需要进行应用容器内核升级。技术实现要素:3.鉴于上述,本说明书实施例提供基于可编程容器内核的容器内核升级方法及装置。利用该容器内核升级方法及装置,可以利用可编程容器内核来进行容器内核升级,从而在容器内核升级时实现对容器内核的定制化修改。4.根据本说明书实施例的一个方面,提供一种基于可编程容器内核的容器内核升级方法,包括:响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器;保存所述应用容器的当前容器状态数据,所述当前容器状态数据包括所述第一容器内核所对应的第一容器内核状态数据以及在所述应用容器内运行的所有应用程序的应用程序状态数据,并且具有所述第一容器内核所定义的第一数据结构;利用用于容器内核升级的第二容器内核重启所述应用容器,所述重启后的应用容器的重启容器状态数据包括在所述应用容器重启时所述第二容器内核所对应的第二容器内核状态数据,并且具有所述第二容器内核所定义的第二数据结构;使用所保存的当前容器状态数据更新所述重启容器状态数据的数据结构中的对应数据字段;以及响应于容器状态数据更新完成,在所述重启后的应用容器中恢复运行所述被冻结的应用容器中的容器应用程序。5.可选地,在上述方面的一个示例中,保存所述应用容器的当前容器状态数据可以包括:将所述当前容器状态数据以容器快照的形式保存在数据文件中,所述容器快照通过对所述当前容器状态数据进行数据序列化而生成,使用所保存的当前容器状态数据更新所述重启容器状态数据包括:对所述数据文件中的容器快照进行数据反序列化以恢复所保存的当前容器状态数据;以及利用所恢复的当前容器状态数据更新所述重启容器状态数据的数据结构中的对应数据字段。6.可选地,在上述方面的一个示例中,所述当前容器状态数据和所述重启容器状态数据被组织为数据树。利用所恢复的当前容器状态数据更新所述重启容器状态数据的数据结构中的对应数据字段可以包括:自所述重启容器状态数据的数据树的根数据节点起,自上而下逐数据节点执行下述更新过程:确定当前数据节点在所述当前容器状态数据的数据树中是否存在对应数据节点;响应于所述当前容器状态数据的数据树中不存在对应数据节点,不对所述当前数据节点的数据字段部分进行更新处理,响应于所述当前容器状态数据的数据树中存在对应数据节点,确定所述当前数据节点相对于所述对应数据节点是否发生数据字段变化,响应于所述当前数据节点相对于所述对应数据节点未发生数据字段变化,利用所述对应数据节点的数据字段信息直接更新所述当前数据节点的数据字段信息,响应于所述当前数据节点相对于所述对应数据节点发生数据字段变化,使用所述对应数据节点的数据字段信息来根据指定策略更新所述当前数据节点的数据字段信息。7.可选地,在上述方面的一个示例中,所述数据文件包括内存文件或磁盘文件。8.可选地,在上述方面的一个示例中,在保存所述应用容器的当前容器状态数据之前,所述容器内核升级方法还可以包括:停止所述应用容器的驱动缓存的报文接收功能,并且将所述驱动缓存中的报文上交给所述第一容器内核。9.可选地,在上述方面的一个示例中,在保存所述应用容器的当前容器状态数据保存之前,所述容器内核升级方法还可以包括:丢弃所述应用容器的全部缓存数据。10.可选地,在上述方面的一个示例中,在保存所述应用容器的当前容器状态数据之前,所述容器内核升级方法还可以包括:针对所述应用容器的当前容器状态数据中的每个容器组件所对应的容器状态数据进行异常检测;和/或记录所述应用容器的系统启动时间和当前实时时间。11.可选地,在上述方面的一个示例中,在使用所保存的当前容器状态数据更新所述重启容器状态数据后,所述容器内核升级方法还可以包括:重新打开在所述当前容器状态数据中被设置为打开的主机文件。12.可选地,在上述方面的一个示例中,在使用所保存的当前容器状态数据更新所述重启容器状态数据后,所述容器内核升级方法还可以包括:确定所述应用容器的系统启动时间;和/或启动所述应用容器的硬件收发功能。13.根据本说明书的实施例的另一方面,提供一种基于可编程容器内核的容器内核升级装置,包括:容器冻结单元,响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器;容器状态数据保存单元,保存所述应用容器的当前容器状态数据,所述当前容器状态数据包括所述第一容器内核所对应的第一容器内核状态数据以及在所述应用容器内运行的所有应用程序的应用程序状态数据,并且具有所述第一容器内核所规定的第一数据结构;容器重启单元,利用用于容器内核升级的第二容器内核重启所述应用容器,所述重启后的应用容器的重启容器状态数据包括在所述应用容器重启时所述第二容器内核所对应的第二容器内核状态数据,并且具有所述第二容器内核所规定的第二数据结构;容器状态数据更新单元,使用所保存的当前容器状态数据更新所述重启容器状态数据的数据结构中的对应数据字段;以及应用程序运行恢复单元,响应于容器状态数据更新完成,在所述重启后的应用容器中恢复运行所述被冻结的应用容器中的容器应用程序。14.可选地,在上述方面的一个示例中,所述容器状态数据保存单元将所述当前容器状态数据以容器快照的形式保存在数据文件中,所述容器快照通过对所述当前容器状态数据进行数据序列化而生成。所述容器状态数据更新单元可以包括:容器状态数据恢复模块,对所述数据文件中的容器快照进行数据反序列化以恢复所述当前容器状态数据;以及容器状态数据更新模块,利用所述当前容器状态数据更新所述重启容器状态数据的数据结构中的对应数据字段。15.可选地,在上述方面的一个示例中,所述当前容器状态数据和所述重启容器状态数据被组织为数据树。所述容器状态数据更新模块被配置为:自所述重启容器状态数据的数据树的根数据节点起,自上而下逐数据节点执行下述更新过程:确定当前数据节点在所述当前容器状态数据的数据树中是否存在对应数据节点;响应于所述当前容器状态数据的数据树中不存在对应数据节点,不对所述当前数据节点的数据字段部分进行更新处理,响应于所述当前容器状态数据的数据树中存在对应数据节点,确定所述当前数据节点相对于所述对应数据节点是否发生数据字段变化,响应于所述当前数据节点相对于所述对应数据节点未发生数据字段变化,利用所述对应数据节点的数据字段信息直接更新所述当前数据节点的数据字段信息,响应于所述当前数据节点相对于所述对应数据节点发生数据字段变化,使用所述对应数据节点的数据字段信息来根据指定策略更新所述当前数据节点的数据字段信息。16.可选地,在上述方面的一个示例中,所述容器内核升级装置还可以包括:全局预处理单元,在保存所述应用容器的当前容器状态数据之前,停止所述应用容器的驱动缓存的报文接收功能,并且将所述驱动缓存中的报文上交给所述第一容器内核。17.可选地,在上述方面的一个示例中,所述容器内核升级装置还可以包括后置处理单元,在使用所保存的当前容器状态数据更新所述重启容器状态数据后,重新打开在所述当前容器状态数据中被设置为打开的主机文件。18.根据本说明书的实施例的另一方面,提供一种基于可编程容器内核的容器内核升级装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的基于可编程容器内核的容器内核升级方法。19.根据本说明书的实施例的另一方面,提供一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如上所述的基于可编程容器内核的容器内核升级方法。20.根据本说明书的实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如上所述的基于可编程容器内核的容器内核升级方法。附图说明21.通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。22.图1示出了根据本说明书的实施例的计算机系统架构的示例示意图。23.图2示出了根据本说明书的实施例的基于可编程容器内核的容器内核升级方法的示例流程图。24.图3示出了根据本说明书的实施例的容器状态数据的数据结构的示例示意图。25.图4示出了根据本说明书的实施例的容器状态数据更新过程的示例流程图。26.图5示出了根据本说明书的另一实施例的用基于可编程容器内核的容器内核升级方法的示例流程图。27.图6示出了根据本说明书的实施例的待升级的第一容器内核的当前容器状态数据的容器快照生成过程的示例示意图。28.图7示出了根据本说明书的实施例的用于容器内核升级的第二容器内核的容器状态数据更新过程的示例示意图。29.图8示出了根据本说明书的实施例的基于可编程容器内核的容器内核升级装置的示例方框图。30.图9示出了根据本说明书的另一实施例的基于可编程容器内核的容器内核升级装置的示例方框图。31.图10示出了根据本说明书的实施例的基于计算机系统实现的容器内核升级装置的示例示意图。具体实施方式32.现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。33.如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。34.在进行应用容器内核升级时,一种实现方案是安装新版本的应用容器内核(即,操作系统),随后通过重新启动应用容器内核来切换到新版本的应用容器内核系统运行。这种实现方案需要关闭或者迁移应用容器内正在运行的容器应用程序,重新加载应用容器内核(包括初始化硬件资源),然后重新启动容器应用程序,从而造成容器应用程序的运行长时间中断,尤其是应用容器初始化启动耗费时间长的应用场景。35.为了解决上述问题,提出了一种支持criu(checkpoint/restoreinuserspace)技术的应用容器内核,该应用容器内核可以利用criu来支持跨版本容器内核升级。criu支持将一组应用程序(以应用容器为单位)暂停,将该组应用程序的所有状态数据保存在磁盘文件中,然后在需要时从磁盘文件中恢复该组应用程序的运行状态,让该组应用程序继续运行,从而达到应用容器迁移、程序状态快照等需求。36.然而,在criu中,状态数据的保存/恢复完全依赖于应用容器内核的api/systemcall(系统调用),由此仅仅能够实现应用容器内运行的容器应用程序的恢复,而不能对程序运行内核有任何影响,从而无法实现定制化应用容器内核的恢复和升级。在本说明书中,术语“定制化应用容器内核”也称为“可编程应用容器内核”。可编程容器内核是指利用编程手段来定制化更新应用容器内核所支持的功能和数据结构。37.鉴于上述,本说明书的实施例提供一种基于可编程容器内核的容器内核升级方法。在该容器内核升级方案中,保存待升级的第一容器内核的当前容器状态数据,所保存的当前容器状态数据包括第一容器内核所对应的第一容器内核状态数据以及在应用容器内运行的所有应用程序的应用程序状态数据,并且被组织为具有第一容器内核的容器内核版本所定义的第一数据结构。在利用通过编程容器内核的代码逻辑而得到的第二容器内核重启应用容器后,可以使得重启后的应用容器的重启容器状态数据具有第二容器内核的容器内核版本所定义的第二数据结构。然后,使用所保存的当前容器状态数据更新重启容器状态数据的第二数据结构中的对应数据字段,并且响应于容器状态数据更新完成,在重启后的应用容器中重新运行被冻结的容器应用程序,由此完成定制化应用容器内核的恢复和升级。38.下面参照附图描述根据本说明书的实施例的基于可编程容器内核的容器内核升级方法及容器内核升级装置。39.图1示出了根据本说明书的实施例的计算机系统架构100的示例示意图。40.如图1所示,计算机系统100包括底层硬件110、主机内核120和应用容器130。41.底层硬件110提供应用程序所运行所需的硬件环境。底层硬件110例如可以包括处理器和存储设备等。在一些实施例中,处理器的示例例如可以包括但不限于:中央处理器(cpu)、特定应用集成电路(asic)、专用指令集处理器(asip)、图像处理器(gpu)、物理运算处理单元(ppu)、数字信号处理器(dsp)、现场可程序门阵列(fpga)、可程序逻辑装置(pld)、控制器、微控制器单元、精简指令集计算机(risc)、微处理器等中的一种或多种组合。在一些实施例中,存储设备例如可以包括但不限于:大容量存储器、可移动存储器、易失性读写存储器、只读存储器(rom)等或其任意组合。示例性的大容量储存器可以包括磁盘、光盘、固态磁盘等。示例性可移动存储器可以包括闪存驱动器、软盘、光盘、存储卡、压缩盘、磁带等。示例性的挥发性只读存储器可以包括随机存取内存(ram)。示例性的ram可包括动态ram(dram)、双倍速率同步动态ram(ddrsdram)、静态ram(sram)、闸流体ram(t-ram)和零电容ram(z-ram)等。示例性的rom可以包括掩模rom(mrom)、可编程rom(prom)、可擦除可编程rom(perom)、电子可擦除可编程rom(eeprom)、光盘rom(cd-rom)和数字通用磁盘rom等。在一些实施例中,存储设备140可以在云平台上实现。仅作为示例,所述云平台可以包括私有云、公共云、混合云、社区云、分布云、内部云、多层云等或其任意组合。42.主机内核120是运行在底层硬件110上的操作系统内核。主机内核120是基于底层硬件110的第一层软件扩充,其负责管理计算机系统的进程、内存、设备驱动程序、文件和网络系统,决定着计算机系统的性能和稳定性。主机内核120的示例例如可以包括但不限于windows内核、linux内核等。43.应用容器130运行在主机内核120之上。每个应用容器130具有独立的容器内核131。容器内核131可以为应用容器130中运行的一个或多个容器应用程序133提供隔离的操作系统执行环境,从而将容器应用程序133的执行与主机内核120隔离开,由此避免容器应用程序直接访问主机资源,从而在应用容器130与主机内核120之间或另一应用容器130之间提供隔离保护。在一些实施例中,容器内核131的示例例如可以包括但不限于例如windows内核、linux内核等的操作系统内核。更为优选地,容器内核131可以包括支持通过序列化/反序列化实现内核状态保存/恢复的操作系统内核。44.主机内核120具有管理程序(hypervisor)121。硬件结构中的处理器的工作模式具有root模式和non-root模式。non-root模式用于运行虚拟机,并且由root模式来进行配置、创建和进入。应用容器130被主机内核120视为一个进程(容器进程)。容器进程可以通过hypervisor进入到non-root模式,在non-root模式下,容器内核133提供os功能,然后提供一个和主机操作系统(例如,linux系统)兼容的标准应用程序运行环境,从而使得应用容器内的容器应用程序运行在与主机操作系统类似的os环境内。此外,计算机系统100还可以包括主机内核120可支持运行的其它进程,比如,文件代理进程等。该其它进程例如可以运行在root模式下或者运行在non-root模式下。45.图2示出了根据本说明书的实施例的基于可编程容器内核的容器内核升级方法200的示例流程图。46.如图2所示,在210,响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器。在应用容器被冻结后,停止运行应用容器的运行环境,例如,停止应用容器中的进程运行、报文收发和文件读写等。此外,被冻结的应用容器中的容器应用程序不再运行,也不再占用容器内核所提供的os的相关资源。47.在220,保存应用容器的当前容器状态数据(下文中称为第一容器状态数据),所保存的第一容器状态数据包括第一容器内核所对应的容器内核状态数据以及运行在应用容器内的所有应用程序的所有应用程序状态数据,并且第一容器状态数据具有第一容器内核的容器内核版本(例如,代码逻辑)所定义的第一数据结构。本说明书的实施例中提及的容器内核是可编程容器内核。每个容器内核在编程时可被编写为具有当前容器内核版本所定义的数据结构,从而使得容器内核所保存的容器状态数据按照所定义的数据结构进行数据组织。例如,当容器内核所在的应用容器内运行应用程序时,容器内核会为每个应用程序保存进程管理数据结构、内存管理数据结构、文件管理数据结构,以及应用程序自身的数据(比如应用程序的内存和应用程序的代码)。此外,容器内核还会保存一些多个应用程序共享的全局的数据结构,比如控制组(controlgroups)以及共享内存等。容器内核所保存的上述数据被称为容器状态数据,所保存的容器状态数据被组织为对应的容器内核版本所定义的数据结构。48.应用容器的容器状态数据例如可以包括但不限于:全局配置信息、内核状态信息、文件系统、内存管理、名空间(namespace)、共享内存(sharememory)、控制组(controlgroups,cgroup)、网络连接信息、缓存报文进程状态(上下文)、进程内存等。49.图3示出了根据本说明书的实施例的容器状态数据的数据结构的示例示意图。50.如图3所示,应用容器的所有容器状态数据被组织为一颗树。树的根数据节点(也称为根数据成员)是容器内核(root-内核),一级下游数据节点包含任务(task)、文件系统(filesystem)、名空间(namespace)、共享内存、网络等。二级下游数据节点是各个一级数据节点的进一步细分(下游数据节点)。例如,针对任务的二级数据节点包括内存、文件、运行状态等。针对文件系统的二级数据节点包括内存文件系统、管道文件系统、磁盘文件系统等。针对名空间(namespace)的二级数据节点包括usernamespace、pidnamespace、mountnamespace、netnamespace等。针对共享内存的二级数据节点包括unixsystemv共享内存、posix(theportableoperatingsysteminterface)共享内存等。针对网络的二级数据节点包括网络设备、路由配置、协议栈配置、协议栈报文等。此外,针对各个二级数据节点也会存在对应的下游数据节点。数据树的树枝之间会存在相互引用,比如,进程会打开文件等。51.在一些实施例中,在对第一容器状态数据的数据树进行状态保存时,通过对第一容器状态数据进行数据序列化而生成容器快照。随后,将所生成的容器快照写入数据文件中,从而将第一容器状态数据以容器快照的形式保存在数据文件中。在一些实施例中,可以将容器快照写入磁盘文件中。在一些实施例中,可以将容器快照写入内存文件中。由于内存文件的写入/读取速度都远高于磁盘文件,从而可以缩短容器快照的读写时间,由此缩短容器内核升级时间。针对容器状态数据的数据序列化过程可以采用本领域的任何合适的数据序列化方案实现。52.回到图2,在230,利用用于容器内核升级的第二容器内核重启被冻结的应用容器。要说明的是,这里所述的“应用容器重启”仅仅包括重启应用容器的运行环境,并不恢复运行应用容器中冻结的任何应用程序。第二容器内核例如可以通过编程方式对容器内核进行版本更新得到,由此增加新内核功能(例如,增加新系统)或者实现针对容器内核的其它修改。在更新后的第二容器内核的容器内核版本中,容器内核所对应的数据结构(即,容器状态数据在保存时的数据结构)被重新定义,例如,修改数据结构中的数据节点,数据节点的数据类型和/或数据字段值等,从而将容器状态数据的数据结构从第一数据结构修改为第二数据结构,或者重新定义出新的第二数据结构。在本说明书中,“第一容器内核”和“第二容器内核”都是可编程容器内核。第二容器内核可以读取并修改第一容器状态数据使其在第二容器内核中使用,进而实现容器内核运行逻辑的编程效果。例如,对比第一容器状态数据中的数据结构类型和第二容器状态数据中的数据结构类型,识别第二容器状态数据的对应数据结构类型的成员增删情况,自动将第二容器状态数据中的相应数据字段恢复为第一容器状态数据中所保存的数据字段值。在利用第二容器内核重启被冻结的应用容器后,重启后的应用容器恢复运行环境。由于在应用容器重启后应用容器中的所有应用程序未被启动,从而重启应用容器后得到的重启容器状态数据中没有任何应用程序状态数据,并且重启容器状态数据具有与待升级容器内核的容器内核版本所定义的第一数据结构不同的第二数据结构。例如,第一容器状态数据和第二容器状态数据的数据树中的数据节点存在不同、数据节点的数据结构类型所限定的数据字段不同和/或数据字段值不同等。53.在240,使用所保存的第一容器状态数据更新重启后的应用容器的重启容器状态数据(下文称为第二容器状态数据)的数据结构中的对应数据字段。54.在一些实施例中,对数据文件中的容器快照进行数据反序列化以恢复所保存的第一容器状态数据。然后,利用所恢复的第一容器状态数据更新第二容器状态数据的数据结构(第二数据结构)中的对应数据字段。55.图4示出了根据本说明书的实施例的容器状态数据更新过程400的示例流程图。在图4的示例中,第一容器状态数据和第二容器状态数据被组织为数据树。56.在图4的示例流程中,自第二容器状态数据的数据树的根数据节点起,自上而下逐数据节点循环执行下述更新过程。57.在每次循环更新过程中,在420,确定第二容器状态数据的数据树中的当前数据节点在第一容器状态数据的数据树中是否存在对应数据节点。58.响应于第一容器状态数据的数据树中不存在对应数据节点,在430,不对当前数据节点的数据字段进行更新处理,随后进行到470。59.响应于第一容器状态数据的数据树中存在对应数据节点,在440,确定当前数据节点相对于对应数据节点是否发生数据字段变化。比如,第一容器状态数据和第二容器状态数据中保存了数据节点的数据结构类型,可以通过对比数据节点的数据结构类型来识别数据节点是否增加了新的数据字段或者删除了旧的数据字段。响应于当前数据节点相对于对应数据节点未发生数据字段变化,在450,利用第一容器状态数据的数据树中的对应数据节点的数据字段信息直接更新当前数据节点的数据字段信息,随后进行到470。60.响应于当前数据节点相对于对应数据节点发生数据字段变化,在460,使用第一容器状态数据的数据树中的对应数据节点的数据字段信息来根据指定策略更新当前数据节点的数据字段信息。例如,假设数据节点的数据字段信息发生修改(数据字段新增或删减),比如,名字相同但类型不同。在这种情况下,可以支持定制恢复。例如,先将第一容器状态数据的数据树中的对应数据节点的数据字段信息恢复到临时变量。然后,基于临时变量重新构建第二容器状态数据的数据树中的当前数据节点的数据字段信息。随后,进行到470。61.在470,判断针对第二容器状态数据的数据树中的数据节点的更新是否结束,即,是否针对所有数据节点都完成上述更新处理。如果存在未更新的数据节点,则在480,从第二容器状态数据的数据树中选择下一数据节点。例如,可以采用遍历方法来确定出下一数据节点。然后,针对所选择的下一数据节点重复执行上述420到470的处理过程。如果不存在未更新的数据节点,则在490,容器状态数据更新结束。62.回到图2,响应于容器状态数据更新完成,在250,在重启后的应用容器中重新运行被冻结的应用容器中的容器应用程序,由此实现可编程容器内核升级过程。63.利用上述基于可编程容器内核的容器内核升级方案,通过保存待升级的第一容器内核的当前容器状态数据,所保存的当前容器状态数据具有第一容器内核的容器内核版本所定义的第一数据结构,并且包括第一容器内核所对应的第一容器内核状态数据以及在应用容器内运行的所有应用程序的应用程序状态数据,并且在利用通过编程容器内核的代码版本(例如,代码逻辑)而得到的第二容器内核重启应用容器后,使用所保存的当前容器状态数据更新重启容器状态数据的第二数据结构中的对应数据字段,从而使得升级后的第二容器内核能够恢复出升级前的第一容器内核中运行的容器应用程序的状态信息并且具有编程后的第二容器内核的新特性,由此完成定制化容器内核的恢复和升级。64.此外,利用上述容器内核升级方案,可以实现容器内核逻辑的快速升级,同时迅速恢复先前容器内核中运行的容器应用程序。在上述容器内核升级过程中,无需容器应用程序的停止、迁移和启动过程,从而可以实现容器应用程序几乎无中断(秒断)情况下的容器内核升级。65.图5示出了根据本说明书的实施例的基于可编程容器内核的容器内核升级方法500的示例流程图。图5中示出的实施例是图2中示出的实施例的修改例。66.如图5所示,在510,响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器。67.在520,对应用容器进行全局预处理。68.在一些实施例中,在进行全局预处理时,停止应用容器的驱动缓存的报文接收功能,并且将驱动缓存中的报文上交给第一容器内核。在接收到所上交的报文后,第一容器内核可以通过状态保存来缓存所接收的报文,从而保持软硬件状态的一致性,以确保硬件中不存在未完成处理的数据,从而避免在容器内核编程/升级过程中数据由于被缓存在硬件中而造成数据损失。69.在一些实施例中,在进行全局预处理时,还可以丢弃应用容器的全部缓存数据,例如,丢弃文件缓存中的缓存数据,以加速容器内核数据的状态保存过程。70.在530,对应用容器进行前置处理。要说明的是,在进行前置处理时,以应用容器的组件为单位进行。例如,容器内核的文件数据结构会统一按照文件数据结构的前置处理逻辑统一处理,以此类推,还有内存数据、进程数据等。71.在一些实施例中,在进行前置处理时,可以针对应用容器的当前容器状态数据中的每个容器组件所对应的容器状态数据进行异常检测。一旦检测到发生数据异常,则停止容器内核升级过程。72.在一些实施例中,在进行前置处理时,还可以记录应用容器的系统启动时间和当前实时时间。例如,记录应用容器的系统启动时间m0和当前实时时间r0,这样在数据恢复过程中,可以通过新的实时时间r1与所记录的实时时间r0之间的差值,计算出来系统启动时间的时间偏差offset=r1-r0,从而使得所恢复出的系统启动时间是连续时间。73.在540,保存应用容器的当前容器状态数据,所保存的当前容器状态数据包括第一容器内核所对应的容器内核状态数据以及运行在应用容器内的所有应用程序的所有应用程序状态数据,并且当前容器状态数据具有第一容器内核的容器内核版本所定义的第一数据结构。容器状态数据的保存过程可以参考上面参照图2的220的描述。74.图6示出了根据本说明书的实施例的待升级的第一容器内核的当前容器状态数据(部分数据结构)的容器快照生成过程的示例示意图。图6中示出的示例是针对左下角的容器状态数据“cgroupstruct”的容器快照生成过程。在图6的示例中,容器状态数据“cgroupstruct”具有两个参数,即,“cpunum”和“totalmem”,其值分别为“4”和“858993592”。75.在550,利用用于容器内核升级的第二容器内核重启被冻结的应用容器。重启后的应用容器的重启容器状态数据包括在应用容器重启时第二容器内核所对应的第二容器内核状态数据,并且重启容器状态数据具有第二容器内核的容器内核版本所定义的第二数据结构。76.在560,使用所保存的当前容器状态数据更新重启后的应用容器的重启容器状态数据的数据结构中的对应数据字段。容器状态数据的更新过程可以参考上面参照图2的240以及图4的描述。77.图7示出了根据本说明书的实施例的第二容器内核的容器状态数据(部分数据结构)更新过程的示例示意图。78.图7示出的示例是针对图6中示出的示例的容器状态数据更新过程。在图7的示例中,容器状态数据“cgroupstruct”被修改为具有三个参数,即,“cpunum”、“totalmem”和“name”,所更新出的值为“4”、“858993592”以及新增数据字段“testafterload”。79.在570,对重启后的应用容器进行后置处理。80.在一些实施例中,在进行后置处理时,可以重新打开在所保存的当前容器状态数据中被设置为打开的主机文件。81.在一些实施例中,在进行后置处理时,可以确定应用容器的系统启动时间。可以通过新的实时时间r1与所记录的实时时间r0之间的差值,计算出来系统启动时间的时间偏差offset=r1-r0,从而恢复出连续的系统启动时间。在一些实施例中,可以启动应用容器的硬件收发功能。82.响应于容器状态数据更新完成并且完成后置处理后,在580,在重启后的应用容器中重新运行被冻结的应用容器中的容器应用程序,由此实现可编程容器内核升级过程。83.如上参照图1到图7对根据本说明书的实施例的基于可编程容器内核的容器内核升级方法进行了描述。84.图8示出了根据本说明书的实施例的基于可编程容器内核的容器内核升级装置800的示例方框图。如图8所示,容器内核升级装置800包括容器冻结单元810、容器状态数据保存单元820、容器重启单元830、容器状态数据更新单元840和应用程序运行恢复单元850。85.容器冻结单元810被配置为响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器。容器冻结单元810的操作可以参考上面参照图2的210描述的操作。86.容器状态数据保存单元820被配置为保存应用容器的当前容器内核数据,当前容器状态数据包括第一容器内核所对应的容器内核状态数据以及运行在应用容器内的所有应用程序的所有应用程序状态数据,并且当前容器状态数据具有第一容器内核的容器内核版本所定义的第一数据结构。容器状态数据保存单元820的操作可以参考上面参照图2的220描述的操作。87.容器重启单元830被配置为利用用于容器内核升级的第二容器内核重启应用容器。重启后的应用容器的重启容器状态数据包括在应用容器重启时第二容器内核所对应的第二容器内核状态数据,并且重启容器状态数据具有第二容器内核的容器内核版本所定义的第二数据结构。容器重启单元830的操作可以参考上面参照图2的230描述的操作。88.容器状态数据更新单元840被配置为使用所保存的当前容器状态数据更新重启后的应用容器的重启容器状态数据的数据结构中的对应数据字段。容器状态数据更新单元840的操作可以参考上面参照图2的240描述的操作。89.应用程序运行恢复单元850被配置为响应于容器状态数据更新完成,在重启后的应用容器中恢复运行被冻结的应用容器中的容器应用程序。应用程序重启单元850的操作可以参考上面参照图2的250描述的操作。90.在一些实施例中,容器状态数据保存单元820可以将当前容器状态数据以容器快照的形式保存在数据文件中,所述容器快照通过对所述当前容器状态数据进行数据序列化而生成。相应地,容器状态数据更新单元840可以包括容器状态数据恢复模块和容器状态数据更新模块。容器状态数据恢复模块被配置为对数据文件中的容器快照进行数据反序列化以恢复当前容器状态数据。然后,容器状态数据更新模块利用所恢复出的当前容器状态数据更新重启容器状态数据的数据结构中的对应数据字段。91.在一些实施例中,当前容器状态数据和重启容器状态数据被组织为数据树。相应地,容器状态数据更新模块被配置为自重启容器状态数据的数据树的根数据节点起,自上而下逐数据节点执行下述更新过程:确定当前数据节点在当前容器状态数据的数据树中是否存在对应数据节点;响应于当前容器状态数据的数据树中不存在对应数据节点,不对当前数据节点的数据字段部分进行更新处理,响应于当前容器状态数据的数据树中存在对应数据节点,确定当前数据节点相对于所述对应数据节点是否发生数据字段变化,响应于当前数据节点相对于所述对应数据节点未发生数据字段变化,利用对应数据节点的数据字段信息直接更新当前数据节点的数据字段信息,响应于当前数据节点相对于对应数据节点发生数据字段变化,使用对应数据节点的数据字段信息来根据指定策略更新当前数据节点的数据字段信息。92.图9示出了根据本说明书的另一实施例的基于可编程容器内核的容器内核升级装置900的示例方框图。图9示出的实施例是图8中示出的实施例的修改例。93.如图9所示,容器内核升级装置900包括容器冻结单元910、全局预处理单元920、前置处理单元930、容器状态数据保存单元940、容器重启单元950、容器状态数据更新单元960、后置处理单元970和应用程序运行恢复单元980。94.容器冻结单元910被配置为响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器。容器冻结单元910的操作可以参考上面参照图5的510描述的操作。95.全局预处理单元920被配置为在保存应用容器的当前容器状态数据之前,停止应用容器的驱动缓存的报文接收功能,并且将驱动缓存中的报文上交给第一容器内核。96.在一些实施例中,全局预处理单元920还可以被配置为丢弃应用容器的全部缓存数据,例如,丢弃文件缓存中的缓存数据,以加速容器内核数据的状态保存过程。97.前置处理单元930被配置为可以针对应用容器的当前容器状态数据的每个容器组件所对应的容器状态数据进行异常检测。一旦检测到发生数据异常,则停止容器内核升级过程。前置处理单元930的操作可以参考上面参照图5的530描述的操作。98.在一些实施例中,前置处理单元930还可以被配置为记录应用容器的系统启动时间和当前实时时间。例如,前置处理单元930可以记录应用容器的系统启动时间m0和当前实时时间r0,这样在数据恢复过程中,可以通过新的实时时间r1与所记录的实时时间r0之间的差值,计算出来系统启动时间的时间偏差offset=r1-r0,从而使得所恢复出的系统启动时间是连续时间。99.容器状态数据保存单元940被配置为保存应用容器的当前容器状态数据,当前容器状态数据包括第一容器内核所对应的容器内核状态数据以及运行在应用容器内的所有应用程序的所有应用程序状态数据,并且当前容器状态数据具有第一容器内核的容器内核版本所定义的第一数据结构。容器状态数据保存单元940的操作可以参考上面参照图5的540描述的操作。100.容器重启单元950被配置为利用用于容器内核升级的第二容器内核重启应用容器。重启后的应用容器的重启容器状态数据包括在应用容器重启时第二容器内核所对应的第二容器内核状态数据,并且重启容器状态数据具有第二容器内核的容器内核版本所定义的第二数据结构。容器重启单元950的操作可以参考上面参照图5的550描述的操作。101.容器状态数据更新单元960被配置为使用所保存的当前容器状态数据更新重启后的应用容器的重启容器状态数据的数据结构中的对应数据字段。容器状态数据更新单元960的操作可以参考上面参照图5的560描述的操作。102.后置处理单元970被配置为在完成容器状态数据更新后,重新打开在所保存的当前容器状态数据中被设置为打开的主机文件。后置处理单元970的操作可以参考上面参照图5的570的操作。103.在一些实施例中,后置处理单元970可以被配置为确定应用容器的系统启动时间。可以通过新的实时时间r1与所记录的实时时间r0之间的差值,计算出来系统启动时间的时间偏差offset=r1-r0,从而恢复出连续的系统启动时间。在一些实施例中,可以启动应用容器的硬件收发功能。104.应用程序运行恢复单元980被配置为响应于容器内核数据更新完成并且后置处理单元970完成后置处理,在重启后的应用容器中恢复运行被冻结的应用容器中的容器应用程序。应用程序重启单元980的操作可以参考上面参照图5的580描述的操作。105.要说明的是,在本说明书的其它实施例中,还可以对图9中示出的实施例中的部分组件进行修改或删减。106.如上参照图1到图9,对根据本说明书实施例的用于升级应用容器的容器内核的方法和容器内核升级装置进行了描述。上面的容器内核升级装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。107.图10示出了根据本说明书的实施例的基于计算机系统实现的容器内核升级装置1000的示例示意图。如图9所示,容器内核升级装置1000可以包括至少一个处理器1010、存储器(例如,非易失性存储器)1020、内存1030和通信接口1040,并且至少一个处理器1010、存储器1020、内存1030和通信接口1040经由总线1060连接在一起。至少一个处理器1010执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。108.在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1010:响应于接收到容器内核升级请求,冻结待升级的第一容器内核所在的应用容器;保存应用容器的当前容器状态数据,当前容器状态数据包括第一容器内核所对应的第一容器内核状态数据以及在应用容器内运行的所有应用程序的应用程序状态数据,并且具有第一容器内核的容器内核版本所定义的第一数据结构;利用用于容器内核升级的第二容器内核重启应用容器,重启后的应用容器的重启容器状态数据包括在应用容器重启时第二容器内核所对应的第二容器内核状态数据,并且具有第二容器内核的容器内核版本所定义的第二数据结构;使用所保存的当前容器状态数据更新重启容器状态数据的数据结构中的对应数据字段;以及响应于容器状态数据更新完成,在重启后的应用容器中恢复运行被冻结的应用容器中的容器应用程序。109.应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1010进行本说明书的各个实施例中以上结合图1-图9描述的各种操作和功能。110.根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-图9描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。111.在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。112.可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd-rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。113.根据一个实施例,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序当被处理器执行时,使得处理器执行本说明书的各个实施例中以上结合图1-图9描述的各种操作和功能。114.本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。115.需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。116.以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,fpga或asic)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。117.上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。118.本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献