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

一种容器管理方法及装置与流程

2021-11-20 01:00:00 来源:中国专利 TAG:
1.本发明涉及计算机应用系统
技术领域
:,更具体地说,涉及一种容器管理方法及装置。
背景技术
::2.容器(linuxcontainer)一种系统级的虚拟化技术。容器通过操作系统提供的资源隔离和管控技术,如linux中的cgroup和namespace,将不同的进程隔离到单独的环境中,从而实现虚拟化。与硬件虚拟化技术(hypervisor)不同,容器与宿主共享系统内核,不需要模拟硬件,因此更加轻量。3.linux基金会于2015年6月成立开放容器规范‑oci(opencontainerinitiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准;目前主要有容器运行时规范(runtimespec)和镜像规范(imagespec),以及尚未完全标准化的分发规范(distributionspec)。镜像规范概述了容器运行时所使用的镜像的json内容,以及镜像与文件系统更改集的关系;容器运行时规范定义了容器的配置信息、执行环境与生命周期;分发规范定义了容器分发内容的api协议格式。4.docker容器引擎是目前广泛使用的容器管理工具。尽管docker推动了容器技术的发展,但其仍存在一些问题。docker采用了客户端/服务器的工作模式,该模式中客户端向用户提供操作接口,服务端执行具体任务;客户端将用户的输入数据发送到服务端,并输出服务端处理后的结果;因此,服务端需保持运行以响应客户端任意时刻的任务请求。特别的,对于docker,其服务端需记录容器日志与状态,停止服务端会造成所有容器终止,因此,即使用户仅执行一些不影响容器状态的操作,如列出所有容器和镜像等,服务端也需跟随宿主机启动并保持运行,导致对系统内存和cpu资源的占用率较高。另外,docker采用go语言编写,运行时内存需求较大,不适用于内存资源有限的物联网设备。技术实现要素:5.有鉴于此,本发明提出一种容器管理方法及技术,欲降低对系统内存和cpu资源的占用率,且适用于内存资源有限的物联网设备。6.为了实现上述目的,现提出的方案如下:7.第一方面,提供一种容器管理方法,包括:8.采用命令行工具对容器和镜像进行操作,所述命令行工具为在命令行界面(commandlineinterface)提供用户交互的程序,所述命令行工具的可执行文件为linux平台代码;9.在容器启动后,触发用于记录容器输入输出及日志信息的容器守护程序处于运行状态;10.在容器停止后,触发所述容器守护程序退出运行状态。11.优选的,采用crun作为容器运行时。12.优选的,所述容器守护程序,具体为conmon。13.优选的,对容器和镜像进行操作过程中涉及的容器仓库和镜像仓库,均采用uml类图设计。14.优选的,对容器进行操作包括:创建、启动、停止、附加到、清理、列出和删除;15.对镜像进行操作:包括拉取、构建、列出和删除。16.第二方面,提供一种容器管理装置,包括:17.命令行工具单元,用于采用命令行工具对容器和镜像进行操作,所述命令行工具为在命令行界面提供用户交互的程序,所述命令行工具的可执行文件为linux平台代码;18.容器守护运行单元,用于在容器启动后,触发用于记录容器输入输出及日志信息的容器守护程序处于运行状态;19.容器守护停止单元,用于在容器停止后,触发所述容器守护程序退出运行状态。20.优选的,采用crun作为容器运行时。21.优选的,所述容器守护程序,具体为conmon。22.优选的,对容器和镜像进行操作过程中涉及的容器仓库和镜像仓库,均采用uml类图设计。23.优选的,对容器进行操作包括:创建、启动、停止、附加到、清理、列出和删除;24.对镜像进行操作:包括拉取、构建、列出和删除。25.与现有技术相比,本发明的技术方案具有以下优点:26.上述技术方案提供的一种容器管理方法及装置,方法包括采用命令行工具对容器和镜像进行操作;在容器启动后,触发用于记录容器输入输出及日志信息的容器守护程序处于运行状态;在容器停止后,触发所述容器守护程序退出运行状态。命令行工具为在命令行界面提供用户交互的程序,这些程序在任务执行完成后便结束运行,将控制权交回命令行界面,无需后台服务的运行,因此降低了对系统内存和cpu资源的占用率;命令行工具的可执行文件为linux平台代码,无需语言运行时即可执行,因此,更为高效,且对内存资源的需求更小,进而适用于内存资源有限的物联网设备。27.采用crun作为容器运行时。crun是一个采用c语言编写的符合oci规范的轻量级容器运行时。相比其它容器运行时,如runc、cri‑o等,crun性能更高并且具有更低的内存占用率,更适合物联网中资源受限的设备。28.采用conmon作为容器守护程序。conmon也采用c语言编写,相比containerd‑shim等其它容器守护程序,具有高效、低内存占用的特点,是容器运行过程中可以拥有的最小守护进程,更适合物联网中资源受限的设备。29.当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。附图说明30.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。31.图1为本发明实施例提供的一种容器管理方法的流程图;32.图2为本发明实施例提供的命令行工具示意图;33.图3为本发明实施例提供的容器仓库和镜像仓库的uml类图设计示意图;34.图4为本发明实施例提供的镜像相关功能的示意图;35.图5为本发明实施例提供的容器相关功能的示意图;36.图6为本发明实施例提供的一种容器管理装置的逻辑结构示意图。具体实施方式37.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。38.针对目前广泛应用的容器管理工具内存占用率高、需要保持后台运行,不适用于物联网环境中资源受限设备的问题,本发明提供了一种无需后台守护进程的容器管理方法,该方法可以包括以下步骤:39.s11:采用命令行工具对容器和镜像进行操作;命令行工具为在命令行界面提供用户交互的程序;命令行工具的可执行文件为linux平台代码。40.对容器进行操作包括创建、启动、停止、附加到、清理、列出和删除等;对镜像进行操作包括拉取、构建、列出和删除等。用户在命令行界面键入相应命令后,命令行工具执行容器操作或镜像操作,如创建容器、删除镜像、拉取镜像等;在操作完成后,如容器创建完成、镜像成功删除后,命令行工具结束运行,将控制权交回命令行界面。41.而本发明在获取容器或镜像配置信息后直接执行相关功能,执行完毕后立即退出,无需任何后台服务的运行,因此本发明对内存资源的需求更小。例如在ubuntu18.04系统上,启动同样容器后,docker所占用的内存为约100mb,而发明程序仅为约2mb(不包含容器进程)。命令行工具可采用c 编写,生成的可执行文件为linux平台代码,无需语言运行时即可执行,因此更为高效。42.在对容器和镜像进行操作过程中,本实施例采用的命令行工具,使用其它开源软件实现网络请求、数据提取等功能。本实施例采用的命令行工具所包含的子功能在参数方面与docker类似,但对于容器相关的功能如启动容器、附加到容器、删除容器等,本实施例采用的命令行工具仅需获取容器的信息即可执行功能,而docker则需与其后台服务交互,将命令及容器信息发送到后台服务执行并获得输出,故实现相同功能时本实施例采用的命令行工具可以显著降低对系统内存、cpu资源的使用。43.s12:在容器启动后,触发用于记录容器输入输出及日志信息的容器守护程序处于运行状态。44.在一些具体实施例中,采用conmon作为容器守护程序。conmon采用c语言编写,相比containerd‑shim等其它容器守护程序,具有高效、低内存占用的特点,是容器运行过程中可以拥有的最小守护进程,更适合物联网中资源受限的设备。45.s13:在容器停止后,触发容器守护程序退出运行状态。46.在一些具体实施例中,采用crun作为容器运行时。容器运行时是运行容器的核心,目前使用较多的为runc、cri‑o、crun等,本实施例使用crun作为容器运行时,相比其它容器运行时,crun对设备资源的要求更低、更加高效,,更适合物联网中资源受限的设备。47.图2所示,采用命令行工具对容器和镜像进行操作的过程涉及到多个实体,其中,远程仓库指符合镜像分发规范的公共镜像存储仓库;镜像仓库为对镜像进行操作过程中创建的用来存储镜像信息的数据库;容器仓库为对容器进行操作过程中创建的用来容器信息的数据库。容器运行过程存储为容器在启动后需要保持的数据,如可附加的套接字sock、容器进程的pid等。容器守护进程conmon,用来管理容器的日志、提供套接字等;容器运行时crun为容器的执行引擎。容器工具即为上述的命令行工具。48.镜像操作包括拉取、构建、列出及删除镜像功能,这些功能主要与远程仓库和镜像仓库交互;容器操作包括创建、启动、停止、附加、清理、列出及删除容器功能,这些功能主要与容器仓库、容器运行时存储以及conmon交互。49.在一些具体实施例中,本发明所涉及到的容器仓库和镜像仓库,均采用图3所示的uml类图设计。具体来说,仓库repo及仓库项repoitem为基类,提供了满足raii(资源获取即初始化)的基础数据库操作功能。容器仓库containerrepo与镜像仓库imagerepo分别提供了对容器与镜像的查询、更新、删除等操作;与之对应的容器仓库项containerrepoitem与镜像仓库项imagerepoitem分别为需要存储的容器与镜像的相关信息。容器仓库项containerrepoitem包括容器的运行状态、标识、名称、执行命令等;镜像仓库项imagerepoitem包括镜像标识、名称、标签、创建时间等。容器状态containerstatus提供了容器的具体状态,包括已创建created、已停止stopped以及运行中running三个有效状态以及invalid无效状态。imageidrepo与imageidrepoitem提供了对镜像名称与标识互相索引的功能,用以通过名称快速获取镜像标识。50.下面结合图4和图5详细介绍采用命令行工具对容器和镜像进行操作的具体过程:51.1.对镜像进行拉取,即从默认远程仓库拉取镜像并保存到镜像仓库。主要包括获取镜像数据和保存镜像两个步骤。获取镜像数据需要参考镜像分发规范及其它相关文档,主要步骤为获取镜像清单文件manifest.json,获取镜像配置文件config.json,之后根据内容获取镜像的layer,获取镜像每层的数据blob并解压。保存镜像的清单配置文件,更新镜像仓库。对于镜像分发规范v1,清单文件中即包含相关的配置文件,而对于镜像分发规范v2,则需要通过对应接口获取配置文件。清单文件中包含镜像每个layer的标识,通过此标识获取每个layer的压缩文件数据。52.2.构建镜像,即使用指定的用户编写的构建文件创建镜像。具体来说,首先加载基础镜像的清单文件与配置文件,之后根据构建文件中的内容执行不同的操作,如将某个文件拷贝到镜像的存储位置、将环境变量添加到镜像的配置信息中以及更改镜像的默认启动命令等,之后将修改后的清单数据与配置数据写入到镜像存储位置,更新镜像仓库中的信息。53.本实施例中的构建镜像支持如下语法:54.a)from<image>:<tag>55.b)cmd["executable","param1","param2"][0056]c)copy<src><dest>可指定多个[0057]d)env<key>=<value>可指定多个[0058]其中,cmd与env可以通过修改镜像的配置文件得到;copy可以通过在镜像目录中创建新的diff目录实现。具体步骤为,获取文件,生成镜像名称、id,创建镜像目录,读取基础镜像from,加载基础镜像配置文件中container_config的内容作为配置信息,读取文件行并对每一行解析,生成清单文件更新镜像数据库。[0059]3.列出镜像,即读取镜像仓库的内容,格式化并打印。[0060]4.删除镜像,即根据镜像名获取镜像id,读取容器数据库判断镜像是否被使用,未被使用则删除镜像相关文件,包括删除清单、配置文件和只有当前镜像引用的层等,更新镜像数据库(即从镜像仓库中删除相应镜像文件),否则提示并退出。[0061]5.创建容器,即使用给定镜像的layer作为容器的文件系统、镜像配置文件中的contaienr_config数据作为容器的配置文件,生成容器运行所需的文件夹并更新容器仓库。具体步骤为,获取镜像配置文件,生成容器oci配置文件,生成lower目录文件,创建待挂载目录merged,upper,lower,diff,若镜像目录下有diff目录,则拷贝到对应容器目录,更新容器数据库,更新镜像数据库。生成容器oci配置文件时需要,更新oci配置netns的文件路径path,更新命令、环境、hostname。[0062]使用镜像创建容器并在其中执行程序,可以指定创建后的容器名、要执行的程序。该命令实际由创建和启动两个步骤组成,在创建容器时需要根据args参数更改容器配置文件的执行程序。[0063]创建容器启动容器需要创建网络相关的设备与命名空间namespace,并将overlay文件系统挂载到相应目录。网络命名空间networknamespace是容器技术所依赖的一种操作系统功能。新创建的网络命名空间相当于一个崭新的网络协议栈,其中不包含任何网络设备,若要为其提供网络支持,则需要创建虚拟网卡设备并将其添加到创建的网络命名空间中。另外,虚拟网卡独立于物理网卡,因此要使其收发互联网的流量,需要通过修改路由表或桥接的方式进行数据转发。[0064]overlay文件系统是linux联合文件系统的一种实现。它将多个不同的基础装载点合并为一个,从而生成包含所有源目录和子目录的单个目录结构。overlay文件系统使得不同的容器可以共享layer,并能够记录下容器进程对文件系统的更改。例如对于两个不同的镜像,若它们拥有共同的某些layer,则使用两个镜像运行容器时,只需将这些layer挂载(mount)到容器存储目录即可,无需任何拷贝。而容器在运行过程中对这些layer的更改也会被写入到容器存储位置,不会影响到原始的layer。[0065]6.列出容器,即从容器仓库读取数据,格式化并打印。[0066]7.删除容器,即首先读取容器仓库项检查容器是否处于运行状态,若未运行则将容器运行所需的配置文件、待挂载文件夹删除,之后从容器仓库中删除。[0067]8.启动容器,首先获取容器信息确保有此容器以及容器尚未运行,之后创建网络命名空间、网络设备,通过桥接的方式配置路由表。完成后将容器的layer挂载到容器目录,并调用conmon启动容器。调用conmon时可以配置容器退出后的清理程序,负责卸载已挂载的文件,清理网络设备及命名空间等。conmon会调用cruncreate创建容器,并返回容器的pid作为数据,创建完成后调用crunstart启动容器,之后更新容器数据库即完成容器启动的所有过程。[0068]需要说明的是,与conmon同步时,conmon会通过cruncreate创建容器,但不会启动容器,因此需要在创建之后调用crunstart启动容器,conmon通过从环境变量获得名为_oci_syncpipe的管道文件描述符,向父进程通知容器创建完成,格式为{"data":pid}。[0069]10.附加到容器,即获取容器的附加套接字,将用户的输入转发到容器标准输入并将容器进程的输出转发到标准输出,执行时需要将终端设置为raw模式以确保用户输出不被当前终端拦截。conmon自动创建了名为attach的unix套接字,类型为sock_seqpacket,可借此实现。具体步骤为,获取并连接到套接字,设置终端为raw模式,使用epoll监听套接字和标准输入的事件,将标准输入转发到套接字,将套接字的返回内容转发到终端,根据响应内容第一个字符判断,其中2表示stdout,3表示stderr,由于conmon在附加并终止容器进程(attach容器并exit)时不会调用cleanup,故若套接字断开,则停止并清理容器。[0070]11.停止容器,即通过向容器进程pid发送sigterm与sigkill信号实现,若进程未响应sigterm或响应但未终止,则发送sigkill信号强制结束容器进程。具体步骤为,获取容器进程pid,发送sigterm信号,超时后判断proc和pid是否存在(即是否已经结束),若存在,则发送sigkill信号。容器进程结束后conmon会自动调用cleanup更新容器数据库。[0071]12.清理容器,即清理容器的相关文件,包括conmon创建的套接字和fifo,清理挂载点、删除网络命名空间、删除虚拟网卡,删除运行时的容器,更新容器数据库。[0072]对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。[0073]下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。[0074]参见图6,为本实施例提供的一种容器管理装置,包括:命令行工具单元61、容器守护运行单元62和容器守护停止单元63。[0075]命令行工具单元61,用于采用命令行工具对容器和镜像进行操作;命令行工具为在命令行界面提供用户交互的程序;命令行工具的可执行文件为linux平台代码。[0076]容器守护运行单元62,用于在容器启动后,触发用于记录容器输入输出及日志信息的容器守护程序处于运行状态。[0077]容器守护停止单元63,用于在容器停止后,触发所述容器守护程序退出运行状态。[0078]在一些具体实施例中,采用crun作为容器运行时。[0079]在一些具体实施例中,容器守护程序具体为conmon。[0080]在一些具体实施例中,对容器和镜像进行操作过程中涉及的容器仓库和镜像仓库,均采用uml类图设计。[0081]在一些具体实施例中,对容器进行操作包括创建、启动、停止、附加到、清理、列出和删除;对镜像进行操作包括拉取、构建、列出和删除[0082]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。[0083]在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。[0084]本说明书中各个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可,且本说明书中各实施例中记载的特征可以相互替换或者组合。[0085]对本发明所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献