<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快速创建虚拟机。

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

 

转载于:https://www.cnblogs.com/echo1937/p/7373234.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dive in to the cutting edge techniques of Linux KVM virtualization, and build the virtualization solutions your datacentre demands About This Book Become an expert in Linux virtualization Migrate your virtualized datacenter to the cloud Find out how to build a large scale virtualization solution that will transform your organization Who This Book Is For Linux administrators – if you want to build incredible, yet manageable virtualization solutions with KVM this is the book to get you there. It will help you apply what you already know to some tricky virtualization tasks. What You Will Learn Explore the ecosystem of tools that support Linux virtualization Find out why KVM offers you a smarter way to unlock the potential of virtualization Implement KVM virtualization using oVirt Explore the KVM architecture – so you can manage, scale and optimize it with ease Migrate your virtualized datacenter to the cloud for truly resource-efficient computing Find out how to integrate OpenStack with KVM to take full control of the cloud In Detail A robust datacenter is essential for any organization – but you don't want to waste resources. With KVM you can virtualize your datacenter, transforming a Linux operating system into a powerful hypervisor that allows you to manage multiple OS with minimal fuss. This book doesn't just show you how to virtualize with KVM – it shows you how to do it well. Written to make you an expert on KVM, you'll learn to manage the three essential pillars of scalability, performance and security – as well as some useful integrations with cloud services such as OpenStack. From the fundamentals of setting up a standalone KVM virtualization platform, and the best tools to harness it effectively, including virt-manager, and kimchi-project, everything you do is built around making KVM work for you in the real-world, helping you to interact and customize it as you need it. With further guidance on performance optimization for Microsoft Windows and RHEL virtual machines, as well as proven strategies for backup and disaster recovery, you'll can be confident that your virtualized data center is working for your organization – not hampering it. Finally, the book will empower you to unlock the full potential of cloud through KVM. Migrating your physical machines to the cloud can be challenging, but once you've mastered KVM, it's a little easie.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值