「KVM」- 虚拟机创建

  CREATED BY JENKINSBOT

问题描述

在 libvirt 中,具有创建虚拟机的 virsh 命令,能够使用 virsh create configuration-file.xml 命令来创建虚拟机。所以,在使用该命令创建虚拟机前,需要先要创建描述虚拟机信息的 XML 文件,然而编写 XML 文件是件繁琐的工作。

我们希望找到创建虚拟机的快捷方法,能够快速且批量地创建虚拟机,而非简单重复的手动安装。当然,如果使用 IaaS 平台(比如 OpenStack、OpenNebula 等等)管理 KVM 虚拟化,则通常无需这些方法,因为很多 IaaS 平台已经具备这些功能。

该笔记将记录:当使用 KVM 虚拟化时,创建虚拟机的方法,以及常见问题处理。

解决方案

virt-manager(图形化界面安装)

概述:该方法并没有实现快速安装,属于传统的操作系统安装。但是,比创建 XML 文件的方法容易许多。

如果喜欢使用图形化工具,使用 virt-manager 命令。在 Debian 中,该命令属于 virt-manager 软件包:

apt-get install virt-manager

鉴于图形界面比较容器使用,这里不再叙述详细的使用方法。

vrit-install(从命令行安装)

概述:通过命令行安装,我们使用固定的命令行参数,每次都执行相同的命令,也许能简化初始过程。但是,操作系统的安装过程依旧需要我们人工进行,填写必要参数,完成操作系统的安装。

命令 virt-install 是个命令行工具,用于创建虚拟机。在 Debian 中,该命令属于 virtinst 软件包(实际上来自于 virt-manager 软件包,只是发行版将其拆分到不同的包中)。在 CentOS 中,该命令属于 virt-viewer 软件包。(注意,在不同的Linux发行版、或相同Linux发行版的不同版本中,软件包的名字可能会有些许的差异,大体上是一样的)

首先,创建虚拟机。如下命令,指定了虚拟机的名称、内存大小、硬盘大小:

virt-install \
    --connect qemu:///system \
    --virt-type kvm \
    --name guestosname \
    --memory 500 \
    --disk size=10 \
    --cdrom /path/to/os.iso

至此,虚拟机已经从操作系统镜像 /path/to/os.iso 启动,并进入了安装界面。(就像平时从U盘启动后,进入安装界面。)

然后,安装操作系统。接下来,进入显示控制台,进行安装步骤。就像实体机安装操作系统一样,进行操作系统的安装:

# 连接到机器上,选项 -X 对 X11 进行转发
ssh root@hostnameoripaddress -X

# 在远程主机上执行该命令,由于ssh已经进行了X11转发(-X),所以会在本地打开窗口
virt-viewer guestosname

上面是一种通用办法(不用关心显示设备的设置),很少会遇到问题。

还可以使用SSH连接到远程主机,查找客户端配置文件,然后创建到控制台的隧道连接。执行如下命令:

# virt-viewer --connect qemu+ssh://root@hostnameoripaddress/system guestosname

这期间需要进行两次SSH密码输入。同时,使用这种方式要求虚拟机中创建的 Graphics 正确配置。在我的测试中,类型为 VNC server 的 Graphics 连接成功。但是类型为 Spice server 的 Graphics 连接失败了。以后再折腾吧。

virt-clone(虚拟机克隆)

概述:通过虚拟机克隆,克隆已有虚拟机,以生成新的虚拟机,能够简化安装过程。

过程:
1)首先,我们安装操作系统;
2)然后,将其转化为“虚拟机模板”;
3)后续,在创建虚拟机时,将克隆该模板;
4)最后,直接启动克隆生成的系统。

缺点:
1)“虚拟机模板”需要进行处理(比如 删除 SSH Host Key 文件),否则克隆生成的虚拟机会包含原系统的特征信息。
2)然而,被处理(删除)的文件无法自动生成。比如,“虚拟机模板”将移出 SSH Host Key 文件,但是新虚拟机不会自动生成,导致 SSH 无法连接,而需要 ssh-kengen -A 重新生成。据我们所知,还没有相关工具来自动创建这些文件。

实现:参考 Clone existing KVM vm 笔记。

virt-install + Kickstart

概述:当通过命令 virt-install 安装系统时,指定向内核传递 Kickstart 配置文件,以完成操作系统的自动安装。

过程:
1)创建 Kickstart 配置文件;
2)在执行 virt-install 系统时,通过 -x 选项传递 Kickstart 配置文件;

缺点:
1)发行版不同,工具不同:对于 RHEL 及 CentOS 能够使用 Kickstart 工具;对于 Debian 需要使用 FAI 或 Debian Installer Preseed 等等工具。

实现:KVM: Install CentOS / RHEL Using Kickstart File (Automated Installation) – nixCraft

PXE + Kickstart

概述:该方法与 virt-install + Kickstart 类似,在启动虚拟机时,将自动完成操作系统的安装,而我们仅需要创建虚拟机。

参考文献

How to create and manage KVM virtual machines from CLI
How to Install Linux KVM and Create Guest VM with Examples
Chapter 20. Managing guests with virsh/Creating a guest
Creating a virtual machine XML dump(configuration file)
kvm virtualization – Install guest CentOS 7 on KVM also on CentOS7 without GUI – Server Fault