libvirt and QEMU 进阶篇

四、创建虚拟机

1、创建镜像

在 KVM 中,创建一个虚拟机镜像,大小为 8G,其中 qcow2 格式为动态分配,raw 格式为固定大小。
# qemu-img create -f qcow2 ubuntutest.img 8G

2、创建虚拟机

创建虚拟机:名字叫 ubuntutest,内存大小为 1024M,使用动态分配的 8g 大小的磁盘,挂载 Ubuntu 的 ISO 光盘,VNC 端口为 5919
qemu-system-x86_64 -enable-kvm -name ubuntutest  -m 2048 -hda ubuntutest.img -cdrom ubuntu-14.04-server-amd64.iso -boot d -vnc :19

3、创建网络

img
# brctl addbr br0
# ip link set br0 up
# tunctl -b
# ip link set tap0 up
# brctl addif br0 tap0

4、虚拟机启用网络

# qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.qcow2 -vnc :19 -net nic,model=virtio -nettap,ifname=tap0,script=no,downscript=no
# ifconfig br0 192.168.57.1/24 # 虚拟机启动后,网卡没有配置,所以无法连接外网,先给 br0 设置一个 ip。
# sysctl -p
	net.ipv4.ip_forward = 1
# sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 在 Host 上设置 NAT,并且 enable ip forwarding

五、虚拟化细节

1、内存

内存管理和内核同页合并(KSM):

  • 允许在进程间共享相同的内存页面
    • 对于同一个模板部署出来的虚拟机有用,对异构的没有效果。
  • KVM 使用该机制来允许内存过量使用。在两个相似的虚拟机中,内存中很有可能有许多相同页面。KSM允许主机扫描虚拟机内存来查找相同页面,并将它们整合成一个共享内存页面,从而减少物理内存消耗
    • 同一个虚拟机模板运行10个虚拟机,大量页是相同的,可以合并成一份。如果修改了一些东西,发生了变化就多占用一些。

2、存储

虚拟机的储存从虚拟机使用的物理储存中提取。它通过使用半虚拟化或仿真块设备驱动与虚拟机相连。

2.1. 储存池

储存池 ”(storage pool)即一个由 “libvirt” 管理的文件、目录或储存设备,其目的是为虚拟机提供储存空间。储存池被分隔为存储 “ ”(volume),可以用来存储虚拟机镜像或附加到虚拟机作为额外额存储。多个客机可共享同一储存池,允许储存资源得到更好分配。

image-20220429163524349

  • 本地储存池

    本地储存池直接连接到主机服务器。它们包括本地目录、直接连接的磁盘、物理分区和本地设备上的 LVM 卷组。本地储存池对开发、测试及不需要迁移或具有大量虚拟机的小型部署十分有用。因为本地储存池不支持实时迁移,所有它可能不适用于某些生产环境。

  • 网络(共享)储存池

    网络储存池包括在网络上使用标准协议共享的储存设备。使用 virt-manager 在主机间进行虚拟机的迁移需要网络储存,但是当使用 virsh 迁移时,它是可选的。网络储存池由 libvirt 进行管理。

2.2. 储存卷

储存池进一步划分为 “储存卷 ”(storage volume)。储存卷是物理分区、LVM 逻辑卷、基于文件的磁盘镜像及其它由 libvirt 控制的储存形式的抽象层。不论基于何种硬件,储存卷会作为本地储存设备呈现给虚拟机。

image-20220429163002853

2.3. 仿真储存设备

虚拟机可以被提供一系列经主机仿真的储存设备。每种储存设备都适用于特定的使用情况。具有可以选择不同种类储存设备的功能,可以使灵活性以及与客机操作系统的兼容性达到最大化。

image-20220429163343577

  • virtio-scsi

    virtio-scsi 是为使用大量磁盘或高级储功能(如 TRIM)的客机推荐使用的半虚拟化设备。使用除 Red Hat Enterprise Linux 7 以外操作系统的客机可能需要安装相应的客机驱动。

  • virtio-blk

    virtio-blk 是适用于向客机提供镜像文件的半虚拟化储存设备。virtio-blk 可以为虚拟机提供最好的磁盘 I/O 性能,但比 virtio-scsi 的功能少。

  • IDE

    IDE 是推荐给不支持 virtio 驱动的旧客机用的。IDE 性能不如 virtio-scsi 或 virtio-blk,但它与不同系统广泛兼容。

  • CD-ROM

    ATAPI CD-ROM 与 virtio-scsi CD-ROM 都能向客机提供 ISO 文件或主机 CD-ROM 驱动。virtio-scsi CD-ROM 可以与安装了 virtio-scsi 驱动的客机一同使用。ATAPI CD-ROM 兼容性广泛但性能较低。

  • USB 存储设备和软盘

    如需要可移动介质,可使用 USB 存储设备和软盘。USB 存储设备由于其较大的容量比软盘更受欢迎。

  • AHCI

    仿真 AHCI(高级主机控制器接口,Advanced Host Controller Interface)总线是 IDE 的一种替代品,它的特征增多、性能提高,包括与串行 ATA(SATA)设备交流。AHCI 作为一种技术预览包括在 Red Hat Enterprise Linux 7.1 中。

2.4. 主机存储

磁盘镜像可以储存在一系列和主机相连的本地或远程存储中。

  • 镜像文件

    镜像文件储存在主机文件系统中。它可以储存在本地文件系统中,如 ext4 或 xfs;或网络文件系统中,如 NFS 。例如 libguestfs 这样的工具,能管理、备份及监控文件。KVM 上的磁盘镜像格式包括:rawraw 镜像文件指不包含附加元数据的磁盘内容。假如主机文件系统允许,raw 文件可以是预分配(pre-allocated)或稀疏(sparse)。稀疏文件根据需求分配主机磁盘空间,因此它是一种精简配置形式(thin provisioning)。预分配文件的所有空间需要被预先分配,但它比稀疏文件性能好。当对磁盘 I/O 性能要求非常高,而且通常不需要通过网络传输镜像文件时,可以使用 raw 文件。qcow2qcow2 镜像文件提供许多高级磁盘镜像特征,如快照、压缩及加密。它们可以用来代表通过模板镜像创建的虚拟机。因为只有虚拟机写入的扇区部分才会分配在镜像中,所以 qcow2 文件的网络传输效率较高。Red Hat Enterprise Linux 7.0 及更新版本支持 qcow2 v3 镜像文件格式。

  • LVM 卷

    逻辑卷可用于磁盘镜像,并使用系统的 LVM 工具进行管理。 由于它使用更简单的块储存模式,LVM 比文件系统的性能更高。LVM 精简配置为 LVM 卷提供快照和高效的空间使用,它可以作为 qcow2 的一种替代选择。

  • 主机设备

    主机设备如物理 CD-ROM、原始磁盘或 LUN 都可以提供给客机。这使得 SAN 或 iSCSI LUN 还有本地 CD-ROM 都可以提供给客机所用。在 SAN 而不是主机上进行储存管理时,可以使用主机设备。

  • 分布式存储系统

    Gluster 卷可用作磁盘镜像。它提供了高效的、使用网络的集群存储。Red Hat Enterprise Linux 7 包括在 GlusterFS 上对磁盘镜像的原生支援。这使 KVM 主机可以直接从 GlusterFS 卷引导虚拟机镜像,并使用 GlusterFS 卷中的镜像作为虚拟机的数据磁盘。与 GlusterFS FUSE 相比,KVM 原生支持性能更好。

4、数据恢复

5、虚拟化嵌套

从 Red Hat Enterprise Linux 7.5 开始,嵌套虚拟化作为 KVM 来宾虚拟机的技术预览版提供。借助此功能,在物理主机( 0 级L0 级)上运行的来宾虚拟机(也称为 1 级L1 )可以充当管理程序,并创建自己的来宾虚拟机 ( L2 )。

嵌套虚拟化在各种场景中都很有用,例如在受限环境中调试管理程序以及在有限数量的物理资源上测试更大的虚拟部署。但是,请注意,在生产用户环境中不支持或不推荐使用嵌套虚拟化,它主要用于开发和测试。

嵌套虚拟化依赖于主机虚拟化扩展来运行,它不应与使用 QEMU Tiny Code Generator (TCG) 仿真在虚拟环境中运行来宾混淆,红帽企业 Linux 不支持这种仿真。

  • 按照以下步骤启用、配置和开始使用嵌套虚拟化:

    1. 启用:默认情况下禁用该功能。要启用它,请在 L0 主机物理机上使用以下过程。

      对于英特尔:

      1. 检查您的主机系统上是否可以使用嵌套虚拟化。

        $ cat /sys/module/kvm_intel/parameters/nested
        

        如果此命令返回Y1,则启用该功能。

        如果命令返回0or N,请使用步骤 iiiii

      2. 卸载kvm_intel模块:

        #modprobe -r kvm_intel
        
      3. 激活嵌套功能:

        #modprobe kvm_intel nested=1
        
      4. 嵌套功能现在仅在 L0 主机下一次重新引导之前启用。要永久启用它,请将以下行添加到/etc/modprobe.d/kvm.conf文件中:

        option kvm_intel nested=1
        

      对于 AMD:

      1. 检查您的系统上是否可以使用嵌套虚拟化:

        $cat /sys/module/kvm_amd/parameters/nested
        

        如果此命令返回Y1,则启用该功能。

        如果命令返回0or N,请使用步骤 iiiii

      2. 卸载kvm_amd模块

        #modprobe -r kvm_amd
        
      3. 激活嵌套功能

        #modprobe kvm_amd nested=1
        
      4. 嵌套功能现在仅在 L0 主机下一次重新引导之前启用。要永久启用它,请将以下行添加到/etc/modprobe.d/kvm.conf文件中:

        option kvm_intel nested=1
        
    2. 使用以下方法之一为嵌套虚拟化 配置 L1 虚拟机:

      • 虚拟管理器

        打开预期来宾的 GUI,然后单击 “显示虚拟硬件详细信息”图标。选择Processor菜单,在Configuration部分中,输入host-passthroughModel字段(不要使用下拉选择),然后单击Apply

        img

      • 域 XML

        将以下行添加到来宾的域 XML 文件中:<cpu mode='主机直通'/>如果来宾的 XML 配置文件已经包含一个<cpu>元素,则重写它。

    3. 开始使用嵌套虚拟化,请在 L1 来宾中安装 L2 来宾。为此,请遵循与安装 L1 来宾时相同的过程 - 有关详细信息,请参阅第 3 章,创建虚拟机

  • 限制和限制

  • 强烈建议在 L0 主机和 L1 来宾中运行 Red Hat Enterprise Linux 7.2 或更高版本。L2 来宾可以包含 Red Hat 支持的任何来宾系统。

  • 不支持迁移 L1 或 L2 来宾。

  • 不支持将 L2 来宾用作管理程序并创建 L3 来宾。

  • 并非主机上的所有可用功能都可供 L1 管理程序使用。例如,IOMMU/VT-d 或 APICv 不能被 L1 管理程序使用。

  • 要使用嵌套虚拟化,主机 CPU 必须具有必要的功能标志。要确定 L0 和 L1 管理程序是否设置正确,请cat /proc/cpuinfo在 L0 和 L1 上使用该命令,并确保为两个管理程序上的相应 CPU 列出以下标志:

    • 对于 Intel - vmx(硬件虚拟化)和ept(扩展页表)
    • 对于 AMD - svm(相当于 vmx)和npt(相当于 ept)

6、虚拟机迁移

分为冷迁移和热迁移,后者不能断电。红帽支持热迁移必须使用共享存储,否则无法实现。实现需要 ip 都在一个子网里,同节点 cpu 相同,操作系统架构(64bit 32bit)。热迁移其实就是拷贝内存。

  • 迁移是将正在运行的客户机从一个硬件节点(主机)移至另一个的能力。普通迁移会暂停客户机、将其内存状态复制到另一节点,然后在新节点上恢复客户机
  • 实时迁移允许客户机在整个迁移过程中持续运行,通常只在该过程结束时暂停计算机,以完成内存转移并在新节点上恢复客户机。使用现场迁移时,远程客户端不会注意到客户机已更改了计算机

7、虚拟机网络

imgqemu-kvm,会打开一个 /dev/net/tun 字符设备,物理机上会建立一个网卡

所有发到这个网卡上的网络包会被 qemu-kvm 接收进来,变成二进制串

qemu-kvm 会模拟一个虚拟机里面的网卡,将二进制的串变成网络包,发给虚拟机里面的网卡。

8、硬件和 VirtIO(这一块不是很懂)

  • 每家硬件厂商为每种虚拟化写虚拟化驱动,现在可以写一个标准下的 virtio 驱动程序,使得虚拟化访问 virtio 的虚拟化硬件。

  • 虚拟客户机不可以直接访问系统上的物理硬件。这会危及到主机上所有虚拟客户机的安全和隔离KVM hypervisor 不允许客户机拥有物理硬件的低级别访问权限。相反,它会通过设备模型为客户机提供仿真硬件。仅对诸如网络接口、视频卡、磁盘控制器以及BIOS 等外围硬件进行仿真:不对CPU进行仿真

  • QEMU模拟器的改良版本qemu-kvm用作KVM设备模型。所选硬件相对基本且较旧,因此各种客户机操作系统更有可能具有支持它们的驱动程序,其提供的性能通常比仿真原始硬件高

  • 设备模型仿真的虚拟硬件的速度不像预期那样快。我们必须通过软件仿真实际硬件这一事实,意味着主机需要占用更多CPU资源来仿真硬件,并且虚拟客户机中实现的性能达不到理想状态。

  • 很多不同的hypervisor提供不同的接口供半虚拟化设备与其hypervisor接口,进而要求客户机使用不同的驱动程序

  • IBM和红帽领导开展了VirtIO项目,为独立于hypervisor和总线的半虚拟化驱动程序开发一个开放式标准框架。KVM当前已采用此标准。

  • 上游Linux内核包含用于Linux虚拟客户机的virtio驱动程序,其中包括网络驱动程序、block设备驱动程序和时钟驱动程序。这些驱动程序已反向移植到红帽企业Linux 5.3/4.8及更高版本中提供的内中。在安装虚拟客户机期间,内核应自动检测提供的半虚拟化设备,并加载virtio驱动程序。红帽 还为Microsoft Windows 提供 Virtio 驱动程序。

六、工具的使用(已熟练使用)

1、virsh

  • virsh 是一个用于监控系统程序和客户机虚拟机器的命令行接口(CLI)工具。virsh 命令行工具建立在 libvirt 管理 API,并作为可选择的一个运行方式来替代 qemu-kvm 命令和图形界面的 virt-manager 应用。无特权的用户以只读的方式使用 virsh 命令;有根用户权限的用户可以使用该命令的所有功能。virsh 是一个对虚拟环境的管理任务进行脚本化的理想工具。另外,virsh 工具是 virsh 客机域的一个主要管理接口,可以用于创造、暂停和关闭 “域”,或罗列现有域。这一工具作为 libvirt-client 软件包中的一部分被安装。

    - # virsh list --all

    - # virsh destroy servername

    - # virsh start servername

    - # virsh snapshot-create

    - # virsh reboot

    - # virsh shutdown

    - # virsh dumpxml servername

    - # virsh define 使用一个xml文件来创建虚拟机

    - # virsh create 使用一个xml文件来创建并启动虚拟机

2、virt-install

  • virt-install是一个命令行工具,它提供了一种将操作系统配置到虚拟机中的简单方法。
  • virt-install 是一个用来配置新的虚拟机器的命令行工具。它通过使用连续的控制台、SPICE 或 VNC 客户 / 服务器成对图形,支持基于文本和图形的安装。安装介质可以是本地的,或已有的远程 NFS、HTTP 或 FTP 服务器。考虑到便捷的自动化安装,还可以通过配置此工具实现在无需人工参与的情况下运行,并在安装完成时快速启动客机。此工具以 python-virtinst 软件包的一部分进行安装。

3、virt-manager

  • virt-manager应用程序是一个桌面用户界面,用于通过 libvirt 管理虚拟机。它主要针对KVM虚拟机,但也管理XenLXC(Linux 容器)。它提供了正在运行的域、它们的实时性能和资源利用率统计信息的摘要视图。向导可以创建新域,以及配置和调整域的资源分配和虚拟硬件。嵌入式 VNC 和 SPICE 客户端查看器向来宾域提供完整的图形控制台。
  • virt-manager 是一个用于管理虚拟机器的简单的图形工具。它所提供的功能用以控制现有机器寿命周期、储备新机器、管理虚拟网络、访问虚拟机器的图形控制台并查看性能数据。这个工具包括在同名的软件包中,称为 virt-manager。

4、virt-viewer

  • virt-viewer是一个轻量级的 UI 界面,用于与虚拟客户操作系统的图形显示进行交互。它可以显示 VNC 或 SPICE,并使用 libvirt 查找图形连接详细信息。
  • Virt Viewer 用于使用 SPICE 远程桌面协议访问 KVM 虚拟机。它是用于 KVM 虚拟化解决方案(如 Proxmox)的 VMware 远程控制台 (VMRC) 的替代方案。Virt Viewer 具有许多高级功能,例如 VMware Remote Console (VMRC)。

参考

1、红帽

知识库 1344173

产品文档-虚拟化入门指南

产品文档-工具篇

RH318 培训教材

2、官网

man && /usr/share

FAQ - KVM

libvirt

QEMU

virt-manager

3、社区

archlinux.org

suse.com

趣谈 Linux 操作系统

【虚拟机】虚拟化技术以及 KVM、QEMU 与 libvirt 介绍

QEMU 和 KVM 的关系

4、口述

贺老师

posted @ 2022-04-30 09:37  季文康  阅读(919)  评论(0编辑  收藏  举报