CN114860344A - 容器启动方法、装置、计算机设备和存储介质 - Google Patents

容器启动方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN114860344A
CN114860344A CN202210581498.XA CN202210581498A CN114860344A CN 114860344 A CN114860344 A CN 114860344A CN 202210581498 A CN202210581498 A CN 202210581498A CN 114860344 A CN114860344 A CN 114860344A
Authority
CN
China
Prior art keywords
mirror image
container
working node
mirror
node
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
CN202210581498.XA
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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202210581498.XA priority Critical patent/CN114860344A/zh
Publication of CN114860344A publication Critical patent/CN114860344A/zh
Pending legal-status Critical Current

Links

Images

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/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种容器启动方法、装置、计算机设备和存储介质;其中,容器启动方法包括:响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像;若监测到工作节点上不存在镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点;响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,以指示容器基于目标目录从远端镜像仓库中读取镜像完成容器启动。本申请可以解决冷启动耗时时间长的问题。

Description

容器启动方法、装置、计算机设备和存储介质
技术领域
本申请涉及云计算技术领域,特别是涉及一种容器启动方法、装置、计算机设备和存储介质。
背景技术
随着Kubernetes和云原生技术的大爆发,容器在企业内部的大规模应用已经越来越广泛。部署启动快是容器的核心优势之一,此处的启动快是指本地镜像实例化的时间非常短,即“热启动”时间短。然而对于“冷启动”,即在本地无镜像的情况下,需要先从镜像仓库下载镜像才能创建容器。
目前,业务的镜像经过长期维护和更新,无论是镜像层数还是整体大小都会达到一个较大的量级,比如可能达到数百MB或者几个GB。因此生产环境中,容器的冷启动往往耗时数分钟,并且随规模扩大会导致镜像仓库因集群内网络拥堵而无法快速地下载镜像。
为了加速容器启动速度,包括如下三种传统方案:镜像缓存,预加载以及减小镜像大小,然而,预加载只能缓解部分镜像的时延,减少镜像大小则无法避免某些场景需要用到大体积的镜像的情况下。目前的传统方法,存在冷启动耗时时间长的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够快速启动的容器启动方法、装置、计算机设备和存储介质。
第一方面,本申请提供了一种容器启动方法,方法包括:
响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像;
若监测到工作节点上不存在镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点;
响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,以指示容器基于目标目录从远端镜像仓库中读取镜像完成容器启动。
在其中一个实施例中,响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像的步骤,包括:
启动监测进程,并通过监测进程利用List-Watch机制,确认当前分配至各工作节点上的容器;
获取容器的镜像信息,并判断工作节点上是否存在对应镜像信息的镜像。
在其中一个实施例中,监测工作节点上是否存在对应容器的镜像的步骤,包括:
若容器属于首次部署在工作节点上,则确认工作节点上不存在对应容器的镜像;
若容器属于非首次部署在工作节点上,则获取容器的镜像信息,并根据镜像信息确定工作节点上是否存在对应容器的镜像。
在其中一个实施例中,方法还包括步骤:
根据镜像信息,确定目标镜像中是否存在对应容器的镜像;目标镜像包括工作节点中经容器运行组件响应守护进程下发的镜像拉取任务、从远端镜像仓库拉取得到的镜像;
若目标镜像中存在对应容器的镜像,则指示容器在启动时基于镜像完成容器启动。
在其中一个实施例中,方法还包括步骤:
对容器的容器镜像进行分层,得到具有各分层镜像的Docker镜像;
将Docker镜像推送至远端镜像仓库,得到对应容器的镜像。
在其中一个实施例中,守护进程的运行模式为异步运行模式;
镜像拉取任务包括分别对应各分层镜像的子任务;子任务用于指示容器运行组件调用本组件接口,将对应的分层镜像拉取至工作节点。
在其中一个实施例中,目标目录包括镜像存放目录;
响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下的步骤,包括:
采用基于FUSE的文件系统CRFS,为镜像的各分层镜像在工作节点上创建目录,得到镜像存放目录;
将远端镜像仓库中的镜像映射到镜像存放目录下。
第二方面,本申请还提供了一种容器启动装置,装置包括:
节点监测模块,用于响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像;
镜像拉取模块,用于若监测到工作节点上不存在镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点;
镜像挂载模块,用于响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,以指示容器基于目标目录从远端镜像仓库中读取镜像完成容器启动。
第三方面,本申请还提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述的方法的步骤。
第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的方法的步骤。
上述容器启动方法、装置、计算机设备和存储介质,能够监控集群内的容器和工作节点,当观察到当容器绑定到工作节点上时,如果在该工作节点上未发现对应容器的镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件,指示容器运行组件从远端镜像仓库将对应的镜像拉取至工作节点,进而响应于镜像拉取任务的下发,本申请提出在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,从而,容器启动时可以直接读取远端镜像仓库中的文件,完成容器的快速启动。进一步的,基于本申请,容器启动和镜像拉取可异步进行,即使容器发生重启或者重新部署时,也可以使用这些已经拉取的镜像,进一步提高容器冷启动速度。
附图说明
图1为一个实施例中容器启动方法的流程示意图;
图2为一个实施例中镜像制作的流程示意图;
图3为另一个实施例中容器启动方法的流程示意图;
图4为一个实施例中容器启动装置的结构框图;
图5为一个实施例中计算机设备的内部结构图;
图6为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使本申请的公开内容更加透彻全面。除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。在此使用时,单数形式的“一”、“一个”和“所述/该”也可以包括复数形式,除非上下文清楚指出另外的方式。还应当理解的是,术语“包括/包含”或“具有”等指定所陈述的特征、整体、步骤、操作、组件、部分或它们的组合的存在,但是不排除存在或添加一个或更多个其他特征、整体、步骤、操作、组件、部分或它们的组合的可能性。同时,在本说明书中使用的术语“和/或”包括相关所列项目的任何及所有组合。
以下介绍本申请实施例所涉及的技术术语:
Kubernetes由Master和Node组成,Master负责管理容器的编排、部署、调度等,Node是容器运行的载体,Node即虚拟机,每个Node上面可以运行成百上千个Pod容器。
Pod容器:Pod是Kubernetes创建或者部署的最小单位,一个Pod封装一个或者多个容器,存储资源及管理控制容器的运行方式的策略选项。
目前,为了加速容器启动速度,针对加速镜像拉取传统有如下三种方案:镜像缓存,预加载以及减小镜像大小。
①镜像缓存;镜像缓存就是在各运行容器的宿主机上缓存拉取过的镜像层,并Kubernetes的容器启动时将启动参数之一的imagePolicy为IfNotPresent,镜像的分层让不同镜像之间可以对层进行共享,从而减少拉取其他镜像的时延。
②预加载;预加载也是在各宿主机上预先加载一部分关键镜像(例如tensorflow,ubuntu等),拉取其他镜像时,部分镜像层会命中镜像仓库的缓存,从而降低拉取时延。然而这种方法在刚上架的宿主机上没有缓存的镜像或imagePolicy为Always的场景下表现不佳,且预加载只能缓解部分镜像的时延,为了增加命中,也会消耗大量宿主机的磁盘空间。
③减小镜像大小;由于镜像每层级都是保存镜像的上一版本和当前版本之间的差异,为了减少层与层之间的变化,通过修改Dockerfile将不变的层写到上层,该方式需要熟练掌握Dockerfile命令,同时无法避免某些场景需要用到大体积的镜像,比如机器学习镜像。
以上可知,目前的传统方法存在冷启动耗时时间长的问题。为了解决容器的冷启动耗时时间长的问题,本申请提供了一种基于延迟镜像拉取的Kubernetes容器快速启动方法。为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种容器启动方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
步骤102,响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像。
具体而言,本申请中的工作节点可以指容器运行的载体,每个工作节点上面可以运行成百上千个容器。在其中一个实施例中,工作节点为Kubernetes集群节点,本申请中的工作节点可以指Kubernetes中的Node;Node可以指虚拟机。
进一步的,在容器绑定至工作节点的情况下,本申请可以监测工作节点上是否存在对应容器的镜像。其中,本申请可以启动一个监控进程(例如,监测进程):观察到当容器绑定到节点(工作节点)上时,监控本机(宿主机)上的镜像,未找到对应的镜像时,确定在该节点上未发现容器对应的镜像。
进一步的,可以获取容器的镜像信息,并判断工作节点上是否存在对应镜像信息的镜像。需要说明的是,本申请中的镜像信息可以指用于表征容器镜像(未经镜像制作的镜像)的信息,利用该信息可以确定工作节点上是否有对应的镜像;此外,镜像信息也可以指用于表征远端镜像仓库中对应容器的镜像(经过镜像制作的镜像)的信息;其中,镜像制作可以指本申请所提出的对容器镜像的分层。
在其中一个实施例中,响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像的步骤,包括:
启动监测进程,并通过监测进程利用List-Watch机制,确认当前分配至各工作节点上的容器;
获取容器的镜像信息,并判断工作节点上是否存在对应镜像信息的镜像。
具体而言,本申请可以启动监测进程,该监测进程可以是一个常驻的进程;进而通过该监测进程利用List-Watch机制,确认当前分配至(部署至)各工作节点上的容器;例如,监测分发到当前宿主机上的容器有哪些,获取到这些容器内的镜像信息,进而判断当前宿主机上是否存在对应的镜像。
在一些示例中,本申请可以采用部署在工作节点上的镜像延迟加载工具,来实现上述监测进程的配置及启动,该镜像延迟加载工具可以在宿主机环境准备的过程中安装至工作节点中;进而,本申请通过在每个节点上部署一个镜像延迟加载工具来实现后续远端镜像仓库挂载、延迟拉取分层镜像等功能。
以工作节点为Kubernetes的Node节点为例,每个Node节点上都可以启动一个镜像延迟加载工具,该工具可以启动一个常驻的进程(监测进程),通过List和Watch机制,监测分发到当前宿主机上的容器有哪些,获取到这些容器内的镜像信息,进而判断当前宿主机上是否存在镜像,当不存在镜像时,启动镜像挂载逻辑以使容器快速启动,同时启动镜像分层拉取的逻辑,将每一层的镜像拉取到本地。
在其中一个实施例中,镜像延迟加载工具可以采用Kubernetes自定义资源CRD部署在Kubernetes集群节点中。
具体而言,镜像延迟加载工具可以是CRD方式安装在Kubernetes集群中;其中,CRD可以是Kubernetes提供的自定义资源的功能,即可自己编写Kubernetes的一种新资源及功能来实现相关的操作,这类自定义资源可以调Kubernetes原生的接口,类似Kubernetes中的一个插件。本申请镜像延迟加载工具属于CRD插件工具。
本申请镜像延迟加载工具安装方便,该工具以CRD的资源运行Kubernetes集群中,以容器化方式运行,不受操作系统影响。本申请的镜像延迟加载工具可以实现监控守护进程的启动。传统方案中,容器启动时需要等待镜像完全下载到本地宿主机上,才能进行容器启动工作,而本申请则部署了监控守护进程,配合后续镜像挂载、镜像拉取,实现容器快速启动。
在其中一个实施例中,监测工作节点上是否存在对应容器的镜像的步骤,包括:
若容器属于首次部署在工作节点上,则确认工作节点上不存在对应容器的镜像;
若容器属于非首次部署在工作节点上,则获取容器的镜像信息,并根据镜像信息确定工作节点上是否存在对应容器的镜像。
具体而言,本申请中对应容器的镜像是推送至远端镜像仓库中的,经分层制作而得到镜像。进而,本申请可以配合集群中对节点和容器的调度,当容器是首次部署(配置或调度)在某一个工作节点上时,可以确定该工作节点上不存在对应该容器的镜像(进而可以通过后续的挂载、拉取等实现容器快速启动)。需要说明的是,当容器是首次部署(配置或调度)在某一个工作节点上时,也可以获取该容器的镜像信息,以确认工作节点上是否存在对应该容器的镜像。
容器属于非首次部署在工作节点可以指容器是经调度再次部署在该工作节点;而当容器属于非首次部署在工作节点上,则需要获取容器的镜像信息,并根据镜像信息确定工作节点上是否存在对应容器的镜像,从而,在容器发生重启或者重新部署时,能够直接使用工作节点上对应的镜像(即使用已经拉取的镜像),进一步提高容器冷启动速度。
在其中一个实施例中,方法还包括步骤:
根据镜像信息,确定目标镜像中是否存在对应容器的镜像;目标镜像包括工作节点中经容器运行组件响应守护进程下发的镜像拉取任务、从远端镜像仓库拉取得到的镜像;
若目标镜像中存在对应容器的镜像,则指示容器在启动时基于镜像完成容器启动。
具体而言,当确定容器属于非首次部署在工作节点上,则可以获取容器的镜像信息,并在目标镜像(已经拉取的镜像)中寻找对应容器的镜像。若确定能够目标镜像中存在对应容器的镜像,则表示该工作节点已经针对该容器制作过镜像,并完成了镜像拉取;进而,该对应于容器的已经拉取的镜像可以用来指示容器在启动时基于该镜像完成容器启动。
步骤104,若监测到工作节点上不存在镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点;
具体而言,若监测到工作节点上不存在对应容器的镜像信息的镜像的情况下,确定在工作节点上未发现镜像。此时,本申请提出启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;该镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点。
在一些示例中,在监测到工作节点上不存在对应容器的镜像时,本申请提出启动守护进程,以从远端镜像仓库中拉取镜像至工作节点。
进一步的,在其中一个实施例中,守护进程的运行模式为异步运行模式。即本申请中的守护进程可以指异步守护进程。在容器启动过程中,本申请可以启动镜像的拉取,容器启动和镜像拉取可异步进行,后续如果容器发生重启或者重新部署时,可以使用这些已经下载的镜像,进一步提高容器冷启动速度。
在其中一个实施例中,本申请可以应用于部署在工作节点上的镜像延迟加载工具;该守护进程可以由该镜像延迟加载工具启动并运行。
具体而言,本申请容器启动可以应用于部署在工作节点上的镜像延迟加载工具,由镜像延迟加载工具实现容器快速启动。其中,在容器的启动过程中,镜像延迟加载工具可以启动并运行异步守护进程,该异步守护进程被配置为可以配合容器运行组件将镜像分层拉取至工作节点。本申请提出使用守护进程延迟拉取镜像,可以启动一个异步守护进程,在每个宿主机后台默默运行,在容器启动时,该进程将远程镜像仓库中的镜像拉取到本地,容器启动和镜像拉取可异步进行。
在其中一个实施例中,本申请通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点。
具体而言,本申请中的远端镜像仓库可以指Dockerhub。远端镜像仓库中的镜像可以是经镜像制作后推送至远端镜像仓库的,进而配合远端挂载镜像及拉取镜像的实现。
本申请中的容器运行组件可以指Containerd;上述异步守护进程可以为Containerd的插件。本申请可以在每个节点上运行一个守护进程,并将其配置为Containerd的插件,能够启动一个后台程序,下载每一层的镜像文件。
需要说明的是,在本申请中,可以采用配合预设版本的Containerd实现上述功能。在一些示例中,Containerd版本可以高于1.4.2。进一步的,该预设版本的Containerd支持使用lazy-pulling方式拉取镜像。
在其中一个实施例中,镜像拉取任务可以包括分别对应各分层镜像的子任务;子任务用于指示容器运行组件调用本组件接口,将对应的分层镜像拉取至工作节点。
具体而言,本申请中工作节点上对应容器的镜像可以指经分层制作得到具有分层镜像的镜像。进而,镜像拉取任务可以包括分别对应各分层镜像的子任务;该子任务可以用于指示容器运行组件调用本组件接口,将对应的分层镜像拉取至工作节点。
以本申请应用于上述镜像延迟加载工具为例,结合Containerd的lay-pulling特性,镜像延迟加载工具在监测到本地没有容器运行的镜像时,启动异步守护进程,该守护进程可以通过调用Containerd的接口下发各层镜像信息,最终由Containerd完成镜像的拉取。
进一步的,镜像延迟加载工具可以监控本机上的镜像信息,未找到镜像时,通过挂载实现容器的启动,而在容器的启动过程中,调用异步拉取镜像的逻辑,从远端镜像仓库拉取镜像,例如,下发镜像拉取任务给Containerd。其中,该镜像拉取任务可以指分层镜像拉取任务。
本申请中的镜像延迟加载工具可以理解为是延迟加载镜像的插件;该插件在默认情况下可以将镜像的某一层从Dockerhub镜像仓库中远程的挂载到目标主机后,创建一个后台任务去缓存镜像层(从镜像仓库下载镜像层到Node节点上)。
本申请通过自定义CRD资源,部署在集群中,每个节点上都会启动镜像延迟加载工具,该工具通过监控集群内的容器、镜像,查询Kubernetes的接口,观察到当容器绑定到节点上时,如果在该节点上未发现镜像,镜像延迟加载工具可以启动一个拉取镜像的守护进程,完成镜像的拉取;同时,从远端将对应的镜像挂载到本机的目标目录下,容器在启动时读取该目录下的镜像信息,完成镜像的快速启动。
步骤106,响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,以指示容器基于目标目录从远端镜像仓库中读取镜像完成容器启动。
具体而言,当通过守护进程下发镜像拉取任务至容器运行组件时,本申请可以在工作节点上创建目标目录,进而将远端镜像仓库中的镜像挂载至目标目录下,该挂载至工作节点目标目录下、来源于远端镜像仓库的镜像,可以用于指示容器基于该目标目录从远端镜像仓库中读取镜像完成容器启动。
进一步的,镜像拉取任务的下发可以指当前将有拉取镜像的操作发生;本申请中,守护进程下发镜像拉取任务至容器运行组件时(拉取尚未发生),可以从远端镜像仓库挂载对应容器的镜像至工作节点。其中,本申请中的远端镜像仓库可以指Dockerhub。远端镜像仓库中的镜像可以是经镜像制作后推送至远端镜像仓库的,进而配合远端挂载镜像及拉取镜像的实现。
本申请支持直接通过远程镜像仓库挂载镜像到本地,而通过远端挂载镜像到本地,容器启动可以秒级完成。经过从远端镜像仓库挂载对应容器的镜像至工作节点,在容器启动过程中,如果容器需要的文件没有在本地缓存(例如,监测到工作节点上不存在镜像信息),会使用远端镜像仓库中的镜像层。故容器启动时,镜像没有下载到本地,容器可以通过读取远端镜像仓库中的镜像来实现容器启动过程中所需的启动文件,在网络稳定的情况下,容器启动也能达到瞬间启动。
在其中一个实施例中,目标目录可以包括镜像存放目录;
响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下的步骤,包括:
采用基于FUSE的文件系统CRFS,为镜像的各分层镜像在工作节点上创建目录,得到镜像存放目录;
将远端镜像仓库中的镜像映射到镜像存放目录下。
具体而言,本申请可以通过基于FUSE的文件系统CRFS,从远程镜像仓库挂载镜像到本地。在另一些示例中,可以通过部署在工作节点上的镜像延迟加载工具来实现挂载,具体的,镜像延迟加载工具可以在容器启动的时候,将远程镜像仓库中的对应的镜像挂载到本地目录下(/run/Containerd-img/$hash目录下,其中,$hash表示镜像存放的目录)。又如,镜像延迟加载工具可以将远端镜像仓库中的镜像层映射到本地的/run/Containerd-img/$hash目录下,其中$hash表示镜像存放的目录。
在其中一个实施例中,工作节点可以采用基于FUSE的文件系统CRFS;
具体而言,本申请在工作节点上使用FUSE(Filesystem in userspace)文件系统,使用FUSE实现了用户态的文件系统。进一步的,以工作节点为Kubernetes的Node节点为例,本申请在Node节点环境准备(宿主机环境准备)过程中,使用FUSE的CRFS文件系统,即宿主机文件系统(FUSE),为镜像的每一层在宿主机下创建一个目录,执行实现一个文件系统的逻辑,并将这个文件系统挂载到刚创建的目录上。在容器启动过程中,如果容器需要的文件没有在本地缓存,直接读取远端镜像仓库中的文件,使容器启动秒级完成,例如1G以上的镜像,容器启动基本可以实现5秒内完成。
当有拉取镜像的操作发生时,本申请会为镜像的每一层在宿主机下创建一个目录,执行实现一个文件系统的逻辑,并将这个文件系统挂载到刚创建的目录上。本申请通过从远端镜像仓库挂载对应容器的镜像至工作节点,使得容器启动时读取相应目录下的镜像信息,完成镜像的快速启动。
以上,本申请的延迟拉取的进程和容器启动相互解耦,能同步进行,即在容器启动时候发现“镜像延迟加载工具”本地没有相关的镜像时,通过网络将远程的镜像挂载到本地机器(宿主机)上,挂载是瞬间完成的事情,进而容器能在镜像未拉取到本地时就能先启动,同时该工具可以启动一个守护进程拉取镜像,后续如果容器发生重启或者重新部署时,会使用这些已经下载的镜像。
在一个实施例中,如图2所示,方法还包括步骤:
步骤202,对容器的容器镜像进行分层,得到具有各分层镜像的Docker镜像;
步骤304,将Docker镜像推送至远端镜像仓库,得到对应容器的镜像。
具体而言,本申请提出可以通过工具将镜像进行分层,制作预设格式的Docker镜像,该Docker镜像具有各分层镜像;然后将Docker镜像传送到Dockerhub镜像仓库中,得到对应容器的镜像。
其中,通过对容器的容器镜像进行分层得到预设格式的Docker镜像,使得镜像分层下载,无需一次性下载。传统的镜像格式为tar.gz压缩,无法索引且乱序,容器启动时需要等待镜像完全下载到本地宿主机上,才能进行容器启动工作。而本申请提出的预设格式,可以实现将Docker镜像每一层tar文件都被压缩成gzip格式,进而,在容器启动时,分层挂载(下载)到Node节点上,从而实现容器快速启动。
需要说明的是,Docker镜像可以是一组只读的目录组成,一个新镜像是从base(基础镜像,即Dockerfile中的FROM镜像)镜像一层一层叠加生成。每安装一个软件、拷贝、删除等的操作,会在现有镜像的基础上增加一层。本申请通过镜像分层实现共享资源,例如,有多个镜像都从相同的base镜像构建而来,DockerHost只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享。
进一步的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
在其中一个实施例中,预设格式的Docker镜像包括stargz格式的Docker镜像。
具体而言,本申请中的stargz格式是Seekabletar.gz的缩写,可以指一种存档压缩格式;通过stargz格式的镜像,本申请可以有选择地从存档中搜寻并提取特定的文件,无需扫描整个镜像数据块(blob)。其中,可以通过如下几种工具来切换镜像格式:ctr-remote(由startgz-snapshotter开发的容器化CTL),nerdctl以及Knaiko。
传统方案中的容器镜像是由tar.gz文件表示,gzip流是不可搜索,且tar文件也没有索引,即使读取1KB的文件也要从远程镜像仓库拉取整个镜像。当镜像1G及以上的时候,拉取就非常耗时。而本申请提出使用stargz格式的镜像,该格式的镜像,每个tar条目都被压缩成gzip格式,stargz是所有gzip的组合,对于大文件来说,会被分成多个gzip,进而在拉取镜像的时候可以单拉取某个gzip层的镜像,加速容器拉取速度。本申请使用stargz格式的镜像,为镜像延迟加载工具分层下载镜像做准备。
以上,本申请先利用stargz转换工具将镜像转为stargz格式的镜像,后续通过在每个节点上部署一个镜像延迟加载工具来实现远端镜像仓库挂载、延迟拉取分层镜像功能。
为了进一步说明本申请的方案,下面以工作节点为Kubernetes的Node节点为例进行阐释,如图3所示,本申请的实现过程可以包括:镜像制作、推送仓库、Kubernetes的Node节点宿主机环境准备以及容器启动四个方面。
其中,镜像制作可以包括通过工具将镜像进行分层,制作stargz格式的Docker镜像。推送仓库可以包括将镜像传送到Dockerhub镜像仓库中。Kubernetes的Node节点宿主机环境准备可以包括:①节点上使用FUSE文件系统,为镜像的每一层在宿主机下创建一个目录,执行实现一个文件系统的逻辑,并将这个文件系统挂载到刚创建的目录上,进而,通过镜像延迟加载工具在容器启动的时候(发生镜像拉取操作的时候),将远程仓库中的对应的镜像挂载到本地目录下;②镜像延迟加载工具在每个节点上运行一个守护进程,将其配置为Containerd的插件,该守护进程会启动一个后台程序,下载每一层的镜像文件。
本申请中的容器启动可以包括:镜像延迟加载工具默认情况下将镜像的某一层从Dockerhub镜像仓库中远程的挂载到目标主机后,然后创建一个后台任务去缓存镜像层(从镜像仓库下载镜像层到Node节点上),在容器启动过程中,如果容器需要的文件没有在本地缓存,会使用远端的仓库中的镜像层。进而容器启动时,镜像没有下载到本地,容器可以通过读取远端镜像仓库中的镜像来实现容器启动过程中所需的启动文件,在网络稳定的情况下,容器启动也能达到瞬间启动。
以上,本申请提出了一种基于延迟镜像拉取的Kubernetes容器快速启动方法,完成容器的快速启动。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的容器启动方法的容器启动装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个容器启动装置实施例中的具体限定可以参见上文中对于容器启动方法的限定,在此不再赘述。
在一个实施例中,如图4所示,提供了一种容器启动装置,装置包括:
节点监测模块410,用于响应于容器绑定至工作节点,监测工作节点上是否存在对应容器的镜像;
镜像拉取模块420,用于若监测到工作节点上不存在镜像,则启动守护进程,并通过守护进程下发镜像拉取任务至容器运行组件;其中,镜像拉取任务用于指示容器运行组件从远端镜像仓库中拉取镜像至工作节点;
镜像挂载模块430,用于响应于镜像拉取任务的下发,在工作节点上创建目标目录,并将远端镜像仓库中的镜像挂载至目标目录下,以指示容器基于目标目录从远端镜像仓库中读取镜像完成容器启动。
在其中一个实施例中,节点监测模块410包括:
进程启动模块,用于启动监测进程,并通过监测进程利用List-Watch机制,确认当前分配至各工作节点上的容器;
镜像信息获取模块,用于获取容器的镜像信息,并判断工作节点上是否存在对应镜像信息的镜像。
在其中一个实施例中,节点监测模块410,用于若容器属于首次部署在工作节点上,则确认工作节点上不存在对应容器的镜像;以及用于若容器属于非首次部署在工作节点上,则获取容器的镜像信息,并根据镜像信息确定工作节点上是否存在对应容器的镜像。
在其中一个实施例中,节点监测模块410包括:
镜像确定模块,用于根据镜像信息,确定目标镜像中是否存在对应容器的镜像;目标镜像包括工作节点中经容器运行组件响应守护进程下发的镜像拉取任务、从远端镜像仓库拉取得到的镜像;
启动指示模块,用于若目标镜像中存在对应容器的镜像,则指示容器在启动时基于镜像完成容器启动。
在其中一个实施例中,装置还包括:
镜像分层模块,用于对容器的容器镜像进行分层,得到具有各分层镜像的Docker镜像;
镜像推送模块,将Docker镜像推送至远端镜像仓库,得到对应容器的镜像。
在其中一个实施例中,守护进程的运行模式为异步运行模式;
镜像拉取任务包括分别对应各分层镜像的子任务;子任务用于指示容器运行组件调用本组件接口,将对应的分层镜像拉取至工作节点。
在其中一个实施例中,目标目录包括镜像存放目录;
镜像挂载模块430包括:
目录创建模块,用于采用基于FUSE的文件系统CRFS,为镜像的各分层镜像在工作节点上创建目录,得到镜像存放目录;
映射模块,用于将远端镜像仓库中的镜像映射到镜像存放目录下。
上述容器启动装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储镜像等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种容器启动方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种容器启动方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5、6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述容器启动方法的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述容器启动方法的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述容器启动方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (10)

1.一种容器启动方法,其特征在于,所述方法包括:
响应于容器绑定至工作节点,监测所述工作节点上是否存在对应所述容器的镜像;
若监测到所述工作节点上不存在所述镜像,则启动守护进程,并通过所述守护进程下发镜像拉取任务至容器运行组件;其中,所述镜像拉取任务用于指示所述容器运行组件从远端镜像仓库中拉取所述镜像至所述工作节点;
响应于所述镜像拉取任务的下发,在所述工作节点上创建目标目录,并将所述远端镜像仓库中的所述镜像挂载至所述目标目录下,以指示所述容器基于所述目标目录从所述远端镜像仓库中读取所述镜像完成容器启动。
2.根据权利要求1所述的方法,其特征在于,所述响应于容器绑定至工作节点,监测所述工作节点上是否存在对应所述容器的镜像的步骤,包括:
启动监测进程,并通过所述监测进程利用List-Watch机制,确认当前分配至各所述工作节点上的所述容器;
获取所述容器的镜像信息,并判断所述工作节点上是否存在对应所述镜像信息的所述镜像。
3.根据权利要求1所述的方法,其特征在于,所述监测所述工作节点上是否存在对应所述容器的镜像的步骤,包括:
若所述容器属于首次部署在所述工作节点上,则确认所述工作节点上不存在对应所述容器的所述镜像;
若所述容器属于非首次部署在所述工作节点上,则获取所述容器的镜像信息,并根据所述镜像信息确定所述工作节点上是否存在对应所述容器的所述镜像。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括步骤:
根据所述镜像信息,确定目标镜像中是否存在对应所述容器的所述镜像;所述目标镜像包括所述工作节点中经所述容器运行组件响应所述守护进程下发的所述镜像拉取任务、从所述远端镜像仓库拉取得到的镜像;
若所述目标镜像中存在对应所述容器的所述镜像,则指示所述容器在启动时基于所述镜像完成容器启动。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括步骤:
对所述容器的容器镜像进行分层,得到具有各分层镜像的Docker镜像;
将所述Docker镜像推送至所述远端镜像仓库,得到对应所述容器的所述镜像。
6.根据权利要求5所述的方法,其特征在于,所述守护进程的运行模式为异步运行模式;
所述镜像拉取任务包括分别对应各所述分层镜像的子任务;所述子任务用于指示所述容器运行组件调用本组件接口,将对应的所述分层镜像拉取至所述工作节点。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述目标目录包括镜像存放目录;
所述响应于所述镜像拉取任务的下发,在所述工作节点上创建目标目录,并将所述远端镜像仓库中的所述镜像挂载至所述目标目录下的步骤,包括:
采用基于FUSE的文件系统CRFS,为所述镜像的各分层镜像在所述工作节点上创建目录,得到所述镜像存放目录;
将所述远端镜像仓库中的所述镜像映射到所述镜像存放目录下。
8.一种容器启动装置,其特征在于,所述装置包括:
节点监测模块,用于响应于容器绑定至工作节点,监测所述工作节点上是否存在对应所述容器的镜像;
镜像拉取模块,用于若监测到所述工作节点上不存在所述镜像,则启动守护进程,并通过所述守护进程下发镜像拉取任务至容器运行组件;其中,所述镜像拉取任务用于指示所述容器运行组件从远端镜像仓库中拉取所述镜像至所述工作节点;
镜像挂载模块,用于响应于所述镜像拉取任务的下发,在所述工作节点上创建目标目录,并将所述远端镜像仓库中的所述镜像挂载至所述目标目录下,以指示所述容器基于所述目标目录从所述远端镜像仓库中读取所述镜像完成容器启动。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
CN202210581498.XA 2022-05-26 2022-05-26 容器启动方法、装置、计算机设备和存储介质 Pending CN114860344A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210581498.XA CN114860344A (zh) 2022-05-26 2022-05-26 容器启动方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210581498.XA CN114860344A (zh) 2022-05-26 2022-05-26 容器启动方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN114860344A true CN114860344A (zh) 2022-08-05

Family

ID=82641613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210581498.XA Pending CN114860344A (zh) 2022-05-26 2022-05-26 容器启动方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN114860344A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115828231A (zh) * 2022-10-28 2023-03-21 广州汽车集团股份有限公司 应用程序运行方法、装置、车辆以及存储介质
WO2024066904A1 (zh) * 2022-09-29 2024-04-04 华为技术有限公司 一种容器创建方法、系统及节点

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190242A (zh) * 2021-06-08 2021-07-30 杭州朗澈科技有限公司 加速拉取镜像文件的方法和系统
CN113760453A (zh) * 2021-08-04 2021-12-07 南方电网科学研究院有限责任公司 容器镜像分发系统及容器镜像推送、拉取和删除方法
CN114416296A (zh) * 2022-01-11 2022-04-29 浪潮云信息技术股份公司 一种混合cpu构架大规模集群容器的启动提速方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190242A (zh) * 2021-06-08 2021-07-30 杭州朗澈科技有限公司 加速拉取镜像文件的方法和系统
CN113760453A (zh) * 2021-08-04 2021-12-07 南方电网科学研究院有限责任公司 容器镜像分发系统及容器镜像推送、拉取和删除方法
CN114416296A (zh) * 2022-01-11 2022-04-29 浪潮云信息技术股份公司 一种混合cpu构架大规模集群容器的启动提速方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024066904A1 (zh) * 2022-09-29 2024-04-04 华为技术有限公司 一种容器创建方法、系统及节点
CN115828231A (zh) * 2022-10-28 2023-03-21 广州汽车集团股份有限公司 应用程序运行方法、装置、车辆以及存储介质

Similar Documents

Publication Publication Date Title
US11567755B2 (en) Integration of containers with external elements
US11086725B2 (en) Orchestration of heterogeneous multi-role applications
JP6774499B2 (ja) オフラインでのハイブリッドアプリケーションへのアクセスの提供
EP3428811B1 (en) Database interface agent for a tenant-based upgrade system
US8701106B2 (en) Hashing storage images of a virtual machine
US20190220266A1 (en) Upgrading Bundled Applications In A Distributed Computing System
US11113158B2 (en) Rolling back kubernetes applications
CN109344000B (zh) 区块链网络服务平台、恢复工具及其故障处理方法、存储介质
CN108513657B (zh) 数据转换方法及备份服务器
CN114860344A (zh) 容器启动方法、装置、计算机设备和存储介质
US11347684B2 (en) Rolling back KUBERNETES applications including custom resources
CN110442430B (zh) 一种基于分布式存储容器云应用的发布方法
US11029932B2 (en) Hydration of applications
US20130227085A1 (en) Terminal and method for using cloud services
CN101719073A (zh) 一种基于智能客户端的按需下载实现方法
JP5375972B2 (ja) 分散ファイルシステム、そのデータ選択方法およびプログラム
CN107797767A (zh) 一种基于容器技术部署分布式存储系统及其存储方法
US20190171729A1 (en) Enhanced techniques for copying cloud stored files
CN114880100A (zh) 容器动态调度方法、装置、计算机设备和存储介质
CN111158851B (zh) 一种虚拟机快速部署方法
US11010408B2 (en) Hydration of a hierarchy of dehydrated files
US10834193B2 (en) Scheduled retrieval of shared content
CN111221623A (zh) 镜像库管理系统
CN116760913B (zh) k8s集群协议转换平台配置下发方法及系统
CN114201465A (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