标签:磁盘空间 需要 镜像 互联网 相关 文档 images active 网络安装
在第3章《搭建独立的KVM虚拟化》中,你安装并启动了libvirtd服务。你还引入了帮助你管理虚拟机的libvirt管理工具virt-manager和virsh。
相较于命令行,新用户总是更喜欢GUI。因此我们从virt-manager开始讲解。我们也认为,了解virt-manager将快速推进使用libvirt和virsh管理虚拟机的学习过程。我们会尽可能提供等价的virsh命令,使你有机会同时学习virt-manager和virsh。
在本章中,我们将讨论以下主题:
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 访问网络和存储配置的选项:
Virtual Networks标签允许我们配置各种类型的虚拟网络,并监视它们的状态:
使用虚拟网络标签,您将能够配置以下类型的虚拟网络:
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地址。
检查之前截图中默认网络的详细信息:
你可以使用红色的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>
以下的这些基本命令,将帮助你使用默认网络设置:
# virsh net-destroy default 停用默认虚拟网络
# virsh net-start default 启动默认虚拟网络
该标签允许你配置多种类型的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
virt-manager支持以下方法安装Guest OS:
在本节中,我们将创建运行不同操作系统的新虚拟机,每个操作系统都使用前面提到的安装方法。因此在这一节的结尾,你将熟悉创建虚拟机的所有可用方法,并彻底了解“创建新虚拟机”的流程向导。
我们会创建以下Guest OS:
我们可以通过执行 virt-manger命令,或者通过 Application | System Tools 下的按钮 启动 Virtual Machine Manger,从而使用图形界面创建虚拟机。
在Virtual Machine Manger的工具栏中点击“Create a new virtual machine”按钮,或者选择 File | New Virtual Machine 打开流程向导,它允许你从virt-manager创建新的虚拟机。
流程向导将虚拟机器的创建过程分解为五个步骤:
让我们创建一个虚拟机,并使用本地安装介质(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重启之后,您将看到操作系统登录界面。
这个方法涉及 使用RHEL,CentOS或Fedora的 installation tree来安装Guest OS。虚拟机创建和支持该方法的Guest OS安装过程也涉及五个阶段,从安装方式选择开始,然后继续进行至虚拟机命名和网络配置。
除了第二步(配置安装介质)之外,其他的步骤和基于ISO的安装方法完全一致。和ISO 镜像文件不同的是,我们在这里传入一个 RHEL/CentOS installtion tree的URL地址:
还可以使用“Kickstart URL”指明你的kickstart文件位置,并且使用“Kernel option”传递所需的自定义的内核引导参数。
该方法使用一个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是一个交互式命令行工具,可以用来设置Guest OS并启动安装过程。
以root身份执行virt-install命令开始,有许多选项可以作为参数传递给virt-install命令,以配置安装过程满足虚拟机创建的需求。virt-install是一个脚本友好的命令。它可以很轻松地集成到脚本中以实现自动化虚拟机创建。
在使用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可以用于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是另一个创建Just Enough Operating System (JEOS) Guest OS的工具。它促进了操作系统的自动安装,最终用户只需要预先提供很少输入信息。oz的输入是一个TDL格式的模板,它描述了创建镜像的指令:
它可以自动安装各种各样的OS,包括Windows。在内部,oz对RHEL使用一套预定义的kickstart文件,对Debian使用preseed文件,对Windows系统使用XML文件,以实现自动化安装。
目前,oz支持i386和x86_64架构。以下是oz支持的操作系统列表:
使用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
语法:
以上操作会生成一个libvirt XML文件(包含了镜像的路径和其他的参数),你可以用它来快速启动一台虚拟机。
virsh define <xml_fike>
virsh start <vm_name>
/etc/oz/oz.cfg是虚拟机配置的oz文件。它是一个标准的INI格式文件,分为paths
, libvirt
, cache和
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
以下是你必须要注意的几个指令:
所有其他配置命令的用法可以在文档中查询:https://github.com/clalancette/oz/wiki/oz-customize
为了演示,让我们创建一个以下配置的Windows 7虚拟机:
要使用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>
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快速创建虚拟机。
在下一章中,我们将提供关于虚拟存储和网络的更详细的信息。
<Mastering KVM Virtualization>:第四章 使用libvirt创建你的第一台虚拟机
标签:磁盘空间 需要 镜像 互联网 相关 文档 images active 网络安装
原文地址:http://www.cnblogs.com/echo1937/p/7373234.html