虚拟化在 Linux 它已经成熟到可以与专有平台正面竞争的程度,并且 KVM 与 virt-manager 一起形成了一个难以击败的组合。 接近原生的性能、零许可和强大的管理工具 使这一组合成为台式机、实验室和生产的制胜之选。
如果你通常使用 VirtualBox 或 VMware Workstation,你将会感兴趣知道 KVM 在内核中充当 1 型虚拟机管理程序,并在 硬件 陪伴,并选择 适合虚拟化的分布. 使用 libvirt、virt‑manager、virsh 和 virt‑install,可以轻松创建、监控和自动化 虚拟机,无论是在您的笔记本电脑上还是在私有云集群中。
什么是 KVM 以及它在虚拟化环境中如何工作?
简单来说,KVM(基于内核的虚拟机)将Linux内核转变为高性能的虚拟机管理程序。 利用 CPU 虚拟化扩展(英特尔 VT-x、AMD-V)和扩展页面(EPT/RVI) 运行未经修改的客户系统并高效访问硬件。
KVM(基于内核的虚拟机)的定义
KVM 是一个内核模块(kvm.ko),附带 CPU 特定的驱动程序(kvm-intel.ko 或 kvm-amd.ko) 实现完全硬件虚拟化。与 QEMU 结合使用时,您可以获得设备模拟和对多种架构的支持,同时保持 性能非常接近裸机 当加速处于活动状态时。
KVM 架构与其他虚拟化解决方案的比较
与在主机操作系统上运行的 2 类虚拟机管理程序(例如 VirtualBox)不同,KVM 嵌入在内核中运行。 这种方法消除了中间层 并最大限度地降低开销。与 VMware ESXi 或 Hyper-V 等专有解决方案相比,KVM 的优势在于其灵活性、开放的生态系统以及 与 libvirt 等标准工具的兼容性.
KVM 对系统管理员的主要优势
- 资源效率: 嵌入内核可减少延迟和开销;QEMU 可提供您所需的虚拟设备。
- 可扩展性: 您可以增加虚拟机数量并根据需要调整 CPU、内存和存储,即使 实时迁移 主机之间。
- 兼容性: 支持多种客户系统(Linux、BSD、 Windows等)与 驱动程序 网络和磁盘的半虚拟化(virtio)。
- 硬件优化: 美国 VT-x/AMD-V 和 EPT/RVI 以加快客户执行速度并减少上下文切换。
- 费用: 避免许可并促进深度定制的开源解决方案。
在云托管环境中使用 KVM 虚拟化的优势
在云场景中,KVM 非常适合,因为它 开放模型、高性能、易于集成 具有编排和存储堆栈。它通常出现在私有云和 OpenStack 等平台中。
云中的可扩展性和灵活性
KVM+libvirt 组合提供稳定的 API,易于集成 自动化工具(Ansible、Terraform)和编排器由于 动态资源分配.
运营和基础设施成本
没有虚拟机管理程序许可证,组织可以将预算重新用于硬件和支持。 服务器整合和虚拟机密度 很高,从而降低了资本支出 (CAPEX) 和运营支出 (OPEX),尤其是在私有云中。
云端性能和资源优化
借助 virtio 进行网络和存储,更多 快速后端(SSD/NVMe、Ceph、iSCSI),实现了极具竞争力的响应时间。 实时迁移 CPU 固定有助于平衡负载,而不会出现明显的滞后。
使用 KVM 实现虚拟化环境的安全性
安全是任何虚拟化平台的首要任务。KVM 提供了一系列隔离和控制机制,并且 libvirt 增加了策略和遏制层 与现代 Linux 发行版非常契合。
虚拟化中的主要安全挑战
常见风险:虚拟机逃逸, 虚拟设备上的攻击面、客户机之间的横向流量以及糟糕的虚拟网络分段。粗心的权限和存储配置也可能导致 数据泄露.
KVM 内置的安全机制
- 硬件辅助虚拟化: Intel VT‑x 和 AMD‑V 有助于客户隔离并限制对实际硬件的访问。
- 安全虚拟网络: 使用 libvirt 管理的 NAT、网桥和 VLAN,此外 虚拟机管理程序中的防火墙 分割东西向流量。
- 带有 SELinux/AppArmor 的 sVirt: 强制限制每个虚拟机的 QEMU 进程,加强系统级别的隔离。
使用 KVM 保护虚拟化系统的最佳实践
- 不断更新: 内核、KVM、QEMU 和 libvirt 必须保持更新才能快速修复 CVE。
- 防火墙和隔离: 在主机上定义策略(iptables-nft/firewalld)并按功能隔离网络 VLAN/网桥.
- 按关键性细分: 按风险级别对虚拟机进行分组,并应用细粒度的访问和移动控制。
KVM与其他虚拟化技术的比较
KVM 与 VMware
VMware 以其成熟的生态系统、官方支持和 众多商业工具. KVM 带来开放性、降低成本和 弹性大 与第三方集成。具体选择取决于支持、预算和标准化要求。
KVM 与 Hyper-V
在 Windows 环境中,Hyper-V 提供与 Microsoft 生态系统的本机集成。 当 Linux 成为主角时,KVM 是更好的选择,追求便携性、控制力和成本效率。
每个平台的用例和建议
- 虚拟机: 非常适合 Linux 和云托管基础设施,具有定制需求和 自动化.
- VMware: 最适合重视优质支持、高级功能和 综合套件.
- Hyper-V: 如果 Windows Server 和 Microsoft 服务占主导地位,那么这是自然的选择。
- 岑: 建议当 严格隔离 是主导标准。
在云服务器上配置和部署 KVM
安装 KVM 的先决条件
- CPU支持: 在 BIOS/UEFI 中启用 VT‑x(英特尔)或 AMD‑V(AMD);建议使用 EPT/RVI 以获得最佳性能。
- 操作系统: Ubuntu、Debian、Fedora、CentOS/Alma/Rocky、Arch/Manjaro、MX‑Linux 等。支持 KVM 自内核 2.6.20 起 向前。
- recursos: RAM 和存储与虚拟机数量相匹配;SSD 或 NVMe 显著提升 输入/输出.
逐步安装(硬件和包装验证)
安装之前,请验证您的CPU是否支持虚拟化。 如果没有输出,请在 BIOS/UEFI 中启用 VT‑x/AMD‑V (看到 如何从 BIOS/UEFI 启用虚拟化).
egrep -c '(vmx|svm)' /proc/cpuinfo
您还可以使用 lscpu 检查虚拟化功能并确认 VT‑xo AMD‑V:
LC_ALL=C lscpu
在 Debian/Ubuntu 上,安装检查器并使用 kvm-ok 验证 KVM。 输出应该表明 /dev/kvm 存在 并且可以使用加速度。
sudo apt update
sudo apt install -y cpu-checker
kvm-ok
Debian/Ubuntu 及其衍生版本中的基础软件包: KVM、libvirt、bridge-utils 和 virt-manager.
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
激活并测试 libvirtd;将您的用户添加到 libvirt 和 kvm 组。 请登录或重启系统后再申请群组。.
systemctl status libvirtd
sudo usermod -aG libvirt "$USER"
sudo usermod -aG kvm "$USER"
在 Arch/Manjaro 上,安装推荐的套件,包括 UEFI(OVMF)、NAT 的 DNS 和基于 nftables 的防火墙规则。 在 Manjaro 中,可以用 iptables-nft 替换 iptables。.
sudo pacman -S --needed virt-manager qemu-desktop libvirt edk2-ovmf dnsmasq iptables-nft
sudo pacman -S --asdeps swtpm # TPM virtual
sudo systemctl enable --now libvirtd.service
sudo usermod -a -G libvirt,libvirt-qemu,kvm $USER
systemctl soft-reboot
在 MX‑Linux(基于 Debian)上,安装软件包后,检查模块和网络。 使用 lsmod 检查 kvm_intel 或 kvm_amd:
lsmod | grep -i kvm
管理默认虚拟网络(使用 virbr0 的 NAT): 激活它并将其设置为 引导.
virsh net-start default
virsh net-autostart default
为了加快客户网络的速度,在主机上加载 vhost_net。 它不是强制性的,但它可以提高 virtio-net 的性能.
sudo modprobe vhost_net
如果您需要从物理网络进行 L2 访问,请在 NIC 上创建桥接。 配置取决于您的发行版和网络管理器。;您可以使用 NetworkManager、systemd‑networkd 或 ifupdown,根据您的段调整 IP/DHCP。
使用 KVM 和 libvirt 管理虚拟机
- 创建虚拟机: 几分钟内即可使用图形界面(virt-manager)或 CLI(virt-install);支持本地 ISO 和 HTTP/FTP/NFS 源。
- 存储和网络: 使用 virsh/libvirt 管理池、卷、桥和 NAT;定义 virtio‑blk/scsi 和 virtio NIC 模型。
- 实时迁移: 在主人之间无缝移动客人 负载平衡或维护.
管理和监控虚拟机
管理虚拟化环境的工具
libvirt 生态系统提供了完整的工具箱: 虚拟管理器 (图形用户界面), 维尔什 (命令行界面), 虚拟查看器 (通过 VNC/SPICE 的图形控制台)。所有这些都依赖于 libvirt API 并在本地或远程运行。
性能监控和优化解决方案
对于实时指标,使用 虚拟顶层 (类似于 top)并辅以主机(htop、iostat)和客户指标的集合。 配置文件 I/O、CPU 和内存 有助于检测瓶颈并调整分配。
使用 KVM 实现虚拟机的自动化和编排
使用 Terraform(libvirt 提供程序)进行基础设施代码化, cloud‑init 用于自定义 镜像和 Ansible 在虚拟机生命周期管理方面是天然的盟友。在集群中,它集成了 无缝实时迁移和维护.
虚拟机管理器 (virt‑manager) – 快速使用
virt‑manager 提供了用于创建、配置和监控 KVM/QEMU 客户端的统一界面。 包括快照、网络管理和 VNC/SPICE 访问,以及 CPU、内存和设备的详细信息。
必备步骤:打开virt-manager并连接到QEMU/KVM;点击“新建”启动向导; 选择 ISO 或网络安装分配 RAM/CPU,定义磁盘和网络(默认使用 NAT virbr0 或网桥);检查并创建虚拟机。如果 SPICE 在您的环境中表现不佳, 使用 VNC 用于图形控制台。
在云环境中使用 KVM 的成本效益
基础设施节约模式
- 许可: 与专有套件相比,使用 KVM,虚拟化软件的成本降至零。
- 硬件: 主机进行更大程度的整合,充分利用 CPU、RAM 和存储.
- 实现: 包含初始投资和设计自定义堆栈的自由。
使用 KVM 优化云资源
- 动态分配: 根据需要调整 vCPU、RAM 和磁盘;在适当的时候固定 CPU 和大页面。
- 合并: 每台主机的高密度虚拟机减少了购买量和 维修费用.
- 能源效率: 更少的主机和更好的利用率可以减少 CPD 和私有云中的电力消耗。
KVM 环境中的可扩展性和性能
可扩展性的最佳实践
- 均衡分布: 分配 CPU、内存和存储;防止在没有遥测的情况下过度订阅。
- 容量规划: 衡量趋势并及时增长;KVM 允许您扩展资源而不会遇到重大挫折。
提高高负载下的性能
- 专用 CPU 和内存: vCPU 固定、NUMA 感知和内存预留可改善延迟。
- 硬件加速: 确保 VT‑x/AMD‑V 处于活动状态;启用 维蒂奥 在来宾中用于网络和磁盘。
- I/O优化: SSD/NVMe 存储、多线程队列和调整缓存(回写/无),适用于密集负载。
云端 KVM 优化存储和网络
在网络上,它减少了延迟 SR‑IOV、vhost_net 和 VLAN 分段良好。对于数据,将快速卷与读/写缓存相结合,如果适用, Ceph 或 iSCSI 在分布式后端。
使用 KVM 排除常见虚拟化问题
性能问题及其解决方案
- CPU过载: 使用 htop/virt‑top 检查;调整 vCPU、启用固定或使用实时迁移重新部署。
- 内存不足: 增加分配的 RAM,评估大页面/膨胀,并防止主机交换。
- 慢速行驶: 使用 SSD/NVMe、virtio-SCSI 驱动程序和足够的缓存;使用 iostat/fio 进行测量。
常见设置错误及其解决方法
- 无法启动的虚拟机: 评论 日志 来自 /var/log 中的 libvirt/QEMU;验证磁盘路径和 OVMF/BIOS 固件.
- 无网络: 检查 libvirt(virbr0)中的网桥/NAT,以及“默认”网络是否处于活动状态并自动启动。
- 存储问题: 检查 virsh/virt‑manager 中的 SELinux/AppArmor 权限、池和卷。
网络故障排除和诊断
- 虚拟网络配置: 验证虚拟机是否位于正确的网络上以及主机桥是否具有连接。
- 防火墙策略: 检查 iptables‑nft/firewalld;打开必要的端口和 避免规则重叠.
- 使用 virtio 进行改进: 使用 virtio NIC,并且(如果适用) SR‑IOV 以减少开销和延迟。
云中 KVM 虚拟化的未来
虚拟化和 KVM 的新兴趋势
- 预测管理 IA: 预测峰值并自动调整资源的模型。
- 与容器的融合: 具有智能放置决策的混合 VM+容器环境。
- 主动检测: 实时分析 预防事故发生 性能和安全性。
KVM 在云托管发展中的作用
KVM 将继续成为私有云和公共云的支柱,因为它 稳定的 API(libvirt)、AI 集成 以及不断发展的生态系统。先进的自动化将减少手动任务并优化成本。
KVM 如何适应管理员的需求
该平台正在向 自动扩展、自适应安全和预测监控,保持任何 SRE/DevOps 团队所欣赏的精细控制。
QEMU/KVM、libvirt 和连接:实用技巧
QEMU 通过提供设备和多架构支持来补充 KVM;libvirt 通过 统一稳定的API了解最有用的连接 URI:
- qemu:///会话 (非特权本地):每个用户管理,没有高级网络。
- qemu:///系统 (特权本地):主机范围的管理,非常适合服务器。
- qemu+ssh://用户@主机/系统 (远程):安全地控制外部 KVM 虚拟机管理程序。
对于客人,优先考虑 virtio 设备 (网络和磁盘)。除非出于兼容性考虑,否则应避免使用 Realtek 8139 或 IDE 等通用模拟,因为 它们消耗更多 CPU 并降低 I/O 性能.
轻量级虚拟化、图形和固件
如果您的虚拟机需要 UEFI,请安装 edk2-ovmf. 为了兼容 Windows 11 或其他场景,添加虚拟 TPM swtpm。在图形控制台中尝试 SPICE,如果运行效果不佳, 切换到 VNC 来自 virt‑manager。
利用 KVM 和 SysAdminOK 最大限度地发挥虚拟化的优势
作为一种训练路线,专注于明确的目标是很有用的。 了解如何安装 KVM/QEMU、libvirt 和 virt-manager;使用与 libvirt 的特权连接;以及使用图形向导安装 Linux VM 是快速有效的步骤。
一个小的实际练习可以包括:验证 virt-manager 正在使用 qemu:///系统,检查可用的默认网络和存储,并使用 virtio 部署 Linux 客户端 网络和磁盘 来自本地 ISO。
备份和数据保护
的策略 备份 这至关重要。有一些解决方案可以与基于 KVM 的平台集成,例如 Proxmox、oVirt、Red Hat Virtualization、Oracle Linux Virtualization Manager 或 华为 融合计算这些工具通常提供重复数据删除、压缩、增量备份和 粒度恢复 (在文件级别),以及计划任务、云端和异地选项。确认与您的堆栈的兼容性(某些堆栈不支持“原生 KVM”),并充分利用 试用期 验证性能和 RTO/RPO。
虚拟机管理器:安装和工作流程
实际上,使用 virt-manager 的流程非常简单:更新系统、安装软件包、运行工具,然后 连接到 QEMU/KVM从那里,向导将指导您选择安装介质、资源和网络。
后续管理同样简单: 启动/停止虚拟机调整 CPU/RAM、编辑磁盘和网络,并在进行敏感更改之前创建快照。借助 libvirt,您可以根据需要在 CLI(virsh/virt-install)和 GUI(virt-manager)之间无缝切换。
KVM 网络:默认 NAT 和网桥
默认情况下,libvirt 使用 NAT 和网桥创建“默认”网络 虚拟机如果您需要虚拟机直接从 LAN 访问,请在物理网卡上设置网桥并将其分配给虚拟机。按 VLAN 分段 单独的环境 (dev、pre、prod)并记录地址。
请记住,您可以轻松激活并自动启动默认网络,并将其与 域名 用于 libvirt 控制的 NAT 网络上的 DHCP/DNS。
控制台、驱动程序和用户体验
在 Linux 和 Windows 客户机上安装驱动程序 维蒂奥 从一开始就使用网络和存储来提升性能。如果 SPICE 出现问题,请从 virt-manager 中的“显示详细信息”切换到 VNC; 每个环境的行为可能不同 取决于主机 GPU/驱动程序。
图形连接与 virt-viewer 和嵌入式 virt-manager 查看器原生集成,从而轻松 立即控制台访问 创建虚拟机后。
良好的操作规范
设置策略:一致的虚拟机命名, 存储池 通过性能、分段网络、具有到期日期的快照和经过测试的备份进行区分。它集成了监控(CPU、内存、I/O 警报)和 维护流程 具有更改窗口和实时迁移。
为了安全地连接到虚拟机管理程序,请使用 qemu+ssh 使用密钥并按组 (libvirt/libvirt‑qemu) 和角色限制访问。控制 SELinux/AppArmor 权限并防止运行 特权管理 来自通用帐户。
以上所有内容表明,使用 KVM、libvirt 和 virt-manager,您可以构建一个强大、安全且高效的平台,而无需担心许可成本: 从系统管理员的笔记本电脑到 CPD 中的集群,堆栈响应、扩展,并可以优雅地实现自动化。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。