无法连接到app商店-酷狗截铃声

kvm虚拟化
2023年4月3日发(作者:乐视会员)

使用KVM虚拟化技术

KernelVirtualMachine(KVM)虚拟化在很大程度上已取代Xen,成为在大多数Linux系统上创建和支持虚拟机(VM)的默认开源

方案。尽管这种变化的动机主要与构建和支持相关,而不是技术,但事实是许多对虚拟化感兴趣的企业IT小组需要学习KVM所

使用的管理和控制工具。类似地,已投资Xen虚拟化且正在转向使用KVM的IT小组,可能希望尽可能将现有的虚拟机转换为

KVM支持的格式,而不是重新创建它们。

WilliamvonHagen,系统管理员,作家,WordSmiths

能够在单个服务器硬件平台上运行多个虚拟机(VM)的能力在如今的IT基础架构中实现了了成本、系统管理和灵活性等方面的优

势。在单个硬件平台上托管多个虚拟机,可减少硬件开支并帮助最大限度降低基础架构成本,比如能耗和制冷成本。将操作方式

不同的系统作为虚拟机整合在一个硬件平台上,可简化通过管理层(比如开源虚拟化库(libvirt))和基于它的工具(比如图形化

的虚拟机管理器(VMM))对这些系统的管理工作。虚拟化还提供了如今面向服务的高可用性IT操作中所需的操作灵活性,支持

将正在运行的虚拟机从一个物理主机迁移到另一个主机,以满足硬件或物理场所问题的需要,或者通过负载平衡最大限度提高性

能,或者应对日益增长的处理器和内存需求。

开源桌面虚拟化应用程序(比如VirtualBox)使用户甚至是小型企业(中小型业务部门或中小型企业)环境能够在单个物理系统

上运行多个虚拟机。但是,VirtualBox等虚拟化环境是作为客户端应用程序在桌面或服务器系统上运行的。企业计算环境需要更

接近物理硬件(“裸机”)的高性能、面向服务器的虚拟化环境,支持用少得多的操作系统开销来执行虚拟机。裸机虚拟化机制可

更好地管理硬件资源,也可最佳地利用对内置于大多数64位x86和PowerPC处理器中的虚拟化硬件支持。

裸机虚拟化机制使用一个称为虚拟机管理程序的小操作系统,来管理和计划虚拟机以及相关的资源。裸机虚拟机管理程序称为

Type1虚拟机管理程序(参见参考资料获取有关虚拟机管理程序的更多常规信息链接)。两种最流行的裸机开源虚拟化技术是

KernelVirtualMachine(KVM)和Xen。尽管Xen和KVM各有自己的优点和爱好者,但KVM的流行度和复杂度在不断增加,它

现在已成为大多数Linux®发行版的推荐默认虚拟化机制。

比较KVM和Xen

Xen虚拟化环境(参见参考资料获取链接)在传统上提供了Linux系统上性能最高的开源虚拟化技术。Xen使用一个虚拟机管

理程序来管理虚拟机和相关的资源,还支持半虚拟化,这可在“知道”自己已实现虚拟化的虚拟机中提供更高的性能。Xen提供

了一个专门执行资源和虚拟管理与计划的开源虚拟机管理程序。在裸机物理硬件上引导系统时,Xen虚拟机管理程序启动一个称

为Domain0或管理域的主虚拟机,该虚拟机提供了对所有在该物理主机上运行的其他虚拟机(称为Domain1到DomainN,或

者简单地称为XenGuest)的中央虚拟机管理功能。

不同于Xen,KVM虚拟化使用Linux内核作为它的虚拟机管理程序。对KVM虚拟化的支持自2.6.20版开始已成为主流Linux内

核的默认部分。使用Linux内核作为虚拟机管理程序是KVM受到批评的一个主要方面,因为(在默认情况下)Linux内核并不符

合Type1虚拟机管理程序的传统定义—“一个小操作系统”。尽管大多数Linux发行版所提供的默认内核的确如此,但可以轻松地

配置Linux内核来减少它的编译大小,以便它仅提供作为Type1虚拟机管理程序运行所需的功能和驱动程序。RedHat自己的

EnterpriseVirtualization产品仅依靠这样一种特殊配置的、相对轻量型的Linux内核来运行。但更重要的是,“小”只是一个相对

的词汇,如今具有数GB内存的64位服务器可轻松地提供现代Linux内核所需的几MB空间。

KVM超越Xen成为大多数企业环境首选的开源裸机虚拟化技术,这有多个原因:

KVM支持自2.6.20版开始已自动包含在每个Linux内核中。在Linux内核3.0版之前,将Xen支持集成到Linux内核中

需要应用大量的补丁,但这仍然无法保证每个可能硬件设备的每个驱动程序都能在Xen环境中正确工作。

Xen支持所需的内核源代码补丁仅提供给特定的内核版本,这阻止了Xen虚拟化环境利用仅在其他内核版本中可用的新驱

动程序、子系统及内核修复和增强。KVM在Linux内核中的集成使它能够自动利用新Linux内核版本中的任何改进。

Xen要求在物理虚拟机服务器上运行一个特殊配置的Linux内核,以用作在该服务器上运行的所有虚拟机的管理域。KVM

可在物理服务器上使用在该物理系统上运行的LinuxVM中使用的相同内核。

Xen的虚拟机管理程序是一段单独的源代码,它自己的潜在缺陷与它所托管的操作系统中的缺陷无关。因为KVM是Linux

内核的一个集成部分,所以只有内核缺陷能够影响它作为KVM虚拟机管理程序的用途。

尽管Xen仍可提供比KVM性能更高的裸机虚拟化,但这些性能改进的价值常常比不上KVM虚拟化的简单性和易用性价值。

回页首

使用KVM虚拟化技术

KVM和Xen的常见管理工具

作为一种比KVM更成熟的裸机虚拟化技术,Xen提供了一组专门的管理命令,最著名的是xm命令行套件。像任何特定于技术

的管理命令集一样,xm工具拥有自己的学习曲线,而且不是所有Linux系统管理员都熟悉它。KVM很大一部分初始管理基础架

构继承自QEMU,这是一个已被广泛接受的Linux仿真和虚拟化包,它拥有相当的学习曲线且需要一定的专门知识。

尽管任何独创的技术拥有自己的命令集是很自然的,但越来越多的虚拟化技术让Linux供应商开始寻求一个管理接口来运行它

们。RedHat毋庸置疑是第一家大型开源公司,而且它领导了开发libvirt虚拟化应用编程接口(API)的工作,以支持可管理多种

虚拟化技术的工具的开发工作。libvirtAPI支持KVM、Xen、LXC容器、OpenVZ、User-modeLinux、VirtualBox、Microsoft®

Hyper-V®和许多VMware技术等虚拟化技术。

无需将赌注压在单个技术和相关的命令集上,专注于libvirt使系统管理员能够学习一组依赖于该API的命令行和图形化命令并继

续使用这些工具,无论底层虚拟化技术有何变化都是如此。类似地,虚拟化工具供应商可直接使用libvirtAPI获得相同的收益。

接下来的几节介绍基于libvirt的工具如何简化KVM虚拟化站点的常见管理任务。这些内容重点介绍了使用virsh和virt-install

命令的命令行示例,但所有这些任务都可在图形化的、基于libvirt的VMM(virt-manager)中执行。必须以root用户身份(或通

过sudo命令)执行所有这些命令。

本文剩下内容中的示例假设您已安装了合适的软件包,使Linux发行版能够支持KVM虚拟化并提供必要的工具。根据您的Linux

平台,所需的包会有所不同。例如,在RedHatEnterpriseLinux(RHEL)系统(或RHEL克隆)上,需要安装Virtualization、

VirtualizationClient、VirtualizationPlatform和VirtualizationTools包组。

回页首

使用存储池

一篇介绍如何创建简单KVM虚拟机的developWorks文章(参见参考资料获取链接)解释了如何使用一个磁盘镜像来安装虚拟

机,该镜像是在支持虚拟机的服务器本地的磁盘存储中创建的。手动创建每个用作磁盘镜像的本地文件,是初步试验虚拟机的一

种常见方式,但这种方式很快会变得耗时、单调且难以管理。

libvirt为虚拟机镜像和文件系统的位置提供了一种方便的抽象,称为存储池。存储池是一个本地目录、本地存储设备(物理设

备、逻辑卷或SCSI主机总线适配器[HBA]存储)、网络文件系统(NFS)或块级连网存储,可使用libvirt管理它们,并且可在其

中创建和存储一个或多个虚拟机镜像。本地存储很简单,但可能不灵活且不支持企业虚拟化的最关键需求:在虚拟机运行时将其

从一个服务器迁移到另一个服务器的能力,这也称为实时迁移(livemigration)。要轻松地支持实时迁移,虚拟机磁盘镜像应位于

一个NFS、块级连网存储或可从多个虚拟机主机使用的HBA存储中。

本节中的示例使用virsh命令,它是一个基于libvirt的命令套件,为创建和管理libvirt使用的所有对象—虚拟机(域)、存储

卷、存储池、网络、网络接口、设备等提供了各个子命令。

默认情况下,基于libvirt的命令使用虚拟化主机上的目录/var/lib/libvirt/images作为初始文件系统目录存储池。可使用virsh

pool-create-as命令轻松创建一个新的存储池。例如,下面的命令显示了在创建基于NFS的(netfs)存储池时必须指定的强制性

参数:

virshpool-create-asNFS-POOLnetfs

--source-host192.168.6.238

--source-path/DATA/POOL

--target/var/lib/libvirt/images/NFS-POOL

第一个参数(NFS-POOL)指定新存储池的名称,第二个参数指定所创建的存储池类型。--source-host选项的参数指定了通过

NFS导出存储池目录的主机。--source-path选项的参数指定该主机上导出的目录的名称。--target选项的参数指定了访问存储

池时所使用的本地挂载点。

创建新存储池后,它将在virshpool-list命令的输出中列出。下面的示例显示了默认的存储池和在上一个示例中创建的NFS-

POOL池:

virshpool-list--all--details

NameStateAutostartPersistentCapacityAllocationAvailable

----------------------------------------------------------------------------

defaultrunningyesyes54.89GB47.38GB7.51GB

NFS-POOLrunningnono915.42GB522.64GB392.78GB

使用KVM虚拟化技术

在这个示例输出中,注意新存储池标记为不会自动启动,表明系统重新启动后它不会自动启动,而且它没有持久化,表明在系统

重新启动后绝对不会定义它。存储池仅在它们受其XML描述支持时才能持久化,该XML描述位于目录/etc/libvirt/storage中。

XML存储池描述文件名与它们相关联的存储池名称相同,但文件扩展名是.xml。

要为手动定义的存储池创建XML描述文件,可使用virshpool-dumpxml命令指定一个池名称,将其XML描述转储为一个最终

参数。此命令写入到标准输出,所以需要将它的输出重定向到合适的文件中。例如,以下命令将为之前创建的NFS-POOL存储

池创建正确的XML描述文件:

cd/etc/libvirt/storage

virshpool-dumpxmlNFS-POOL>

即使将存储池持久化后,该池也不会标记为在重新启动虚拟化主机时自动启动。可使用virshpool-autostart命令后跟一个存储

池名称来将存储池设置为自动启动,如下面的示例所示:

virshpool-autostartNFS-POOL

PoolNFS-POOLmarkedasautostarted

将存储池标记为自动启动,意味着存储池将在虚拟化主机重新启动时可用。在技术上,它意味着/etc/libvirt/storage/autostart目

录包含该存储池XML描述的一个符号链接。

创建存储池后,可在该池内创建一个或多个虚拟机,如下一节中所述。

回页首

创建虚拟机

本节中的示例利用您在上节中创建的存储池,但使用了virt-install命令,这是一个基于libvirt的命令,从名称可以看出,其设计

宗旨是帮助从命令行创建虚拟机。

下一个示例virt-install命令创建一个名为RHEL-6.3-LAMP的硬件虚拟机,它的名称表明这个虚拟机正在运行RHEL6.3且用作一

个标准的LinuxWeb服务器。默认情况下,在创建新磁盘池卷时会使用您的虚拟机名称,所以应仔细选择此名称。虚拟机名称通

常遵循一种本地命名约定,它的设计应让您的管理员同事能轻松识别每个虚拟机的类型和用途。

virt-install--nameRHEL-6.3-LAMP

--os-type=linux

--os-variant=rhel6

--cdrom/mnt/ISO/rhel63-server-x86_

--graphicsvnc

--diskpool=NFS-01,format=raw,size=20

--ram2048

--vcpus=2

--networkbridge=br0

--hvm

--virt-type=kvm

virt-install命令的其他选项表明这个虚拟机将针对Linux和RHEL6Linux发行版而优化(分别是--ostype和--osvariant),将使

用ISO镜像/mnt/ISO/rhel63-server-x86_作为虚拟CD-ROM设备来安装(--cdrom)。从虚拟CD-ROM驱动器引导

时,virt-install命令使用VirtualNetworkComputing(VNC)协议创建一个图形控制台并尝试显示它(--graphics),在其中执行引

导和后续安装流程。如何连接到这个控制台取决于您如何连接到虚拟化服务器,它是否拥有图形化功能等,因此不属于本文的介

绍范畴。

--disk选项的参数指定将在从存储池NFS-POOL自动分配的20GB存储中创建虚拟机,这个存储池已在上一节中创建。将以raw

镜像格式创建这个虚拟机的磁盘镜像,这是一种很容易跨大部分虚拟化和仿真技术移植的简单磁盘镜像格式。(参见参考资料

中的libvirtStorageManagement页面链接,获取其他支持的镜像格式的信息。)

其他virt-install命令参数的作用是,新虚拟机最初将配置2GB内存(--ram)和两个虚拟CPU(--vcpus),而且它通过网桥br0访

问网络(--network)。请访问参考资料中的developerWorks文章“创建一个简单的KVM虚拟机”链接,了解创建网桥的相关信

息。

virt-install命令的最后两个选项优化了虚拟机,将其用作完全虚拟化的系统(--hvm),并表明KVM是支持新虚拟机的基础虚拟机

管理程序(--virt-type)。这两个选项都支持在创建和执行系统安装过程中进行某些优化,并且实际上是在未指定这些选项时的默

认值。如果要保留虚拟机安装的命令日志,那么显式指定这些选项是个不错的做法,因为这么做会在日志中保留每个虚拟机的虚

使用KVM虚拟化技术

拟化环境信息。

您可使用类似的命令创建一个运行其他操作系统的虚拟机,为它使用一个合适的名称并适当地更改--cdrom、--os-type和--os-

variant选项的参数。

回页首

结束语

基于Linux的开源虚拟化技术在不停地发展。KVM的易用性和持续发展已帮助它取代了可能更强大的Xen虚拟化技术,成为开

源Linux虚拟化的标准。无论选择哪种虚拟化技术,这种演变都突出了使用标准的、独立于技术的管理命令(比如libvirt虚拟化

API所提供的命令)的价值。

本文通过示例展示了如何使用基于libvirt的命令来简化虚拟机的存储分配以及在存储中安装它的过程,但仅触及了libvirtAPI和

基于它的免费命令所提供的许多强大管理功能的冰山一角。

使用KVM虚拟化技术

更多推荐

kvm虚拟化