掌桥专利:专业的专利平台
掌桥专利
首页

一种基于云盘制作镜像缓存加速容器启动的方法

文献发布时间:2024-04-18 20:02:18


一种基于云盘制作镜像缓存加速容器启动的方法

技术领域

本发明涉及Kubernetes云平台技术领域,特别涉及一种基于云盘制作镜像缓存加速容器启动的方法。

背景技术

从容器技术诞生以来,镜像技术极大方便开发人员创建和交付云原生应用,让开发人员打包应用文件和组件的轻量级软件包,发布到镜像仓库上以便重复利用,镜像仓库负责保存分发镜像文件。

OCI Image Format,开放容器镜像格式标准,包含manifest、config、index和zip压缩包等文件,这些文件共同作用构建容器根目录所需文件。从制作镜像到容器使用镜像,是一个正向反向操作,制作镜像则是压缩上传文件到仓库,使用镜像是下载解析解压过程。

containerd,一种容器运行时,提供OCI Image操作能力,按照OCI标准制作镜像和使用镜像启动容器,提供容器运行时接口CRI插件,Kubernetes通过GRPC方式调用CRI操作容器,包括启动容器、销毁容器等。

containerd snapshot,containerd中一个插件,用于管理文件系统上的容器镜像的快照,为容器提供rootfs制作、挂载和卸载等操作功能。

容器启动需要经过以下阶段:1.从镜像仓库拉取镜像文件;2.解析镜像文件,解压镜像文件压缩包;3.基于镜像文件制作容器启动目录;4.准备网络环境……启动容器。从远程仓库拉取镜像,并解压文件依赖网络连通情况需消耗较长时间和大量CPU算力。

随着基于Kubernetes平台普及和发展,不需要开发人员管理的服务器的Serverless技术快速发展,基于Serverless的云原生开发模型,开发人员可快速构建、部署、运行应用程序。对比部署主机后再创建Kubernetes集群再部署Pod的方式,Serverless部署让开发人员只关心业务实例的发布和运行,实现快速扩缩集群实例,弹性伸缩容量,充分发挥Kubernetes编排能力。但镜像的拉取与准备扔耗费大量时间,降低编排效率。containerd已提出Stargz Snapshotter等解决方案,但需修改镜像格式,引入新的组件,增加系统的复杂度与运维成本。

云厂商云盘,是一种高可用、高可靠、低成本、可定制化的块存储设备。可作为服务器独立扩展磁盘使用。

发明内容

本专利提出一种基于云盘制作镜像缓存加速容器启动的方法。对于基于Serverless部署的应用,拉取镜像、解析镜像准备容器rootfs的耗时显得尤为突出。且对于实例扩容,拉取镜像、解压、准备容器启动根目录是重复的工作,把这些重复工作压缩或减少可大幅降低容器实例启动耗时。同时,基于ceph的分布式存储在集群内部挂载可实现低延迟访问,对比需要访问外部网络远程仓库,访问内部网络分布式存储耗时可忽略,实现高速读取文件。在Serverless平台部署应用时,开发人员会遇到如下问题:1、启动容器拉取镜像,准备容器镜像时等待较长时间,无法满足Serverless对比普通Kubernetes集群快速启动弹性伸缩的特点;2、在遇到流量突涨时,无法快速增加容器实例应对流量冲击。

本专利尝试使用块存储快照能力保存容器根目录快照,在启动容器时使用云盘快照生成磁盘实例,并挂载到本地目录,使用挂载磁盘制作容器启动目录,缩减从远程镜像仓库拉取镜像文件、解压等耗时,实现容器秒级启动,弹性伸缩容。

本发明的技术方案如下:

一种基于云盘制作镜像缓存加速容器启动的方法,该方法包括如下步骤:

S1、利用Kubernetes CustomResource和Operator模式进行镜像缓存管理;

S2、利用云盘功能和云盘快照功能完成镜像缓存制作与使用。

本发明进一步的改进在于,所述S1中镜像缓存管理包括以下具体步骤:

S11、创建Kubernetes ImageCache CustomResourceDefinition配置文件,并加载到Kubernetes集群中;

S12、在创建Pod时,查询ImageCache列表,与Pod镜像比较,镜像名称与版本相同则匹配镜像缓存,更新ImageCache状态,否则不匹配,新建镜像缓存ImageCache;

S13、删除镜像缓存,使用Kubernetes kubectl delete命令删除CustomResource,并删除云盘快照;

S14、删除过期镜像缓存,Kubernetes集群内独立启动CronJob容器,比较ImageCache的CreateTime+retentionDays是否大于当前时间,是则更新为删除状态并执行删除操作。

本发明进一步的改进在于,所述S1中CustomResource定义镜像缓存必要属性,具体内容包含镜像缓存ID、镜像名称、所需磁盘容量大小。

本发明进一步的改进在于,所述S1中Operator负责管理CustomResource生命周期,并在不同状态完成不同工作。

本发明进一步的改进在于,所述S2中镜像缓存制作包括以下具体步骤:

S21、在新建Pod时,通过Pod Annotation标记容器进行新建镜像缓存或使用镜像缓存操作;

S22、新建镜像缓存,创建新的ImageCache CustomResource,ImageCacheOperator接收到CustomResource事件后开始施工制作镜像缓存。

本发明进一步的改进在于,所述S21中通过Pod Annotation标记容器进行新建镜像缓存或使用镜像缓存操作的具体内容为:若命中镜像缓存,则添加Annotation,key为example.com/matched-image-cache,值为镜像缓存ID,新建镜像缓存时,则添加Annotation,key为example.com/imc-id,值为镜像缓存ID。

本发明进一步的改进在于,所述S22包括以下具体步骤:

S221、生成新的云盘实例,挂载到Pod所在主机镜像缓存目录`/data/imc-xxx`;

S222、在Pod容器启动后,查询容器snapshot信息,复制snapshot子目录至`/data/imc-xxx/snapshots`下,复制snapshot组件metadata.db文件至镜像缓存目录;

S223、使用ctr image export命令导出镜像压缩包至`/data/imc-xxx`目录;

S224、使用`/data/imc-xxx`目录文件生成云盘快照。

本发明进一步的改进在于,所述S2中镜像缓存使用的具体内容为:更新ImageCache CustomResource LastMatched字段为PodName,ImageCache Operator收到更新事件后开始施工为容器准备镜像缓存。

本发明进一步的改进在于,所述S2中镜像缓存使用包括以下具体步骤:

S225、通过镜像缓存ID查询云盘快照,以云盘快照生成云盘实例;

S225、将云盘实例挂载至Pod所在主机目录`/data/imc-xxx`;

S226、使用ctr image import命令导入镜像,容器rootfs目录使用`/data/imc-xxx`作为挂载信息。

本发明进一步的改进在于,所述S2中镜像缓存使用时,以镜像缓存云盘快照生成云盘实例,挂载在Node所在主机上,containerd以云盘实例文件制作容器rootfs。

本发明的技术效果如下:

提出一种基于云盘制作镜像缓存加速容器启动的方法,对比container原生解析镜像和containerd Stargz Snapshotter延迟加载镜像层的方式,实现镜像快照层复用,避免拉取镜像、解析镜像等耗时操作,实现容器秒级启动;实现ImageCache Oprator对CustomResource管理,无需入侵Kubernetes,利用Kubernetes拓展能力开发;基于内部网络访问镜像缓存,可避免外部网络连通质量的影响,容器rootfs只读层基于远程访问,突破本地磁盘访问密度限制。

附图说明

通过阅读参照以下附图所作的对非限制性实施例的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明实施例的一种基于云盘制作镜像缓存加速容器启动的方法的流程示意图;

图2为本发明实施例的一种基于云盘制作镜像缓存加速容器启动的方法的制作镜像缓存架构图;

图3为本发明实施例的一种基于云盘制作镜像缓存加速容器启动的方法的使用镜像缓存架构图;

图4为本发明实施例的一种基于云盘制作镜像缓存加速容器启动的方法的使用流程图;

图5为本发明实施例的一种基于云盘制作镜像缓存加速容器启动的方法的镜像缓存CustomResource状态流转过程图。

具体实施方式

实施例

本实施例提出了一种基于云盘制作镜像缓存加速容器启动的方法,通过对比container原生解析镜像和containerd Stargz Snapshotter延迟加载镜像层的方式,实现镜像快照层复用,避免拉取镜像、解析镜像等耗时操作,实现容器秒级启动;实现ImageCache Oprator对CustomResource管理,无需入侵Kubernetes,利用Kubernetes拓展能力开发;基于内部网络访问镜像缓存,可避免外部网络连通质量的影响,容器rootfs只读层基于远程访问,突破本地磁盘访问密度限制。

具体的,如图1所示,本实施例提出的一种基于云盘制作镜像缓存加速容器启动的方法,包括以下具体步骤:

S1、利用Kubernetes CustomResource和Operator模式进行镜像缓存管理;

S2、利用云盘功能和云盘快照功能完成镜像缓存制作与使用。

在本实施例中,所述S1中镜像缓存管理包括以下具体步骤:准备5台配置16GB内存、8核心CPU的主机,部署一个高可用(3个Master节点)的Kubernetes集群;每个节点部署容器运行时containerd;创建Kubernetes ImageCache CustomResourceDefinition配置文件,并加载到Kubernetes集群中;创建一个可用的ceph集群,提供与云盘同样的块存储功能;在创建Pod时,查询ImageCache列表,与Pod镜像比较,镜像名称与版本相同则匹配镜像缓存,更新ImageCache状态,否则不匹配,新建镜像缓存ImageCache;删除镜像缓存,使用Kubernetes kubectl delete命令删除CustomResource,并删除云盘快照;删除过期镜像缓存,Kubernetes集群内独立启动CronJob容器,比较ImageCache的CreateTime+retentionDays是否大于当前时间,是则更新为删除状态并执行删除操作。

在本实施例中,所述S1中CustomResource定义镜像缓存必要属性,具体内容包含镜像缓存ID、镜像名称、所需磁盘容量大小。

在本实施例中,所述S1中Operator负责管理CustomResource生命周期,并在不同状态完成不同工作。

在本实施例中,所述S2中镜像缓存制作包括以下具体步骤:在新建Pod时,通过PodAnnotation标记容器进行新建镜像缓存或使用镜像缓存操作;新建镜像缓存,创建新的ImageCache CustomResource,ImageCache Operator接收到CustomResource事件后开始施工制作镜像缓存。

在本实施例中,所述通过Pod Annotation标记容器进行新建镜像缓存或使用镜像缓存操作的具体内容为:若命中镜像缓存,则添加Annotation,key为example.com/matched-image-cache,值为镜像缓存ID,新建镜像缓存时,则添加Annotation,key为example.com/imc-id,值为镜像缓存ID。

在本实施例中,新建镜像缓存的具体实现操作为:生成新的云盘实例,挂载到Pod所在主机镜像缓存目录`/data/imc-xxx`;在Pod容器启动后,查询容器snapshot信息,复制snapshot子目录至`/data/imc-xxx/snapshots`下,复制snapshot组件metadata.db文件至镜像缓存目录;使用ctr image export命令导出镜像压缩包至`/data/imc-xxx`目录;使用`/data/imc-xxx`目录文件生成云盘快照。

在本实施例中,所述S2中镜像缓存使用的具体内容为:更新ImageCacheCustomResource LastMatched字段为PodName,ImageCache Operator收到更新事件后开始施工为容器准备镜像缓存,镜像缓存使用时,以镜像缓存云盘快照生成云盘实例,挂载在Node所在主机上,containerd以云盘实例文件制作容器rootfs。

在本实施例中,所述S2中镜像缓存使用包括以下具体步骤:通过镜像缓存ID查询云盘快照,以云盘快照生成云盘实例;将云盘实例挂载至Pod所在主机目录`/data/imc-xxx`;使用ctr image import命令导入镜像,容器rootfs目录使用`/data/imc-xxx`作为挂载信息。

技术分类

06120116581228