<Mastering KVM Virtualization>:第四章 使用libvirt创建你的第一台虚拟机

在第3章《搭建独立的KVM虚拟化》中,你安装并启动了libvirtd服务。你还引入了帮助你管理虚拟机的libvirt管理工具virt-manager和virsh。

相较于命令行,新用户总是更喜欢GUI。因此我们从virt-manager开始讲解。我们也认为,了解virt-manager将快速推进使用libvirt和virsh管理虚拟机的学习过程。我们会尽可能提供等价的virsh命令,使你有机会同时学习virt-manager和virsh。

在本章中,我们将讨论以下主题:

  • virt-manger相关的所有内容
  • 默认的虚拟存储和网络配置
  • 各种Guest安装方法(PXE/ISO/NETWORK/IMPORT)
  • 使用virt-builder和oz工具快速创建多个VM

virt-manager介绍

virt-manager应用程序是一个基于Python的桌面用户程序,通过libvirt管理虚拟机。它主要针对KVM虚拟机,但也可以管理Xen和LXC(Linux容器)等其他虚拟机。virt-manager显示运行的VM的摘要视图,提供它们的性能和资源利用率统计数据。使用virt-manager图形界面,你可以很容易地创建新的VM,监控它们,并在需要时进行配置更改。内嵌的VNC和SPICE client viewer提供了一个完整的VM的图形控制台。

正如我们在第三章中提到的,Host需要向VM分配CPU,内存,存储和网络资源。在本章中,我们将介绍KVM Host的基本配置,并使用virt-manager创建虚拟机。让我们通过执行virt-manager命令或按下Alt + F2来启动Virtual Machine Manager,然后它将显示virt-manager对话框。

如果你不是root用户,在执行命令之前将提示你输入root密码。此处的密码认证过程由polkit框架处理。polkit是一套授权API,用于将特权程序(例如系统守护进程)给无特权程序提供服务。

如果你希望允许某些组或用户访问virt-manager而不必进行root用户认证,则需要创建一个polkit规则。规则文件必须在/etc/polkitl-1/runles.d目录中创建。

例如,假设你希望wheel组的所有用户都无需输入root密码可以直接访问virt-manager,可以创建/etc/polkit-1/rules.d/70-libvirtd.rules文件并在其中加入以下内容:

polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("wheel")) {
  return polkit.Result.YES;
  }
});

保存并关闭文件。libvirtd进程会监视polikit的rules.d目录的内容变化,并在检测到变化时自动重载规则,所以你不需要通过systemctl命令重载进程。如果一切操作顺利完成,你会发现,现在所有wheel组的用户都可以无需输入root密码来启动virt-manager。通过以下命令创建wheel组的用户:

# usermod -G wheel <username>

如果你仔细检视这条polkit规则,你会发现它会检查:该用户是否属于wheel组,是否为本地用户,是否属于一个活动会话。如果通过,org.libvirt.unix.manage动作的返回结果是YES(表示允许该动作)。它也可以被设置成以下形式:

NO:拒绝访问请求(return polkit.Result.No)

AUTH_SELF:要求输入该用户自身密码(return polkit.Result.AUTH_SELF)

AUTH_ADMIN:要求输入该系统管理员的密码(return polkit.Result.AUTH_ADMIN)

打开virt-manager后,点击Edit -- Connection Details 访问网络和存储配置的选项:

  • Overview选项会显示libvirt URI、CPU和内存使用情况等信息。
  • Virtual Networks和Storage选项将显示虚拟机所使用的网络和存储池的详细信息。
  • Network Interface选项提供主机网络的详细信息,并提供配置它们的选项。我们会在第五章 网络与存储 中详细介绍。

Virtual Networks标签

Virtual Networks标签允许我们配置各种类型的虚拟网络,并监视它们的状态:

使用虚拟网络标签,您将能够配置以下类型的虚拟网络:

  • NATed
  • Routed
  • Isolated

1. NATED虚拟网络

基于NAT的虚拟网络,向虚拟机VM提供了出站网络连接。这意味着VM可以根据Host主机上可用的网络连接与外部网络通信,但是没有一个外部设备能够与VM发起通信。在此设置中,VM和Host应该能够通过在Host上配置的桥接接口(bridge interface)彼此通信。

2. ROUTED虚拟网络

一个ROUTED虚拟网络允许将虚拟机直接连接到物理网络。依据Hypervisor上的路由规则,VMs可以发送数据包到外部网络。

3. ISOLATED虚拟网络

顾名思义,它提供了Hypervisor和虚拟机之间的私有网络。

 

我们将在下一章中通过实例详细介绍每一种网络配置,以及在生产环境中使用的其他网络实现,在本章中,我们将集中讨论默认类型的虚拟网络 -- NAT。一旦您了解了默认网络是如何工作的,就很容易理解其他网络拓扑。

使用 virsh net list --all 列出所有虚拟网络,--all 表示列出所有 活跃/非活跃 虚拟网络,如果没有指定 --all 选项,那么只会输出 活跃的虚拟网络。

# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

默认网络类型(NATed)

如前所述,默认网络是基于NAT的虚拟网络。它允许虚拟机与外部网络进行通信,不管hypervisor上是何种可用的活动网络接口(以太网、无线、VPN等)。它还提供了一个IP子网和一个DHCP服务器,以便VM能够自动获取它们的IP地址。

检查之前截图中默认网络的详细信息:

  • default是虚拟网络的名称。这是在创建虚拟网络时提供的。
  • Device表示在Host主机上创建的桥接网络(网桥)的名称。网桥是创建虚拟网络的主要组成部分。我们将在后面的一章中更深入地介绍网桥。
  • State表示虚拟网络的状态。它可以是活动的,也可以是不活动的。
  • Autostart表示虚拟机是否随着libvirtd服务启动。
  • IPv4 Configuration 提供了私有网络的信息,DHCP服务器提供给VM的IP地址范围,以及转发模式。转发模式可以是NAT或者isolated

 你可以使用红色的STOP标志按钮停用default网络,也可以使用PLAY按钮重新启用它。“+”按钮用于创建新的虚拟网络,这个内容我们将在下一章节讲解。“X”按钮可以删除虚拟网络。

你也可以使用virsh命令查看这些信息:

# virsh net-info default
Name:           default
UUID:           ba551355-0556-4d32-87b4-653f4a74e09f
Active:         yes
Persistent:     yes
Autostart:      yes
Bridge:         virbr0

-----

# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>ba551355-0556-4d32-87b4-653f4a74e09f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:d1:56:2e'/>
  <ip address='192.168.124.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.124.2' end='192.168.124.254'/>
    </dhcp>
  </ip>
</network>

以下的这些基本命令,将帮助你使用默认网络设置:

  • 虚拟网络配置文件以XML的格式保存在 /etc/libvirt/qemu/networks/ 目录,对于默认网络类型,文件名为 /etc/libvirt/qemu/networks/default.xml
  • virsh net-destroy 停用虚拟网络;virsh net-start 启动虚拟网络。当使用该虚拟网络的VM处于激活状态时,不要执行上述两个命令。这会中断VM的网络连接。
  • # virsh net-destroy default        停用默认虚拟网络
    # virsh net-start default          启动默认虚拟网络

     

Storage标签

该标签允许你配置多种类型的storage pool和监控storage pool的状态,以下截图展示了Storage标签的内容:

Storage标签页显示了可用storage pool的信息。storage pool是指存储虚拟机磁盘映像的存储库。

截至到写稿时,libvirt支持从多种类型的存储源创建storage pool,具体类型如截图所示,其中使用最普遍的是“文件系统目录”和“逻辑卷LVM”,我们将在下一节中做更进一步的了解。

Default storage pool:default是libvirt创建的,基于文件的,用于存储虚拟机镜像文件的storage pool的名称。storage pool的目录位置为/var/lib/libvirt/images

使用Virtual Machine Manager创建虚拟机

virt-manager支持以下方法安装Guest OS:

  • 本地安装介质(ISO镜像或者CD-ROM)
  • 网络安装(HTTP,FTP,或者NFS)
  • 网络启动(PXE)
  • 导入已存在磁盘镜像

在本节中,我们将创建运行不同操作系统的新虚拟机,每个操作系统都使用前面提到的安装方法。因此在这一节的结尾,你将熟悉创建虚拟机的所有可用方法,并彻底了解“创建新虚拟机”的流程向导。

我们会创建以下Guest OS:

  • Windows 7
  • CentOS 6

我们可以通过执行 virt-manger命令,或者通过 Application | System Tools 下的按钮 启动 Virtual Machine Manger,从而使用图形界面创建虚拟机。

创建虚拟机 流程向导

在Virtual Machine Manger的工具栏中点击“Create a new virtual machine”按钮,或者选择 File | New Virtual Machine 打开流程向导,它允许你从virt-manager创建新的虚拟机。

流程向导将虚拟机器的创建过程分解为五个步骤:

  1. 选择安装方式
  2. 配置安装介质
  3. 配置CPU和内存
  4. 配置虚拟机存储
  5. 虚拟机命名和网络配置

让我们创建一个虚拟机,并使用本地安装介质(ISO镜像或CD-ROM)方法安装CenOS 6.5操作系统。

该安装方法要求将操作系统安装媒体插入系统的CD-ROM托盘中,也可在本地使用ISO镜像,或通过网络。存放ISO文件的理想位置是/var/lib/libvirt/images目录,它是virt-manager的默认存储池,并且正确设置了所有SELinux和其他权限。如果ISO文件存放在其他的位置,务必要保证virt-manager可以正常访问。

1. 一旦你确保virt-manager能够访问安装媒体,向导将要求您选择如何安装操作系统。选择“Local install media (ISO Image or CDROM)”,点击Forward按钮:

2. 单击“Forward”按钮将带你到第2步,您必须指定ISO镜像位置。如果您正在使用物理DVD或CD,请选择对应选项。virt-manager根据安装介质自动检测操作系统。它使用了libosinfo提供的操作系统信息数据库。在撰写本文时,libosinfo数据库包含了关于近302个操作系统的信息,包括Windows、Linux、Unix和所有最重要的Linux发行版。你可以通过运行sinfo-query os命令从libosinfo数据库中提取操作系统列表。

TIP:选择正确的操作系统名称非常重要,因为仿真硬件的选择紧密地映射到虚拟机的操作系统类型集。比如,对于Windows系统,默认的磁盘格式为IDE,而Linux系统的默认磁盘类型是virtio。

3. 在下一个页面,指定要为虚拟机分配的内存和CPU数量:

4. 向导会显示你可分配的最大内存和CPU的上限。配置这些设置,并点击“Forward”继续虚拟机的存储设置:

5. 要确保为虚拟机提供足够的磁盘空间。默认情况下,它在/var/lib/libvirt/qemu目录创建一个虚拟磁盘,这是默认池。如果在系统上有其他自定义的storage pool,选择“Select Managed or other existing storage”,可以直接输入磁盘的路径,或者点击“Browse”按钮,它会打开“Locate or create storage volume”对话框,你可以在已经定义的storage pool中选择或者创建一个新的volume。我们将在下一节中讨论storage pool以及学习如何创建它们。

NOTE:这里有一个单选框“Allocate entire disk now”,以选择磁盘的置备方式。不勾选此框则表示 瘦置备模式(thin-provisoned disk),勾选此框表示 厚置备模式(thick-provision disk),也称为预分配磁盘。

6. 下一个也是最后一个步骤是命令虚拟机和配置网络。默认的主机名基于选择的操作系统(比如CentOS 6.5的虚拟机默认主机名为centos6.5)。你可以把它改成任何你想要的名字,但是要注意,只有下划线,点号和连字符这些符号是被支持的。

点开“Advance options”将显示虚拟网络配置。默认情况下,KVM提供类似NAT的桥接网络,连接到这个NAT的虚拟机不会将自己暴露在外部网络上,但是可以通过Host OS的设置获得外部网络连接。如果你打算在虚拟机上运行服务器软件或WebServer,并希望它可以被外部网络上的其他设备访问,那么你将不得不使用其他虚拟网络配置,如Linux bridge或者macvtap。

“Set a fixed MAC Address”运行你为你的虚拟机设置一个自定义的MAC地址。libvirt默认的MAC地址区间是“ 52:54:00 ”。

7. 如果你希望先进一步配置虚拟机的硬件,请勾选“Customize configuration before install”选框,然后再点击“Finish”。这样做将打开另一个向导,允许您添加、删除和配置虚拟机的硬件设置。

8. 如果一切顺利,新建的虚拟机将会打开一个虚拟控制台。新的domain name出现在Virtual  Machine Manager的domain列表当中。安装过程从boot:提示符开始,就和原生硬件的安装过程一样。

9. 安装向导的最后一步是单击“Reboot”按钮以重新启动系统并完成安装。在VM重启之后,您将看到操作系统登录界面。

网络安装方式(HTTP,FTP,,或NFS)

这个方法涉及 使用RHEL,CentOS或Fedora的 installation tree来安装Guest OS。虚拟机创建和支持该方法的Guest OS安装过程也涉及五个阶段,从安装方式选择开始,然后继续进行至虚拟机命名和网络配置。

除了第二步(配置安装介质)之外,其他的步骤和基于ISO的安装方法完全一致。和ISO 镜像文件不同的是,我们在这里传入一个 RHEL/CentOS installtion tree的URL地址:

还可以使用“Kickstart URL”指明你的kickstart文件位置,并且使用“Kernel option”传递所需的自定义的内核引导参数。

网络启动(PXE)

该方法使用一个PXE服务器(Preboot eXecution Environment)安装Guest OS。PXE安装需要在你希望创建虚拟机的子网上运行一个PXE服务器,并且Host 系统必须和PXE服务器具备网络连接。

由virt-manager创建的默认NATed网络类型与PXE安装方式是不兼容的,因为连接到NAT的虚拟机不会将自己暴露在外部网络当中,因此PXE服务器无法看见它,也不能发送所需的数据来执行安装。以PXE的方式安装Gesut OS,你必须在Host 系统上使用桥接网络或者macvtap网络。例如,在这里,我们将使用一个基于macvtap的网络配置并开始安装。

1. 在创建新虚拟机的向导中选择 PXE作为安装方式,并遵循其他步骤来配置ISO安装过程,除了配置网络的第五步:

 

2. 在“Advanced options” 选择下拉菜单中的 Host device eth0:macvtap,设置 Source mode为Bridge。如果需要的话设置一个自定义MAC地址,然后点击“Finish”按钮开始安装。

导入已存在的磁盘镜像

顾名思义,这允许你导入一个预安装和配置的磁盘镜像,而不是进行手工安装。磁盘镜像必须包含一个可引导的操作系统。这通常用于分发预构建的设备镜像,也用于在脱机模式下,将虚拟机从一个主机转移到另一个主机。

在准备虚拟机的过程中,导入磁盘镜像比其他选项快得多。许多Linux发行版都提供预配置的可引导的磁盘镜像。

NOTE:你可以从以下地址下载Fedora 预配置磁盘镜像:https://getfedora.org/en/cloud/download/

1. 从virt-manager GUI启动 “Create a New Virtual Machine” 向导,选择“Import existing disk image”作为OS安装方法

2. 提供已存在镜像的路径。确保它存放在一个已定义的存储池中,或者是virt-manager可以访问的位置。点击“Forward”按钮,依照剩余的步骤,这与ISO的安装过程是一样的(除了需要虚拟机准备的步骤):

 

virt-install介绍

virt-install是一个交互式命令行工具,可以用来设置Guest OS并启动安装过程。

以root身份执行virt-install命令开始,有许多选项可以作为参数传递给virt-install命令,以配置安装过程满足虚拟机创建的需求。virt-install是一个脚本友好的命令。它可以很轻松地集成到脚本中以实现自动化虚拟机创建。

使用virt-install命令安装Windows 7操作系统

在使用virt-install命令开始操作系统安装之前,需要创建一个虚拟磁盘。要创建虚拟磁盘,可以使用qemu-img命令:

1. 创建所需大小的虚拟磁盘。例如,我们将使用raw磁盘格式创建一个20GB磁盘:

# qemu-img create -f raw -o size=10G /var/lib/libvirt/qemu/win7.img

2. 通过以下命令启动 virt-install:

virt-install \
--name Win7 \
--ram 1024 \
--disk path=./var/lib/libvirt/qemu/win7.img \
--vcpus 1 \
--os-type Windows \
--os-variant Windows7 \
--network bridge=virbr0 \
--graphics vnc,port=5999 \
--console pty,target_type=serial \
--cdrom ./win7.iso \

类似地,你可以使用 virt-install -promot 命令进行交互式安装,它会要求你顺序和交互式地输入上述信息。

3. 就像Virtual Machine Manager一样,在创建虚拟机之后,你需要使用VM的控制台并继续进行实际的客户机安装。要使用虚拟机控制台(virtual machine console),请使用virt-viewer工具:

# virt-viewer <virtual machine > name

自动化虚拟机部署

虚拟机创建和Guest OS安装是两个不同的任务。创建VM就像准备新的PC硬件,但是你还需要另外安装操作系统。

正如你所看到的virt-manager或virt-install,一个VM首先配置了所需的硬件资源,然后你选择一种支持的安装方法来安装OS。安装实际的操作系统(在虚拟化中也叫做Guest)的方式与物理系统完全相同;操作系统的安装程序要求提供详细信息并完成相应的系统配置。

如果将这两个任务组合在一起,一步完成虚拟机创建(以及完整的OS安装),会怎么样?很显然,它将有助于更快更自动化地部署虚拟机。

virt-builder和oz这样的工具可以用来结合这两个任务,并通过消除手动安装操作系统的要求,来加速安装新的虚拟机镜像。让我们先来了解virt-builder是什么,并通过例子来看它是如何工作的。

virt-builder介绍

virt-builder是一个命令行工具,它使用干净的,经过数字签名的操作系统模板创建磁盘镜像,定制和快速构建新虚拟机。virt-builder可以用于Fedora,Ubuntu,CentOS,Debian和其他发行版的镜像构建。

这个工具由libguestfs-tools-c软件包提供,可以通过运行yum install libguestfs-tools-c -y进行安装。

NOTE:要注意的是,默认情况下virt-builder从http://libguestfs.org/download/builder/软件源下载操作系统模板,所以要访问软件源必须具备互联网接入。如果没有互联网连接,那么就必须具备一个本地的软件源。如何搭建一个virt-builder的本地软件源超出了本书的范围。尽管如此,你还是可以在virt-builder的man手册中找到良好的文档支持。

例如,如果你想创建一个50GB磁盘的CentOS 7.1 虚拟机,那么使用virt-builder就只需要运行以下的简单命令:

# cd /var/lib/libvirt/qemu/ ; /usr/bin/virt-builder centos-7.1 --format raw --size 50G

[   1.0] Downloading: http://libguestfs.org/download/builder/centos-7.1.xz
[   2.0] Planning how to build this image
[   2.0] Uncompressing
[  14.0] Resizing (using virt-resize) to expand the disk to 50.0G
[ 149.0] Opening the new disk
[ 179.0] Setting a random seed
[ 180.0] Setting passwords
virt-builder: Setting random password of root to Arw83LnDi66eMcmh
[ 198.0] Finishing off
                 Output file: centos-7.1.img
                 Output size: 50.0G
               Output format: raw
          Total usable space: 48.1G
                  Free space: 47.3G (98%)

然后输入第二个命令:

#virt-install --name centos --ram 1028 --vcpus=2 --disk path=/var/lib/libvirt/qemu/centos-7.1.img  --import

正如你所看到的,它首先下载模板,解压,调整磁盘镜像以适应给定的大小,将模板的数据拷贝至镜像,定制虚拟机(设置一个随机root密码),然后完成整个操作。生成的VM没有用户账户,有随机的root密码,并且只占用了操作系统本身所需的最小的磁盘空间,但是如果需要的话,将会增加到50GB。

镜像文件centos-7.1.img存储在/var/lib/libvirt/qemu/目录。

第二个命令 virt-install 只导入镜像和创建虚拟机。

使用virsh list --all 命令会显示新创建的虚拟机,# virsh start <vmname> 启动虚拟机,可以使用输出中的随机root密码登陆系统,你的虚拟机就创建完成了。

在本例中,root密码是唯一的自定义项,实际上还有许多其他的定制项,例如 安装软件,设置主机名,编辑任意文件,创建用户等。要了解更多关于用户自定义的内容,请参考virt-builder的man手册和。

virt-builder在当前用户的home目录缓存了已下载的模板。缓存的路径一般是$XDG_CACHE_HOME/virt-builder/或者$HOME/.cache/virt-builder。

你可以通过运行virt-builder --print-cache命令,打印关于缓存目录的信息,包括那些缓存的Guest OS的模板。

 

# virt-builder --print-cache
cache directory: /root/.cache/virt-builder
centos-6               x86_64   no
centos-7.0             x86_64   no
centos-7.1             x86_64   cached
cirros-0.3.1           x86_64   no
debian-6               x86_64   no
debian-7               x86_64   no
debian-8               x86_64   no
fedora-18              x86_64   no
fedora-19              x86_64   no
fedora-20              x86_64   no
fedora-21              x86_64   no
fedora-21              aarch64  no
fedora-21              armv7l   no
fedora-21              ppc64    no
fedora-21              ppc64le  no
fedora-22              x86_64   no
fedora-22              aarch64  no
fedora-22              armv7l   no
scientificlinux-6      x86_64   no
ubuntu-10.04           x86_64   no
ubuntu-12.04           x86_64   no
ubuntu-14.04           x86_64   no

可以看到centos-7.1的模板被缓存了,下一次创建centos-7.1的Guest OS时,它将使用缓存的模板并更快地创建虚拟机。

通过以下命令你可以删除缓存清理空间:

#virt-builder --delete-cache

你甚至可以通过执行virt-builder --cache-all-templates命令,下载所有当前地模板到本地缓存。

TIP:如果你遇到任何关于virt-builder的问题,可以使用--verbose显示详细的输出。

虽然virt-builder非常快,但它只适用于Linux Guest OS。由于缺少对Windows 操作系统的支持,于是有了oz。如果你想需要更多的灵活性,请使用oz。

oz介绍

oz是另一个创建Just Enough Operating System (JEOS) Guest OS的工具。它促进了操作系统的自动安装,最终用户只需要预先提供很少输入信息。oz的输入是一个TDL格式的模板,它描述了创建镜像的指令:

  • 创建镜像的ISO位置或者URI
  • 磁盘大小
  • 需要额外安装的软件包
  • 镜像创建完毕后需要执行的命令
  • 镜像创建完毕后需要注入的文件

它可以自动安装各种各样的OS,包括Windows。在内部,oz对RHEL使用一套预定义的kickstart文件,对Debian使用preseed文件,对Windows系统使用XML文件,以实现自动化安装。

目前,oz支持i386和x86_64架构。以下是oz支持的操作系统列表:

  • Debian: 5, 6, 7
  • Fedora Core: 1, 2, 3, 4, 5, 6
  • Fedora: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
  • FreeBSD: 10
  • Mageia: 4
  • Mandrake: 8.2, 9.1, 9.2, 10.0, 10.1
  • Mandriva: 2005, 2006.0, 2007.0, 2008.0
  • OpenSUSE: 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 12.1, 12.2, 12.3, 13.1
  • RHEL 2.1: GOLD, U2, U3, U4, U5, U6
  • RHEL 7: Beta, 0
  • RHEL/CentOS 3: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9
  • RHEL/CentOS/Scientific Linux 4: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9
  • RHEL/OL/CentOS/Scientific Linux{,CERN} 5: GOLD, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11
  • RHEL/OL/CentOS/Scientific Linux{,CERN} 6: 0, 1, 2, 3, 4, 5
  • RHL: 7.0, 7.1, 7.2, 7.3, 8, 9
  • Ubuntu: 5.04, 5.10, 6.06[.1,.2], 6.10, 7.04, 7.10, 8.04[.1,.2,.3,.4], 8.10, 9.04, 9.10, 10.04[.1,.2,.3], 10.10, 11.04, 11.10, 12.04[.1,.2,.3,.4,.5], 12.10, 13.04, 13.10, 14.04[.1], 14.10
  • Windows: 2000, XP, 2003, 7, 2008, 2012, 8, 8.1

使用oz创建一台虚拟机的步骤如下:

1. 使用以下命令安装oz和libguestfs-tools软件包

#yum install -y oz libguestfs-tools

2. 获取你想要使用oz安装的操作系统的ISO介质。对于Linux Guest OS,网络上基于HTTP对外开放的installation tree依然可以使用。比如:

3. 创建一个TDL文件(Template Definition Language),所有TDL文件支持的属性可以在GitHub上找到: https://github.com/clalancette/oz/wiki/Oz-template-description-language

4. 执行oz-install命令生成镜像

#oz-install -u -d3 TDL_FILE_PATH

语法:

  • u:在安装后,执行自定义步骤
  • d:打开日志级别,日志级别有:
    • 0: Errors only (this is the default)
    • 1: Errors and warnings
    • 2: Errors, warnings, and information
    • 3: All messages
    • 4: All messages, prepended with the level and classname

以上操作会生成一个libvirt XML文件(包含了镜像的路径和其他的参数),你可以用它来快速启动一台虚拟机。

virsh define  <xml_fike>
virsh start <vm_name>

oz配置文件

/etc/oz/oz.cfg是虚拟机配置的oz文件。它是一个标准的INI格式文件,分为pathslibvirtcache和icicle四个部分。让我们来查看一下文件的内容:

------------
[paths]
output_dir = /var/lib/libvirt/images
data_dir = /var/lib/oz
screenshot_dir = /var/lib/oz/screenshots
# sshprivkey = /etc/oz/id_rsa-icicle-gen

[libvirt]
uri = qemu:///system
image_type = raw
# type = kvm
# bridge_name = virbr0
# cpus = 1
# memory = 1024

[cache]
original_media = yes
modified_media = no
jeos = no

[icicle]
safe_generation = no

以下是你必须要注意的几个指令:

  • output_dir:它描述了镜像生成以后的保存路径。默认的路径是/var/lib/libvirt/images/。如果你想更改镜像的存储位置,可以修改这个值。
  • bridge_name:虚拟机需要连接到桥接网络名称。默认使用virbr0
  • memory:使用该配置命令,你可以定义虚拟机应该使用多大的内存
  • cpus:该配置命令可以定义虚拟机配置多少数量的cpu

所有其他配置命令的用法可以在文档中查询:https://github.com/clalancette/oz/wiki/oz-customize

使用oz创建虚拟机

为了演示,让我们创建一个以下配置的Windows 7虚拟机:

  • 生成的虚拟机有2048 MB内存
  • 虚拟机连接到桥接网络 vswitch
  • 磁盘大小为50GB
  • 安装介质为系统本地的ISO文件

要使用oz工具创建具有上述配置的虚拟机,请执行以下步骤:

1. 首先编辑/etc/oz/oz.cfg文件,配置memory和bridge配置命令,然后保存文件并退出:

memory = 2048
bridge_name = vswitch

2. 建立名为win7.tdl的TDL格式的文件,它包含以下的元素,保存至/root目录下(你可以使用vi或者选择其他编辑器):

<template>
<name>win7jeos</name>
<os>
<name>Windows</name>
<version>7</version>
<arch>i386</arch>
<install type='iso'>
<iso>file:///path/to/isos/win2k.iso</iso>
</install>
<key>MY_KEY_HERE</key>
</os>
<disk>
<size>50</size>
</disk>
<description>Minimal Windows7 </description>
</template>
  • 将file:///path/to/isos/win2k.iso替换为ISO文件的实际路径
  • MY_KEY_HERE替换为一个有效的key

NOTE:Windows需要一个安装key,所以如果<key>元素缺失,oz将会执行失败。

3. 执行oz-install:

#oz-install -u -d3 /root/win7.tdl

4. oz-install命令执行成功以后的输出,类似于:

[. . .]
INFO:oz.Guest.windows7:Cleaning up after install
       Libvirt XML was written to win7jeos_feb_11-2016

5. 使用virsh命令define并start虚拟机:

#virsh define win7jeos_feb_11-2016
#virsh start win7jeos

总结

在本章中,你首先了解了libvirt设置默认网络和存储设置,以促进虚拟机创建所需的基础设施,然后学习了不同的Guest OS安装方法,其中包括PXE,network,ISO和导入预配置可引导的OS镜像。我们还学习了如何使用virt-builder和oz快速创建虚拟机。

在下一章中,我们将提供关于虚拟存储和网络的更详细的信息。

 

posted @ 2017-10-24 16:27  又是火星人  阅读(1837)  评论(1编辑  收藏  举报