文章目录
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)
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
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论