kvm虚拟化

测试环境 Ubuntu 22.04 (Ubuntu 5.15.0-58.64-generic 5.15.74) server版本

ubuntu server虚拟化官方文档
suse 15sp2 虚拟化官方文档

概述

KVM: Kernel-based Virtual Machine,基于内核的虚拟机,是全虚拟化的解决方案。

硬件要求

  • X86_64体系架构:

    • AMD系列中支持AMD-V(svm) 和 Intel系列中支持VT-x(vmx)的处理器

      1
      2
      3
      baoze@baoze:~$ cat /proc/cpuinfo |grep -Eoc "(svm|vmx)"
      8
      baoze@baoze:~$
    • BIOS中未禁用虚拟化功能

      1
      2
      3
      4
      5
      baoze@baoze:~$ sudo apt install cpu-checker
      baoze@baoze:~$ kvm-ok
      INFO: /dev/kvm exists
      KVM acceleration can be used
      baoze@baoze:~$
  • arm体系架构:最初是从 Arm Cortex-A15 开始向 Armv7-A 处理器添加虚拟化支持的,其中包括 Cortex-A7 和 Cortex-A17。Armv8-A 处理器包含虚拟化支持

kvm相关组件

包括两个主要组件:

  • 一组内核模块(kvm.ko、kvm-intel.ko 和 kvm-amd.ko),提供核心虚拟化基础结构和特定于处理器的驱动程序。
  • 一个用户空间程序 (qemu-system-ARCH/libvirt),提供虚拟设备模拟以及用于管理 VM Guest(虚拟机)的控制机制。

可以直接使用 QEMU 工具或使用基于 libvirt 的堆栈来管理 VM Guest(虚拟机)、虚拟储存和虚拟网络。

  • QEMU 工具包括 qemu-system-ARCH、QEMU 监视器、qemu-img 和 qemu-ndb。
  • 基于 libvirt 的堆栈包括 libvirt 本身,以及 virsh、virt-manager、virt-install 和 virt-viewer 等基于 libvirt 的应用程序。

libvirt

libvirt 是一个库,提供用于管理 KVM、LXC、Xen 等流行虚拟化解决方案的通用 API。该库为这些虚拟化解决方案提供规范化管理 API,以便为更高层级的管理工具提供一个跨超级管理程序的稳定接口。该库还提供用于管理 VM 主机服务器上的虚拟网络和储存的 API。每个 VM Guest 的配置都储存在 XML 文件中。

  • virsh (libvirt-clients包)
    用于管理 VM Guest 的命令行工具,其功能与虚拟机管理器类似。可让您更改 VM Guest 的状态(启动、停止、暂停等)、设置新的 Guest 和设备,或编辑现有配置。virsh 还可用于编写 VM Guest 管理操作的脚本。

  • virt-manager
    用于管理 VM Guest 的桌面工具,通常成为虚拟机管理器。

  • virt-install
    用于通过 libvirt 库创建新 VM Guest 的命令行工具。virt-install 是虚拟机管理器使用的默认安装工具。

  • virt-viewer
    VM Guest 图形控制器的查看器。

QEMU

QEMU 是快速的跨平台开源计算机模拟器,可为您模拟数量庞大的硬件体系结构。QEMU 可让您在现有系统(VM 主机服务器)之上运行未经修改的完整操作系统 (VM Guest)。