一种创建KVM虚拟机的方法和装置与流程

文档序号:13861459阅读:452来源:国知局

本发明涉及虚拟机技术领域,具体涉及一种创建kvm虚拟机的方法和装置。



背景技术:

kvm(kernel-basedvirtualmachine),是一个开源的系统虚拟化模块,自linux2.6.20之后集成在linux的各个主要发行版本中,它使用linux自身的调度器进行管理。kvm的虚拟化需要硬件支持(如intelvt技术或者amdv技术),是基于硬件的完全虚拟化。libvirt,是一套免费、开源的支持linux下主流虚拟化工具的c函数库,是目前使用最为广泛的对kvm虚拟机进行管理的工具和应用程序接口(api)。libguestfs,是一套用于访问和修改虚拟机(vm)磁盘映像的工具,该工具可以在不启动kvmguest主机的情况下直接查看guest主机的文件内容,也可直接对img镜像文件执行写入文件和/或复制文件到外面的物理机的操作,也可以像linuxmount(挂载命令)一样支持挂载操作。

现有技术中,kvm虚拟机的创建方式是:网络工程师搭建网络环境,搭建kvm环境,手动创建虚拟机,配置虚拟机网络;整个流程均是由网络工程师手动完成,这种方式对网络工程师依赖性比较强,不利于批量创建具有不同网络地址信息的虚拟机。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的创建kvm虚拟机的方法和装置。

依据本发明的一个方面,提供了一种创建kvm虚拟机的方法,该方法包括:

创建源虚拟机,生成该源虚拟机对应的虚拟机模板镜像文件;

设置用于配置网络地址信息的源shell脚本;

将虚拟机模板镜像文件和源shell脚本保存到指定物理机上;

根据虚拟机模板镜像文件在指定物理机上创建一个或多个kvm虚拟机;

根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

可选地,根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息包括:

对于所创建的每个kvm虚拟机,

根据源shell脚本生成该kvm虚拟机对应的shell脚本;

启动该kvm虚拟机,运行该kvm虚拟机对应的shell脚本;

利用该kvm虚拟机对应的shell脚本为该kvm虚拟机配置相应的网络地址信息。

可选地,根据源shell脚本生成该kvm虚拟机对应的shell脚本包括:

复制源shell脚本;

获取该kvm虚拟机对应的网络地址信息,将所获取的网络地址信息设置到该复制的源shell脚本中,将经过设置的该复制的源shell脚本作为该kvm虚拟机对应的shell脚本。

可选地,根据虚拟机模板镜像文件在所述指定物理机上创建一个或多个kvm虚拟机包括:

对于每个待创建的kvm虚拟机,

根据虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件;

根据该kvm虚拟机对应的镜像文件,在指定物理机上创建该kvm虚拟机。

可选地,根据虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件包括:

复制虚拟机模板镜像文件到指定存储目录,将该复制的虚拟机模板镜像文件中的系统信息删除;

获取该kvm虚拟机对应的参数信息,将所获取的参数信息设置到该复制的虚拟机模板镜像文件中,为该复制的虚拟机模板镜像文件设置主机名和管理员权限;将经过设置的该复制的虚拟机模板镜像文件作为该kvm虚拟机对应的镜像文件。

可选地,kvm虚拟机对应的参数信息包括:kvm虚拟机的唯一标识,和/或,kvm虚拟机的mac地址。

可选地,创建一个源虚拟机,生成该源虚拟机对应的虚拟机模板镜像文件的步骤和设置用于配置网络地址信息的源shell脚本的步骤不是在指定物理机上执行的;

则将虚拟机模板镜像文件和源shell脚本保存到指定物理机上包括:远程登录所述指定物理机,将虚拟机模板镜像文件和源shell脚本上传到指定物理机的指定文件夹中。

依据本发明的另一个方面,提供了一种创建kvm虚拟机的装置,该装置包括:

模板创建单元,用于创建一个源虚拟机,生成该源虚拟机对应的虚拟机模板镜像文件;

脚本设置单元,用于设置用于配置网络地址信息的源shell脚本;

虚拟机创建单元,适于将虚拟机模板镜像文件和源shell脚本保存到指定物理机上;根据虚拟机模板镜像文件在指定物理机上创建一个或多个kvm虚拟机;根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

可选地,虚拟机创建单元,用于对于所创建的每个kvm虚拟机,根据源shell脚本生成该kvm虚拟机对应的shell脚本;启动该kvm虚拟机,运行该kvm虚拟机对应的shell脚本;利用该kvm虚拟机对应的shell脚本为该kvm虚拟机配置相应的网络地址信息。

可选地,虚拟机创建单元,用于复制源shell脚本;获取该kvm虚拟机对应的网络地址信息,将所获取的网络地址信息设置到该复制的源shell脚本中,将经过设置的该复制的源shell脚本作为该kvm虚拟机对应的shell脚本。

可选地,虚拟机创建单元,用于对于每个待创建的kvm虚拟机,根据虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件;根据该kvm虚拟机对应的镜像文件,在指定物理机上创建该kvm虚拟机。

可选地,虚拟机创建单元,用于复制虚拟机模板镜像文件到指定存储目录,将该复制的虚拟机模板镜像文件中的系统信息删除;获取该kvm虚拟机对应的参数信息,将所获取的参数信息设置到该复制的虚拟机模板镜像文件中,为该复制的虚拟机模板镜像文件设置主机名和管理员权限;将经过设置的该复制的虚拟机模板镜像文件作为该kvm虚拟机对应的镜像文件。

可选地,kvm虚拟机对应的参数信息包括:kvm虚拟机的唯一标识,和/或,kvm虚拟机的mac地址。

可选地,创建kvm虚拟机的装置未设置在指定物理机上,或者,创建kvm虚拟机的装置设置在所述指定物理机上;

当创建kvm虚拟机的装置未设置在指定物理机上时,则虚拟机创建单元,适于远程登录指定物理机,将虚拟机模板镜像文件和源shell脚本上传到指定物理机的指定文件夹中,根据虚拟机模板镜像文件在指定物理机上创建一个或多个kvm虚拟机,根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

由上述可知,本发明提供的技术方案通过预先创建的虚拟机模板镜像文件和源shell脚本,在指定物理机上创建kvm虚拟机并为所创建的每个kvm虚拟机配置相应的网络地址信息,实现了自动化创建kvm虚拟机的方案,与现有技术中需要网络工程师手动创建虚拟机、配置虚拟机网络的方案相比,本方案可以快速、批量、自动化地在指定物理机上创建kvm虚拟机并设置相应的网络地址信息,十分省时省力,符合当前的虚拟机创建需求。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的一种创建kvm虚拟机的方法的流程图;

图2示出了根据本发明一个实施例的一种创建kvm虚拟机的装置的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的一种创建kvm虚拟机的方法的流程图。如图1所示,该方法包括:

步骤s110,创建源虚拟机,生成该源虚拟机对应的虚拟机模板镜像文件。

步骤s120,设置用于配置网络地址信息的源shell脚本。

步骤s130,将虚拟机模板镜像文件和源shell脚本保存到指定物理机上。

其中,指定物理机是具有虚拟机搭建需求的物理机。

步骤s140,根据虚拟机模板镜像文件在指定物理机上创建一个或多个kvm虚拟机。

步骤s150,根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

其中,网络地址信息包括ip地址、子网掩码、网关、dns等,为每个kvm虚拟机配置该kvm虚拟机对应的网络地址信息,以搭建该kvm虚拟机的网络环境。

需要说明的是,在本发明实施例中不需要使用动态主机配置协议dhcp方式根据mac地址为kvm虚拟机分配ip地址。而是根据源shell脚本为kvm虚拟机指定固定的ip地址。

可见,图1所示的方法通过预先创建的虚拟机模板镜像文件和源shell脚本,在指定物理机上创建kvm虚拟机并为所创建的每个kvm虚拟机配置相应的网络地址信息,实现了自动化创建kvm虚拟机的方案,与现有技术中需要网络工程师手动创建虚拟机、配置虚拟机网络的方案相比,本方案可以快速、批量、自动化地在指定物理机上创建kvm虚拟机并设置相应的网络地址信息,十分省时省力,符合当前的虚拟机创建需求。

在本发明的一个实施例中,上述步骤s110和步骤s120是在指定物理机之外的其他物理机上执行的,则后续步骤s130-s150需要该其他物理机与指定物理机进行远程通信以实现在指定物理机上创建虚拟机的目的。例如,指定物理机为kvm主机,该kvm主机中搭建有kvm环境,步骤s110和步骤s120在一个客机上执行,该客机中搭建有kvm环境,该客机中安装有libguestfs工具,在客机中创建的一个虚拟机作为源虚拟机或者以客机中原先已有的一个虚拟机作为源虚拟机,该源虚拟机上安装有操作系统,通过libguestfs工具生成该源虚拟机对应的虚拟机模板镜像文件并保存,以及在客机中编写用于配置网络地址信息的源shell脚本;通过jschssh远程登录到kvm主机上,将客机中的虚拟机模板镜像文件和源shell脚本上传到kvm主机的指定文件夹中,通过远程登录在kvm主机上根据虚拟机模板镜像文件创建一个或多个kvm虚拟机,并根据源shell脚本为各个kvm虚拟机配置相应的网络地址信息。

或者,上述步骤s110-s120也可以是在指定物理机上执行的,则后续步骤s130-s150直接在指定物理机上执行,例如,指定物理机为kvm主机,该kvm主机中搭建有kvm环境,以在kvm主机上创建的一个虚拟机作为源虚拟机或者以kvm主机上原先已有的一个虚拟机作为源虚拟机,该源虚拟机上安装有操作系统,通过libguestfs工具生成该源虚拟机对应的虚拟机模板镜像文件,以及在kvm主机中编写用于配置网络地址信息的源shell脚本,将虚拟机模板镜像文件和源shell文件保存到kvm主机的指定文件夹中,根据虚拟机模板镜像文件创建一个或多个kvm虚拟机,并根据源shell脚本为各个kvm虚拟机配置相应的网络地址信息。

在本发明的一个实施例中,图1所示方法的步骤s140根据虚拟机模板镜像文件在指定物理机上创建一个或多个kvm虚拟机包括:对于每个待创建的kvm虚拟机,根据所述虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件;根据该kvm虚拟机对应的镜像文件,在所述指定物理机上创建该kvm虚拟机。

具体地,上述根据虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件包括:复制所述虚拟机模板镜像文件到指定存储目录,将该复制的虚拟机模板镜像文件中的系统信息删除;获取该kvm虚拟机对应的参数信息,将所获取的参数信息设置到该复制的虚拟机模板镜像文件中,为该复制的虚拟机模板镜像文件设置主机名和管理员权限;将经过设置的该复制的虚拟机模板镜像文件作为该kvm虚拟机对应的镜像文件。其中,所述kvm虚拟机对应的参数信息包括:kvm虚拟机的唯一标识,和/或,kvm虚拟机的mac地址。

本实施例在创建每个kvm虚拟机时,保留指定文件夹中的虚拟机模板镜像文件的原件,复制一份虚拟机模板镜像文件到指定存储目录,在该复制的虚拟机模板镜像文件的基础上,删除该复制的虚拟机模板镜像文件中原有的、与待创建的kvm虚拟机不相符的系统信息,设置与待创建的kvm虚拟机相匹配的参数信息,并设置待创建的kvm虚拟机的主机名,设置管理员权限,使得该经过修改设置的虚拟机模板镜像文件反映出待创建的kvm虚拟机的较为完备的配置信息,即将反映待创建的kvm虚拟机的配置信息的该镜像文件作为该待创建的kvm虚拟机对应的镜像文件,根据对应的镜像文件中的配置信息即可创建相应的kvm虚拟机。

在本发明的一个实施例中,图1所示方法的步骤s150根据源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息包括:对于所创建的每个kvm虚拟机,根据所述源shell脚本生成该kvm虚拟机对应的shell脚本;启动该kvm虚拟机,运行该kvm虚拟机对应的shell脚本;利用该kvm虚拟机对应的shell脚本为该kvm虚拟机配置相应的网络地址信息。

具体地,上述根据源shell脚本生成该kvm虚拟机对应的shell脚本包括:复制源shell脚本;获取该kvm虚拟机对应的网络地址信息,将所获取的网络地址信息设置到该复制的源shell脚本中,将经过设置的该复制的源shell脚本作为该kvm虚拟机对应的shell脚本。

其中,在复制源shell脚本之后,如果上述获取该kvm虚拟机对应的网络地址信息是在指定物理机之外的其它机器上执行的,则在获取到kvm虚拟机对应的网络地址信息之后,也需要通过远程通信将获取到的网络地址信息传给复制的源shell脚本,使得网络地址信息设置到复制的源shell脚本中,得到kvm虚拟机对应的shell脚本,该shell脚本反映了kvm虚拟机对应的网络配置信息;在第一次启动kvm虚拟机时,运行该kvm虚拟机对应的shell脚本,使得该shell脚本通过其中的相应的网络地址信息对kvm虚拟机进行配置。对于不同的kvm虚拟机,所传入复制的shell脚本中的网络地址信息也不同,保证了所创建的kvm的网络环境的可用。

可见,在创建每个kvm虚拟机和为kvm虚拟机配置网络地址信息的过程中,所用到的均为虚拟机模板镜像文件的副本和源shell脚本的副本,而指定物理机上的指定文件夹中的虚拟机模板镜像文件和源shell文件一直存在且保持不变,使得无论何时具有创建kvm虚拟机的需求时均可以被满足,使得本发明实施例的方案的可实施时间长、实施范围广的优势。

通过一个具体的例子来说明本方案的实施过程,在本例中,指定物理机为kvm主机,kvm主机上部署有kvm环境、libguestfs工具、ssh客户端和libvirt工具,一个kvm客机上部署有kvm环境、libguestfs工具和ssh客户端,在该kvm客机上创建一个kvm虚拟机作为源虚拟机,通过该kvm客机上的libguestfs工具生成源虚拟机对应的虚拟机模板镜像文件,编写用于配置网络地址信息的源shell脚本:setnetworkbymac_template.sh,kvm客机与kvm主机通过ssh客户端的jsch实现进行远程连接,将kvm客机上的虚拟机模板镜像文件和源shell脚本上传到kvm主机的指定文件中;在想要创建一个kvm虚拟机a时,通过jschssh远程登录到kvm主机上运行linux命令,使得根据指定文件夹中的虚拟机模板镜像文件生成待创建的kvm虚拟机a对应的镜像文件,以及根据指定文件夹中的源shell脚本生成待创建的kvm虚拟机a对应的shell脚本,具体运行的linux命令如表1所示,获取待创建的kvm虚拟机a的唯一标识和mac地址,复制虚拟机模板镜像文件到libvirt存储目录,将该将复制的虚拟机模板镜像文件的文件名更改为kvm虚拟机a的镜像文件,复制源shell脚本setnetworkbymac_template.sh,修改该复制的shell脚本,将kvm虚拟机a对应的网络地址信息设置到该复制的源shell脚本中;运行libguestfs命令virtsysprep,将改名后的kvm虚拟机a的镜像文件中原有的系统信息删除,设置唯一标识和mac地址,设置主机名和root用户密码(管理员权限)。

接着,根据上述生成的kvm虚拟机a的镜像文件中的配置信息(xml信息),使用libvirt的domaindefinexml()方法创建kvm虚拟机,再使用libvirt的create()方法启动该新创建的kvm虚拟机a,在该kvm虚拟机a首次运行时运行上述经设置后的该复制的源shell脚本,该shell脚本为kvm虚拟机a配置相应的网络地址信息,至此,kvm虚拟机a创建完成,可以正常使用。再在该kvm主机上创建其他kvm虚拟机时,创建过程与上述一致,在此不再赘述。

表1

图2示出了根据本发明一个实施例的一种创建kvm虚拟机的装置的示意图。如图2所示,该创建kvm虚拟机的装置200包括:

模板创建单元210,用于创建一个源虚拟机,生成该源虚拟机对应的虚拟机模板镜像文件。

脚本设置单元220,用于设置用于配置网络地址信息的源shell脚本。

虚拟机创建单元230,适于将所述虚拟机模板镜像文件和所述源shell脚本保存到指定物理机上;根据所述虚拟机模板镜像文件在所述指定物理机上创建一个或多个kvm虚拟机;根据所述源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

可见,图2所示的装置通过预先创建的虚拟机模板镜像文件和源shell脚本,在指定物理机上创建kvm虚拟机并为所创建的每个kvm虚拟机配置相应的网络地址信息,实现了自动化创建kvm虚拟机的方案,与现有技术中需要网络工程师手动创建虚拟机、配置虚拟机网络的方案相比,本方案可以快速、批量、自动化地在指定物理机上创建kvm虚拟机并设置相应的网络地址信息,十分省时省力,符合当前的虚拟机创建需求。

在本发明的一个实施例中,虚拟机创建单元230,用于对于所创建的每个kvm虚拟机,根据所述源shell脚本生成该kvm虚拟机对应的shell脚本;启动该kvm虚拟机,运行该kvm虚拟机对应的shell脚本;利用该kvm虚拟机对应的shell脚本为该kvm虚拟机配置相应的网络地址信息。

具体地,虚拟机创建单元230,用于复制所述源shell脚本;获取该kvm虚拟机对应的网络地址信息,将所获取的网络地址信息设置到该复制的源shell脚本中,将经过设置的该复制的源shell脚本作为该kvm虚拟机对应的shell脚本。

在本发明的一个实施例中,虚拟机创建单元230,用于对于每个待创建的kvm虚拟机,根据所述虚拟机模板镜像文件生成该kvm虚拟机对应的镜像文件;根据该kvm虚拟机对应的镜像文件,在所述指定物理机上创建该kvm虚拟机。

具体地,虚拟机创建单元230,用于复制所述虚拟机模板镜像文件到指定存储目录,将该复制的虚拟机模板镜像文件中的系统信息删除;获取该kvm虚拟机对应的参数信息,将所获取的参数信息设置到该复制的虚拟机模板镜像文件中,为该复制的虚拟机模板镜像文件设置主机名和管理员权限;将经过设置的该复制的虚拟机模板镜像文件作为该kvm虚拟机对应的镜像文件。其中,kvm虚拟机对应的参数信息包括:kvm虚拟机的唯一标识,和/或,kvm虚拟机的mac地址。

在本发明的一个实施例中,创建kvm虚拟机的装置200未设置在所述指定物理机上,或者,创建kvm虚拟机的装置200设置在所述指定物理机上;当创建kvm虚拟机的装置200未设置在所述指定物理机上时,则虚拟机创建单元230,适于远程登录所述指定物理机,将所述虚拟机模板镜像文件和所述源shell脚本上传到所述指定物理机的指定文件夹中,根据所述虚拟机模板镜像文件在所述指定物理机上创建一个或多个kvm虚拟机,根据所述源shell脚本为所创建的每个kvm虚拟机配置相应的网络地址信息。

需要说明的是,图2所示装置的各实施例与图1所示方法的各实施例对应相同,上文中已有详细说明,在此不再赘述。

综上所述,本发明提供的技术方案通过预先创建的虚拟机模板镜像文件和源shell脚本,在指定物理机上创建kvm虚拟机并为所创建的每个kvm虚拟机配置相应的网络地址信息,实现了自动化创建kvm虚拟机的方案,与现有技术中需要网络工程师手动创建虚拟机、配置虚拟机网络的方案相比,本方案可以快速、批量、自动化地在指定物理机上创建kvm虚拟机并设置相应的网络地址信息,十分省时省力,符合当前的虚拟机创建需求。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1