本发明涉及虚拟化领域,具体提供一种构建虚拟机镜像的方法。
背景技术:
在云计算蓬勃发展的今天,iaas基础平台逐渐走向iaas 方向,很多底层虚拟技术已经非常稳定成熟,当今主流的kvm已经成为虚拟化软件落地的首选。
kvm在linux中仅仅就是一个内核模块,对于用户使用来讲,用户能感知的就是kvm创建的虚拟机,这个虚拟机是怎么由来,目前常见的做法基本都是通过模板创建,常见的模板按照操作系统分为以下几类:windows、linux、unix等,通常创建这些虚拟机的方式有很多很多种。可以通过iso启动、usb启动、pxe启动、模板启动等等。usb的弊端是每个宿主机都需要外接一个硬件设备而且交付速度太慢,pxe需要单独pxeserver,而且安全性无法保证,控制不当可能会引起虚拟机重装等问题,因此在云的场景中以上的做法还是要谨慎选择的。
目前通用的做法都是通过模板克隆的方式进行创建。面对这么多的操作系统版本我们如何能做到自动化创建管理这些模板呢?传统的做法基本都是手动通过iso在虚拟化平台进行安装,安装完成后再把这个镜像导出测试,测试无误后进行部署使用,如果测试过程一旦发现有问题就需要手动重新构建。
因此在这个过程中需要大量的手工操作,面对windows这种还需要手动加载kvm驱动,而且在做的过程中镜像出现失败重装的问题,一般装一个版本的操作系统模板需要1-2个小时的时间,如果中途出现问题基本都需要重新安装。以上的这些方式普遍交付效率慢、标准化不统一,经常会出现少装包以及软件版本不对等问题。
技术实现要素:
本发明是针对上述现有技术的不足,提供一种实用性强的构建虚拟机镜像的方法。
本发明解决其技术问题所采用的技术方案是:
一种构建虚拟机镜像的方法,部署cod组件存放代码,在cod组件上面创建一个存镜像代码的仓库,仓库创建完成后开发者提交代码保存在代码仓库中;
ma组件用来编排和调度im,当cod发现代码更新后通知ma进行镜像的构建,im接到ma下发的任务开始执行构建任务。
作为优选,所述代码仓库使用github或gitlab基于git的协议,所述ma组件为jenkins、gitlab或hudson工具。
进一步的,ma组件创建编排任务,定义编排选项以及调度的im节点地址,同时会暴露一个restapi地址,这个地址携带token进行访问,暴露的restapi是给cod组件中的代码仓库进行webhook。
进一步的,进行webhook即,自动访问一个httpurl,这个httpurl是ma为每个任务提供的一个唯一地址,ma发现在这个地址被请求后,会自动根据url里面的任务id执行对应的任务,执行过程中会选择一个im节点。
进一步的,im节点收到指令会在指定的代码仓库拉取对应的分支代码,随后im节点调用镜像工具进行json文件加载并解析内部的数据结构,解析成功后开始构建,安装完成会根据ma的编排顺序ma触发im节点上面的rsync服务进行镜像同步到mi镜像服务器,此时完成镜像的构建和发布。
作为优选,json文件内容定义操作系统的版本、iso的位置、磁盘的大小、用户名、密码和安装后需要执行的脚本。
进一步的,云平台通过url进行镜像注册并通过创建虚拟机的方式来验证镜像是否满足当前的要求,如果镜像有问题不满足需要,则修改对应的解析文件然后提交至cod仓库,提交成功后再次触发。
进一步的,im组件针对kvm虚拟化平台进行镜像的构建,开始构建之前去cod上面拉取当前任务对应的代码分支,随后使用kvm虚拟化提供的工具检查代码里面的文件是否符合启动虚拟机的规则,如果满足则启动虚拟机,否则失败并反馈错误信息给开发者或者租户。
本发明的一种构建虚拟机镜像的方法和现有技术相比,具有以下突出的有益效果:
(1)本发明基于ci/cd理念自动化完成虚拟机镜像的构建,从而减少人员在反复构建镜像上面耗费的时间以及交付效率,效率可以提高5-6倍。
(2)方便扩展各种操作以及集成辅助工具到镜像内部,支持二次开发且可以和云平台集成。
(3)方便用户构建符合自己需要的镜像,为用户提供相关接口和使用手册,让用户可以在平台上面任意构建自己需要的镜像。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种构建虚拟机镜像的方法的流程示意图;
附图2是一种构建虚拟机镜像的方法的架构图;
附图3是一种构建虚拟机镜像的方法中文件解析过程图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
一种构建虚拟机镜像的方法,如下:
(1)、系统架构
如图2所示,本方法主要包括ma组件、im组件、ro组件、cod组件、mi组件。
ma组件主要负责编排和im组件的管理,编排构建过程以及调度im进行虚拟机镜像的构建。
im组件负责具体的虚拟机镜像构建,并维护每次的构建的历史记录,构建完成后推送到mi中进行发布并进行测试。
ro组件为im组件提供制作过程中使用到的软件包、驱动、工具,用于为每个操作系统版本提供相应的软件源以及驱动程序。
cod组件负责管理源代码为im拉取源代码并进行构建提供服务。
mi组件用于维护构建完成后所有的镜像,并通过http的方式进行对外发布。
(二)、镜像架构
开发者/租户提交代码到cod仓库,cod判断当提交操作为push操作时,cod自动通过webhook通知ma组件进行调度,并指派一个im组件进行镜像的构建,im阶段会收到ma组件下发的cod仓库地址以及分支等消息,im按照这些信息主动向cod拉取对应的代码分支进行自动构建;
代码里面存放的是镜像构建的元数据信息,im会调度镜像制作工具自动完成元数据解析,解析成功后进行构建,构建的过程中会拉取ro仓库里面需要的包。
构建完成后ma通过rsync推送镜像到mi,mi是一个存储仓库主要存储构建过程所有历史镜像版本,此时整个过程构建完成。
推送完成后如果有云平台可以调用云平台的接口进行镜像注册以及测试。
测试主要验证定义的数据信息是否完整。
(3)构建过程
如图1所示,整个构建过程主要都集中在ma的编排以及im的镜像工具进行数据解析构建,开发者编写好镜像工具可以解析的文件后,提交到代码仓库,代码仓库会自动识别当前提交事件,当为push事件时会自动触发webhook,其实就是自动访问一个httpurl,这个httpurl是ma为每个任务提供的一个唯一地址,ma发现在这个地址被请求后,会自动根据url里面的任务id执行对应的任务,执行过程中会选择一个im节点。
im节点收到指令会在指定的代码仓库拉取对应分支代码,随后im节点调用镜像工具进行json文件加载并解析内部的数据结构,解析成功后开始构建(这个过程就是自动安装系统的过程,json文件内容内定义了操作系统的版本、iso的位置、磁盘的大小、用户名、密码、安后需要执行的脚本等等),系统安装完成会根据ma的编排顺序ma触发im节点上面的rsync服务进行镜像同步到mi镜像服务器,此时完成镜像的构建和发布。
此时云平台就可以通过这个url进行镜像注册并通过创建虚拟机的方式来验证镜像是否满足当前的要求。如果镜像有问题不满足需求开发者只需要再次修改对应的解析文件然后提交至cod仓库即可,提交成功后再次触发这个过程。整个过程其实就是ci/cd的思想。至此整个闭环完成。
具体的操作为:
如图2所示,需要部署cod组件用来存放代码,开发者提交的代码均保存在cod这机器中。
实现过程为,如图1所示,开发人员需要在cod上面创建一个用于存镜像代码的仓库。仓库创建完成后开发者提交代码然后保存在代码仓库中,代码仓库可以使用github或gitlab开源仓库即可。
ma组件用来编排和调度im,当cod发现代码更新后通知ma进行镜像的构建,这里的ma组件可以是jenkins、gitlab或hudson。
ma组件创建编排任务,定义编排选项以及调度的im节点地址,同时会暴露一个restapi地址,为了安全方面考虑这个地址需要携带token进行访问。暴露的这个restapi主要是给cod组件中的代码仓库进行webhook。当cod组件中的代码更新或者手动构建的时候回触发这个restapi通知ma组件目前应该对哪个任务进行实施。ma组件就按照当前任务里面定义编排的顺序执行每个环节的内容。
im接到ma下发的任务开始具体执行构建任务。
如图3所示,im组件主要是针对kvm虚拟化平台进行镜像的构建,开始构建之前需要去cod上面拉取当前任务对应的代码分支,随后使用kvm虚拟化提供的工具检查代码里面的文件是否符合启动虚拟机的规则,如果满足则启动虚拟机,否则失败并反馈错误信息给开发者或者租户。常见的kvm镜像工具有virt-install或virt-buil。
启动过程解析存放在代码库中的指定文件,该文件中定义操作系统的版本、iso的存放位置、md5sum、cpu、mem、disk磁盘大小、以及构建后需要执行的脚本等。解析完成后进入vm安装过程整个过程所有的应答都在文件中定义无需人工参与,静默安装。
在系统安装过程相关的软件包会自动从ro组件中获取软件包,ro内的资源均已http的方式对外提供。im执行完成会按照ma的编排规则同步当前制作成功的镜像到mi并生成一个对外可以访问的url地址。改地址就作为镜像资源的访问入口,可以使用云平台进行注册。整个过程全部自动化,无需人工参与。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种构建虚拟机镜像的方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
1.一种构建虚拟机镜像的方法,其特征在于,部署cod组件存放代码,在cod组件上面创建一个存镜像代码的仓库,仓库创建完成后开发者提交代码保存在代码仓库中;
ma组件用来编排和调度im,当cod发现代码更新后通知ma进行镜像的构建,im接到ma下发的任务开始执行构建任务。
2.根据权利要求1所述的一种构建虚拟机镜像的方法,其特征在于,所述代码仓库使用基于git协议,所述ma组件使用ci工具。
3.根据权利要求1或2所述的一种构建虚拟机镜像的方法,其特征在于,ma组件创建编排任务,定义编排选项以及调度的im节点地址,同时会暴露一个restapi地址,这个地址携带token进行访问,暴露的restapi是给cod组件中的代码仓库进行webhook。
4.根据权利要求3所述的一种构建虚拟机镜像的方法,其特征在于,进行webhook即,自动访问一个httpurl,这个httpurl是ma为每个任务提供的一个唯一地址,ma发现在这个地址被请求后,会自动根据url里面的任务id执行对应的任务,执行过程中会选择一个im节点。
5.根据权利要求4所述的一种构建虚拟镜像的方法,其特征在于,im节点收到指令会在指定的代码仓库拉取对应的分支代码,随后im节点调用镜像工具进行json文件加载并解析内部的数据结构,解析成功后开始构建,安装完成会根据ma的编排顺序ma触发im节点上面的rsync服务进行镜像同步到mi镜像服务器,此时完成镜像的构建和发布。
6.根据权利要求5所述的一种构建虚拟镜像的方法,其特征在于,json文件内容定义操作系统的版本、iso的位置、磁盘的大小、用户名、密码和安装后需要执行的脚本。
7.根据权利要求5所述的一种构建虚拟镜像方法,其特征在于,云平台通过url进行镜像注册并通过创建虚拟机的方式来验证镜像是否满足当前的要求,如果镜像有问题不满足需要,则修改对应的解析文件然后提交至cod仓库,提交成功后再次触发。
8.根据权利要求7所述的一种构建虚拟镜像方法,其特征在于,im组件针对kvm虚拟化平台进行镜像的构建,开始构建之前去cod上面拉取当前任务对应的代码分支,随后使用kvm虚拟化提供的工具检查代码里面的文件是否符合启动虚拟机的规则,如果满足则启动虚拟机,否则失败并反馈错误信息给开发者或者租户。
技术总结