kvm 概述
KVM(Kernel-based Virtual Machine)是一个开源虚拟化技术,它将 Linux 内核转变为一个裸金属 hypervisor。
基本概念
1. 集成于 Linux:KVM 是 Linux 内核的一部分,支持在现有的 Linux 系统上创建和管理虚拟机。
2. 虚拟化类型:KVM 支持完全虚拟化,允许运行不同操作系统的虚拟机。
主要组成部分
1. QEMU:KVM 通常与 QEMU 一起使用,提供虚拟硬件和设备模拟。
2. libvirt:用于管理虚拟机的 API,促进与虚拟机的交互。
重要功能
1. 性能高效:KVM 利用硬件虚拟化技术(如 Intel VT-x 和 AMD-V)来提高性能。
2. 灵活性:可以支持多种操作系统,包括 Linux、Windows、BSD 等。
3. 可扩展性:适合从小型部署到大型数据中心的各种场景。
优势
1. 开源:完全开源,免费使用和分发。
2. 成熟生态:广泛的社区支持和丰富的文档资源。
3. 与多种工具兼容:支持与 OpenStack、Ansible 等工具集成,便于自动化管理。
使用场景
1. 云计算:KVM 是许多云服务提供商的底层虚拟化技术。
2. 开发和测试:为开发人员提供了快速重置和测试环境的能力。
3. 容器化:可以与容器技术(如 Docker)结合使用。
kvm 体系结构
内核层
KVM 模块:KVM 是 Linux 内核的一部分,提供对虚拟化硬件的支持。它将每个虚拟机视为一个普通的进程,并利用 CPU 的硬件虚拟化功能(如 Intel VT-x 和 AMD-V)。
用户空间
QEMU:作为用户空间的虚拟机监控程序,QEMU 负责提供虚拟硬件、设备模拟和管理虚拟机的生命周期。在 KVM 中,QEMU 可与 KVM 内核模块配合工作,实现高效的虚拟化。
管理层
libvirt:提供用户友好的 API 和工具,用于创建、管理和监控虚拟机。它支持多种后端,包括 KVM、Xen、VMware 等。
虚拟机层
虚拟机 (VM):使用 KVM 和 QEMU 创建的虚拟机,可以运行多种操作系统,并与物理主机共享资源。
管理工具
Virt-Manager:一个图形化管理工具,依赖于 libvirt,便于用户管理虚拟机。
命令行工具:如 virsh,用于在 CLI 中管理虚拟机。
存储和网络
虚拟存储:虚拟机的磁盘镜像文件(例如 QCOW2、RAW 等)通常存放在文件系统中或使用 LVM。
网络配置:支持桥接、NAT 和路由等多种网络连接模式,允许虚拟机与外部网络通信。
kvm 模块加载后运行模式
内核模式
定义:KVM 模块作为 Linux 内核的一个组成部分运行,拥有对硬件资源的完全访问权限。功能:处理虚拟机的管理和调度。直接与 CPU 的虚拟化扩展(如 Intel VT-x、AMD-V)交互。处理中断和异常,确保虚拟机的稳定性和性能。
用户模式
定义:虚拟化管理和监控的实现部分,通常由 QEMU 提供,运行在用户空间。功能:提供虚拟机的创建、启动、停止和监控等管理功能。处理虚拟硬件的模拟,如网络接口、磁盘驱动器等。管理 I/O 操作,确保虚拟机能够与外部设备进行通信。
来宾模式
定义:虚拟机运行的环境模式,虚拟机中的操作系统运行在来宾模式下。功能:来宾操作系统可以像普通的物理机一样运行,但实际上是在 KVM 管理的虚拟化环境中。所有硬件访问请求通过 KVM 和 QEMU 的虚拟设备模拟器进行处理。来宾系统可以是各种操作系统,如 Linux、Windows 等。
kvm 宿主机环境配置
验证 cpu 开启虚拟化
# Intel CPU 对应vmx# AMD CPU 对应 svm
grep -Em 1 "vmx|svm" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault pti ssbd ibrs ibpb stibp tpr_shadow ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat vnmi md_clear flush_l1d arch_capabilities
kvm 工具包说明
qemu-kvm: QEMU是一个主机与虚拟机之间通信的虚拟化软件。它模拟机器的物理硬件。结合KVM,QEMU可以高效地为Linux上的KVM提供底层仿真支持。libvirt-daemon: 这是Libvirt的主要守护进程,用于管理虚拟机和其他虚拟化技术。Libvirt本身是一个API框架,它提供了一个抽象的API接口,用于与各种底层虚拟化技术交互。这意味着开发者或用户可以使用Libvirt编写的应用程序管理不同的虚拟化平台,如KVM、VMware等。libvirt-client: 这是用于与Libvirt守护进程交互的客户端软件。通过它,用户可以远程或本地管理虚拟机。libvirt-daemon-driver-qemu: 这是Libvirt连接QEMU的驱动。当使用KVM时,这个驱动是非常关键的,因为它允许Libvirt与QEMU通信并管理虚拟机。libvirt: 这是为多种虚拟化技术提供的软件套件。它是虚拟化管理工具的主要库和命令行界面API工具集合,让您可以访问和管理不同的虚拟化解决方案,不仅仅是KVM。这也意味着用户可以使用libvirt工具与Hyper-V或其他虚拟化技术进行交互。但它最常用于管理KVM和其他开源虚拟化技术。virt-manager: 这是一款图形界面的虚拟机管理工具,通常与KVM和Libvirt一起使用。通过图形界面,用户可以轻松地创建、管理和监控虚拟机。virt-install: 这是用于安装虚拟机的命令行工具。它允许您创建虚拟机并将其连接到所需的所有网络和存储资源等。这对于脚本化或批量安装虚拟机的任务非常有用。virsh: 基于libvirt API创建的命令行工具集。它们是主要的工具用于在命令行上管理虚拟机和其他虚拟化任务。它们提供了许多命令来创建、启动、停止和管理虚拟机等任务。virt-viewer: 这个工具允许用户通过VNC或SPICE协议查看虚拟机的图形控制台。这对于远程访问和管理虚拟机非常有用。您提到的“virtviewer”可能是该工具的另一个名称或版本。cockpit: 这是一个在CentOS 8和其他基于Web的管理工具上提供的高级Web界面的管理工具。它为用户提供了一个Web门户界面来监控和管理运行在服务器上的虚拟化系统和服务。它的主要功能之一是提供一个基于Web的图形界面来管理KVM和其他虚拟化技术上的虚拟机。
AMD CPU 故障
报错提示
kvm_buf_set_msrs:Assertion ret == cpu->kvm_msr_buf->nmsrs' failed.
故障修复方法
tee /etc/modprobe.d/qemu-system-x86.conf << EOF
options kvm ignore_msrs=1
EOF
参考文档
https://linux-kvm.org/page/Main_Page