重学kvm之一(kvm虚拟化解决方案之kvm、qemu、libvirt三剑客+虚拟化功能验证)

A、什么可以虚拟化

OS虚拟化:
Storage虚拟化:RAID、LVM、及 Software Defined Networking
Network虚拟化:SDN的(控制平面虚拟化和数据平面虚拟化)
GPU虚拟化:
Software虚拟化:
Hardware虚拟化:SR-IOV、英特尔CPU的vmx、AMD_CPU的svm

B、操作系统虚拟化的实现方式

1、虚拟化翻译技术(由虚拟机管理程序Hypervisor实现)
    Host;宿主机
    Guest:运行在宿主机上的虚拟机
    Hypervisor:可以实现多个Guest在同一个Host上运行,他为Guest提供虚拟的硬件,以及监控和管理Guest对资源的使用
    分类:无硬件辅助全虚拟化;半虚拟化;有硬件辅助虚拟化(KVM属于最后一种目前应用较为广泛)。

2、容器技术(暂未了解)

C、KVM概述(KVM、QEMU、libvirt三者的关系)

KVM是硬件辅助的全虚拟化解决方案。KVM虚拟化解决方案是由KVM、QEMU、libvirt 这三个独立又合作的开源项目组合而成。
kvm作为可加载的内核模块包含通用的kvm.io之外,还有争对英特尔的kvm-intel.ko ,争对AMD的kvm-amd.ko。加载这些模块后 一台linux主机就成为Hypervisor,就可以运行虚拟机了。

    KVM:提供内核支撑(KVM官网:https://www.linux-kvm.org)
    QEMU:提供虚拟硬件设备(qemu是一套完整的虚拟化解决方案,都是纯软件实现,遇到kvm后,qemu将cpu 和内存的虚拟化 交给了kvm来实现。)
    libvirt:管理虚拟机和其他虚拟化功能的集合,(包括 API库、守护进程libvirtd、和其他工具)(define的虚拟机xml文件默认路径:/etc/libvirt/qemu)

file
file

D、虚拟化功能验证

1、CPU虚拟化支持(英特尔是vmx、AMD是svm)
    egrep '(vmx|svm)' /proc/cpuinfo
    lscpu | grep vmx  或者 lscpu | grep svm

2、libvirt-client软件包中的virt-host-validate 命令可以更全面的验证宿主机的虚拟化功能
[root@node100 ~]# virt-host-validate 
  QEMU: Checking for hardware virtualization                                 : PASS
  QEMU: Checking if device /dev/kvm exists                                   : PASS
  QEMU: Checking if device /dev/kvm is accessible                            : PASS
  QEMU: Checking if device /dev/vhost-net exists                             : PASS
  QEMU: Checking if device /dev/net/tun exists                               : PASS
  QEMU: Checking for cgroup 'memory' controller support                      : PASS
  QEMU: Checking for cgroup 'memory' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'cpu' controller support                         : PASS
  QEMU: Checking for cgroup 'cpu' controller mount-point                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller support                     : PASS
  QEMU: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'cpuset' controller support                      : PASS
  QEMU: Checking for cgroup 'cpuset' controller mount-point                  : PASS
  QEMU: Checking for cgroup 'devices' controller support                     : PASS
  QEMU: Checking for cgroup 'devices' controller mount-point                 : PASS
  QEMU: Checking for cgroup 'blkio' controller support                       : PASS
  QEMU: Checking for cgroup 'blkio' controller mount-point                   : PASS
  QEMU: Checking for device assignment IOMMU support                         : PASS
  QEMU: Checking if IOMMU is enabled by kernel                               : WARN 注意这里(IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
   LXC: Checking for Linux >= 2.6.26                                         : PASS
   LXC: Checking for namespace ipc                                           : PASS
   LXC: Checking for namespace mnt                                           : PASS
   LXC: Checking for namespace pid                                           : PASS
   LXC: Checking for namespace uts                                           : PASS
   LXC: Checking for namespace net                                           : PASS
   LXC: Checking for namespace user                                          : PASS
   LXC: Checking for cgroup 'memory' controller support                      : PASS
   LXC: Checking for cgroup 'memory' controller mount-point                  : PASS
   LXC: Checking for cgroup 'cpu' controller support                         : PASS
   LXC: Checking for cgroup 'cpu' controller mount-point                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller support                     : PASS
   LXC: Checking for cgroup 'cpuacct' controller mount-point                 : PASS
   LXC: Checking for cgroup 'cpuset' controller support                      : PASS
   LXC: Checking for cgroup 'cpuset' controller mount-point                  : PASS
   LXC: Checking for cgroup 'devices' controller support                     : PASS
   LXC: Checking for cgroup 'devices' controller mount-point                 : PASS
   LXC: Checking for cgroup 'blkio' controller support                       : PASS
   LXC: Checking for cgroup 'blkio' controller mount-point                   : PASS
   LXC: Checking if device /sys/fs/fuse/connections exists                   : FAIL (Load the 'fuse' module to enable /proc/ overrides)

E、如何开启IOMMU功能,实现pci直通

IOMMU是内存管理单元,要启用pci直通就需要启用虚拟化扩展和IOMMU功能。
开启IOMMU,需要在grub中加入intel_iommu=on 或者 amd_iommu=on

    #编辑grub文件
    vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on"

    #刷新grub文件并重启宿主机
    grub2-mkconfig -o /boot/grub2/grub.cfg
    reboot

    #再次验证虚拟化功能
[root@node100 ~]# virt-host-validate 
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/983.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/2/26作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录