认证目标2.02 在KVM上配置虚拟机
在KVM上配置一个虚拟机的过程非常简单,使用虚拟机管理器时更是如此。实质上,所要做的是右击QEMU超级监视程序,再选择New,然后根据提示进行操作。但由于理解此过程的每个操作步骤非常必要,因此必须仔细阅读这个过程的每一步操作。新创建的虚拟机不仅可以在GUI工具中进行配置,也可在命令行接口中进行配置。与其他Linux服务一样,最终得到的虚拟机配置将存储为文本文件。
2.2.1 在KVM上配置虚拟机
按照本节的指示进行操作。打开GUI桌面中的虚拟机管理器,也可以从基于GUI的命令行中打开,即在命令行中执行virt-manager命令。如果出现提示,则输入root管理员口令。如果显示本地主机(QEMU)超级监视程序未连接,则右击本地主机(QEMU)超级监视程序并从弹出的菜单中选择Connect。按下面的操作步骤建立一个虚拟机,并以第1章曾提到的server1. example.com作为它的域名。现在为新建一个虚拟机执行以下操作:
(1)右击本地主机(QEMU)超级监视程序,在弹出的菜单中选择New,打开一个New VM窗口,如图2-8所示。
图2-8 新建一个虚拟机
(2)为这个新建的虚拟机输入一个名称,为配合本书后面的讨论,必须将这个虚拟机命名为server1.example.com。
(3)现在选择安装媒介是来自本地安装媒介(ISO映像文件或CD-ROM)还是来自网络安装服务器。此服务器必须是HTTP、NFS或FTP协议服务器。选择本地安装媒介,单击Forward继续(在实验题1中,将利用网络安装模式重新执行这个过程)。
(4)如果可以使用本地CD/DVD驱动器,则Use CDROM or DVD这个选项处于可选状态,如图2-9所示。但是在本例中选择Use ISO Image并单击Browse按钮导航到RHEL 7 DVD所在的位置或网络引导ISO映像文件所在的位置。此外,还需要使用OS Type和Version下拉列表选择操作系统类型和版本,如图2-9所示。
图2-9 虚拟机安装媒介选项
(5)给新建的虚拟机分配内存大小和CPU数。要注意,本章和第1章说明了RHEL 7的最低要求。在图2-10中,用较小的字体说明系统可用的内存大小和CPU个数,选择合适的选项。单击Forward继续。
图2-10 虚拟机的内存和CPU选项
(6)现在为这个虚拟机设置硬盘驱动器,如图2-11所示。虽然可以在专用的物理卷中设置一个硬盘,但是标准的做法是将一个大文件创建为虚拟机硬盘驱动器。虽然这些文件的默认位置是/var/lib/libvirt/images/目录,但是正如本章前面曾提到的也可以是其他目录。在考试中,/var/lib/libvirt/images目录空间很可能远超过实际需要。图2-11中的Select managed or other existing storage(选择可管理存储空间或其他现有的存储空间)选项会在另一个预配置的硬盘池中创建一个虚拟驱动器。
图2-11 建立一个虚拟硬盘驱动器
(7)确保虚拟驱动器大小为16GB,并且选择Allocate entire disk now选项,单击Forward继续。
(8)在下一个窗口中确认前面所执行的全部选择。单击Advanced Options打开如图2-12的选项。
图2-12 检查配置选项
我们可能还需要选择可用的虚拟网络。如果完成了练习2-1,则与IP子网192.168.100.0/24关联的“outsider”虚拟网络应该会出现在这个列表中。
(9)系统创建这个虚拟机可能需要花一点时间,此过程包括分配一个大型文件作为虚拟机硬盘。当创建过程完成时,虚拟机管理器会自动在控制台窗口中从RHEL 7安装DVD启动这个新建的虚拟系统。
(10)如果新创建的系统不能自动启动,则此虚拟机会出现在图2-2所示的虚拟机管理器的窗口中。现在可以选取这个新建的虚拟机(本例中它的名字是server1.example. org),单击Open。
(11)现在继续在这个虚拟机中开始安装RHEL 7,如第1章所述。
(12)如果重启虚拟机,则安装程序会“弹出”DVD。如果以后想要重新连接DVD,需要单击View | Details,然后选择IDE CDROM1选项,单击Disconnect,再单击Connect。在出现的Choose Media窗口中选择包含DVD ISO映像的文件,或者选择CDROM物理媒介。
(13)在选择软件进行安装时,需要注意的是本系统是一个虚拟客户机,而不是第1章配置的虚拟主机,因此在安装过程中不需要添加任何虚拟程序包。选择Server with GUI,不需要指定任何可选的增件,然后单击Done。
(14)当安装完成后,单击Reboot。如果系统又要从DVD盘上启动,则需要交换DVD和硬盘的引导顺序。如果系统可以直接从硬盘引导,则安装过程结束。
(15)如果系统要从DVD引导,则需要关闭此系统,为此要单击Virtual Machine | Shut Down |Shut Down。
(16)如果这是第一次执行这个命令序列,则虚拟机管理器会出现提示信息要求你确认,单击Yes。
(17)现在单击View | Details命令。
(18)在左侧的窗格中选择Boot Options(引导选项),如图2-13所示。
图2-13 虚拟机的引导选项
(19)改变引导顺序的另一个办法是高亮显示CDROM,然后单击向下箭头按钮。单击Apply,否则不会保存所做的修改。
(20)单击View | Console,再单击Virtual Machine | Run,系统会自动引导到第1章曾介绍过的Initial Setup屏幕。
使用虚拟机的另一个理由是添加虚拟硬盘驱动器很容易。该过程因虚拟机方案的不同而异。在RHEL 7中,如果使用默认的虚拟机管理器和KVM解决方案,则单击View | Details命令并从出现的机器窗口中进行这个操作。在这个窗口中会看到Add Hardware选项。
考试提示
本节介绍的步骤说明了如何实现访问虚拟机控制台的RHCSA认证目标,也提出了一种可用于启动虚拟机和禁用虚拟机的方法。
2.2.2 练习2-2:添加虚拟硬盘驱动器
本练习要在基于KVM的虚拟机上创建另一个虚拟硬盘驱动器。假设现有一个KVM虚拟机用于此目的,并使用了一个GUI虚拟机管理器。
(1)打开虚拟机管理器。从GUI的命令行输入virt-manager命令。
(2)如果出现提示窗口,就输入root管理员的口令并单击Authenticate按钮。
(3)选择本地主机(QEMU)超级监视程序。如果还没连接,则右击它并从弹出的菜单中选择Connect。这一步可能会自动操作。
(4)右击一个现有的虚拟机,从弹出的菜单中单击Open。
(5)单击View | Details,在出现窗口的左下角单击Add Hardware。
(6)在出现的Add New Virtual Machine窗口中,从左侧菜单中选择Storage。
(7)在出现的Storage窗口中,如图2-14所示,设置一个1.0GB的硬盘,选择Allocate entire disk now这个选项,再选择Virtio设备类型,为Cache模式选择默认值(设备类型也可以选择SATA或IDE磁盘)。做出必要的修改,然后单击Forward继续。
图2-14 Storage窗口细节
(8)将出现一个所选择配置的窗口。如果符合要求,单击Finish将创建一个新的虚拟硬盘驱动器。
(9)重复前面的步骤创建第二个1.0GB虚拟硬盘。
(10)下次启动这个系统时,从root账户中执行fdisk-l命令,可以确认刚配置的虚拟硬盘设备。
2.2.3 KVM配置文件
基于KVM的虚拟机通常配置在两个不同的目录中:/etc/libvirt和/var/lib/libvirt。当一个KVM虚拟机配置好后,就会在/etc/libvirt/qemu目录中生成XML格式的文件。例如,图2-15就是来自一个虚拟机的配置文件的一段内容,此虚拟机是用来准备本书内容的(server1.example.com.xml)。
图2-15 KVM虚拟机的配置文件内容
虚拟机的重要参数已经标注出来。例如,内存的大小用KB(1KB=1024字节)表示,分配了两个虚拟CPU, KVM是仿真器,硬盘可在/var/lib/libvirt/images目录下的server1.example.com.img文件中找到等。
虽然可以直接对这个配置文件进行编辑,但是在用诸如systemctl restart libvirtd的命令重新启动libvirtd服务之前,对此文件所做的修改不会实现。
2.2.4 从命令行控制虚拟机
当然,命令行工具也可以用来创建、克隆、转换和安装RHEL 7上的虚拟机。为此要用到的关键命令有virt-install、virsh和virt-clone。virsh是一个非常有用的命令,可用来实现RHCSA两个不同的RHCSA目标。
1. virt-install命令
使用虚拟机管理器可以执行本章前面介绍的操作。只需要使用virt-install命令。使用此命令时,加上--help开关,可显示前述所有必要信息的选项。观察命令帮助屏幕,并与图2-16中的示例进行比较。
图2-16 用virt-install命令配置一个虚拟机
对于许多人来说,这比配置GUI虚拟机管理器要简单许多。图2-16末尾的消息(即从Creating domain…开始的信息)启动一个控制台窗口,它显示这个给定安装程序的图形视图。如果收到“cannot open display”错误,确保使用root管理员账户打开了GNOME桌面会话。
考试提示
virt-install命令是实现RHCSA认证目标,即“把Red Hat企业版Linux系统安装成虚拟客户机”的一个方法。
如果使用virt-install命令时出现错误,则按下Ctrl+C放弃安装。但是要注意,刚创建的虚拟机仍在运行。现在该虚拟机有一个配置文件和虚拟硬盘。如果对同一个虚拟机重新执行virt-install命令,则会出现一个错误信息。因此如果确实想使用同名的虚拟机,则必须执行以下步骤:
(1)停止刚创建的虚拟机。对于如图2-16所示的tester1.example.com系统,则可以用下面的命令终止它的运行:
# virsh destroy tester1.example.com
(2)删除/etc/libvirt/qemu目录中相关的XML配置文件,以及虚拟硬盘文件(通常在/var/lib/libvirt/images目录中创建)。但是,如果想要重用该文件,就不需要这么做。
# virsh undefine tester1.example.com --remove-all-storage
(3)现在可在同名的虚拟机上执行virt-install命令。
2. virt-install命令与Kickstart安装方法
对于本章后面将要介绍的Kickstart安装方法,可以使用virt-install命令引用一个Kickstart配置文件。为此需要先理解virt-install命令的几个重要的开关选项,如表2-3所示。
表2-3 virt-install命令的开关选项
例如,下面的virt-install命令从名为ks1.cfg的Kickstart文件自动安装得到一个名为outsider. example.org的系统。ks1.cfg文件来自于给定IP地址的FTP服务器。新创建的系统需要1GB的内存和一个地址为outsider1.example.org.img的虚拟硬盘。
# virt-install -n outsider1.example.org -r 1024--disk \ path=/var/lib/libvirt/images/outsider1.example.org.img, size=16 \ -l ftp://192.168.122.1/pub/inst \ -x ks=ftp://192.168.122.1/pub/ks1.cfg
这条命令包含许多开关选项。绝大多数这些开关选项的用法在virt-install命令man手册的例子中有详细说明。你可能会注意到另外几个开关选项,它们可能有用,但是在RHEL 7安装中不需要。但是,它们可用来查找某个给定的Kickstart文件。因此要记住这个额外参数的格式,它要用引号表示,如下:
--extra-args="ks=ftp://192.168.122.1/pub/ks1.cfg"
3. virsh命令
virsh命令启动现有KVM虚拟机的一个前端。当它单独使用时,它会把普通的命令行格式转换为以下提示符的格式:
virsh #
在这个提示符后输入help命令,它显示几个命令的用法,其中一部分命令如表2-4所示。并非所有help命令的输出结果在KVM中都有效。那些可用的virsh命令都能直接在bash shell提示符后运行。例如,virsh list --all命令列出全部配置好的虚拟机,不管它们当前是否正在运行。在KVM环境中,在虚拟机上运行的操作系统的实例是一个域。域名由不同的virsh命令使用。
表2-4 在virsh提示符后可以执行的命令
我们在自己的系统上执行virsh --list all命令,以下是该命令的执行结果:
Id Name State ---------------------------------- - server1.example.com shut off - tester1.example.com shut off
掌握virsh命令的正确用法可以实现RHCSA的两个认证目标。第一,下面的命令启动前面提到的server1.example.com系统:
# virsh start server1.example.com
virsh shutdown命令优雅地关闭操作系统和虚拟机:
# virsh shutdown server1.example.com
要立即关闭虚拟机,需要运行一个更加严厉的命令:
# virsh destroy server1.example.com
virsh destroy命令开关选项在功能上等效于拔掉物理系统的电源线。由于这个操作可能会产生不同的问题,因此终止一个虚拟机运行的最好办法是在虚拟机内使用poweroff命令。
考试提示
为启动和关闭一个虚拟机,可以使用virsh start vmname和virsh destroy vmname这两个命令,命令中的vmname表示虚拟机的域名,这个域名可从virsh list --all命令的输出结果看出。
即使在最安全的系统中,电源故障也时有发生。内核更新需要系统重新启动。这时在虚拟主机的启动过程中虚拟机能够自动启动是非常有用的。
此外,virsh命令是确保一个虚拟机在下次系统引导时自动启动最简单的方法。例如,下面的命令保证在主机系统引导过程中启动前面提到的tester1.example.com系统。
# virsh autostart tester1.example.com
当主机系统和虚拟机系统的引导过程都完成后,可以用ssh命令正常连接到虚拟机系统。但在物理主机的GUI中,仍要启动虚拟机管理器,并连接到相应的超级监视程序,才可以连接到tester1.example.com系统的虚拟终端。
此命令在/etc/libvirt/qemu/autostart目录下建立一个软链接文件。要反向此过程,需要执行下面的命令:
# virsh autostart --disable tester1.example.com
或者从这个目录中删除根据目标虚拟机命名的软链接文件。
考试提示
要将虚拟机配置为在系统引导时自动启动,可以运行virsh autostart vmname命令,命令中的vmname表示虚拟机的域名,这个域名可从virsh list --all命令的输出结果看出。
4. virt-clone命令
virt-clone命令可以克隆一个现有的虚拟机系统。在开始克隆操作之前,必须先关闭需要克隆的系统。它的用法非常简单。图2-17是一个示例,它从server1.example.com系统克隆得到tester1.example.com系统。
图2-17 克隆一个虚拟机
注意,对于想要克隆的原始虚拟机的每个虚拟硬盘,必须使用--file开关选项指定其路径。在这里,因为我们在练习2-2中新添加了两个虚拟硬盘,server1.example.com有3个虚拟硬盘。
克隆过程一旦完成,不仅会在指定的目录中找到前面提到的硬盘驱动映像文件,还会在/etc/libvirt/qemu目录中找到此虚拟机的一个新的XML格式的配置文件。
首次引导一个克隆得到的虚拟机时,最好将其引导到一个急救目标。急救目标不会启动大部分服务,甚至不会启动网络连接(更多信息请参见第5章)。此时,可以修改任何给定的网络配置参数,如主机名和IP地址,然后在生产网络上启动该克隆得到的虚拟机。此外,需要确保相关网卡的硬件(MAC)地址与源客户机的硬件地址不同,这样可以避免与原来的网卡产生冲突。
虽然用这种方法克隆一个或两个虚拟机并不难,但是想象一下克隆几十个虚拟机,而它们后来都需要配置为不同服务的情况。此时如果有更多的自动操作,则过程会更加简单。为此,Red Hat提供了一个名为Kickstart的系统。