Ubuntu 上 KVM 虚拟化完整指南:安装、网络、存储与最佳实践

目次

介绍

Ubuntu 是全球使用最广泛的 Linux 发行版之一,受到从个人用户到企业系统的各种环境的信赖。它常用于服务器搭建和开发环境。当你想在 Ubuntu 上实现全规模虚拟化时,最强大的解决方案之一就是 KVM(基于内核的虚拟机)。

KVM 是一种直接内置于 Linux 内核的基于 hypervisor 的虚拟化技术。通过利用 Intel VT、AMD‑V 等硬件辅助虚拟化特性,它提供了高性能和高稳定性。作为开源方案,KVM 让你在保持低成本的同时构建稳健的虚拟化基础设施。

虚拟化技术乍看可能比较复杂。然而,借助 Ubuntu 与 KVM 的组合,即使是初学者也能相对轻松地创建和运行虚拟机。它同样非常适合希望高效利用现有物理服务器资源的中级用户,以及希望将生产系统虚拟化的工程师。

本文将全面阐述如何在 Ubuntu 上构建基于 KVM 的虚拟化环境,涵盖基础使用、实用操作技巧以及常见问题的解决方案。如果你正考虑引入 KVM,或想更好地在 Ubuntu 上使用虚拟化,请务必阅读至文末。

KVM 与其他虚拟化技术的对比

市面上可供选择的虚拟化技术种类繁多。在 Ubuntu 环境中,常用的选项包括 KVM、VirtualBox 和 VMware。本节将说明每种技术的特性与差异,并阐述选择 KVM 的优势与劣势。

虚拟化技术的主要类型

  • KVM(基于内核的虚拟机) KVM 是内置于 Linux 内核的虚拟化特性,主机操作系统必须是 Linux。通过利用 Intel VT、AMD‑V 等硬件虚拟化支持,它提供了适用于生产环境的高虚拟机性能。可通过命令行工具和 virt-manager 等管理实用程序实现灵活操作。
  • VirtualBox VirtualBox 是 Oracle 提供的面向桌面的虚拟化软件,可在 Windows、macOS 和 Linux 上运行。它界面直观,常用于个人或学习用途。但相较于 KVM,在高负载或商业环境中的适用性较差。
  • VMware(VMware Workstation / ESXi 等) VMware 是在企业环境中广泛使用的商业虚拟化产品。它功能丰富、支持力度强,但需要付费授权,尤其在大规模部署时会显著提升运营成本。

KVM 的优势

  • 高性能与高稳定性 由于 KVM 作为 Linux 内核的一部分运行,它能够高效利用资源,并对 CPU 与内存分配进行细粒度控制。其稳定性使其适用于真实的生产系统。
  • 开源且免费 KVM 完全开源,无需授权费用,是在预算受限的情况下构建虚拟化平台的理想选择。
  • 丰富的管理工具与自动化能力 KVM 同时提供命令行工具(virsh、virt‑install)和图形界面工具(virt‑manager),便于实现操作自动化,并能与 DevOps 与基础设施管理工作流深度集成。

KVM 的劣势

  • 仅限 Linux 主机操作系统 KVM 需要 Linux 内核,无法在 Windows 或 macOS 上作为主机使用。
  • 需要 Linux 知识进行配置与故障排除 虽然有图形化工具,但高级配置和故障排除往往需要使用命令行并具备 Linux 相关的专业知识。

何时应该选择 KVM?

  • 当您想要高效利用物理服务器资源时
  • 当生产级系统或服务器需要虚拟化时
  • 当您想以低成本构建功能完整的虚拟化平台时
  • 当您想自动化 Linux 服务器操作和基础设施管理时

KVM 不仅适用于有经验的 Linux 用户和工程师,也适用于计划在未来开展严肃服务器运维的人员。

虚拟机创建与基本操作

一旦 KVM 环境准备就绪,您即可开始创建和操作虚拟机。KVM 允许您根据使用场景在图形管理工具(virt-manager)和命令行操作(virt-install 与 virsh)之间进行选择。本节将介绍这两种方法。

使用 virt-manager(GUI)创建虚拟机

virt-manager 是一款通过直观图形界面创建和管理虚拟机的工具。如果您使用的是 Linux 桌面环境,virt-manager 尤其方便。

  1. 从应用菜单或命令行启动 virt-manager
  2. 点击左上角的 “New” 按钮。
  3. 选择安装介质位置(如 ISO 镜像),并选择客体操作系统类型(例如 Ubuntu 或 Windows)。
  4. 配置虚拟机的 CPU 核数、内存大小和磁盘容量。
  5. 检查设置后点击 “Finish” 创建虚拟机并开始安装过程。

使用 virt-manager,您可以轻松启动、停止、重启虚拟机,进行快照,以及添加网络接口或存储设备。

使用 virt-install(CLI)创建虚拟机

对于服务器场景或远程环境,从命令行创建虚拟机通常更为实用。下面给出 virt-install 命令的基本用法示例。

sudo virt-install \
  --name ubuntu-vm \
  --memory 2048 \
  --vcpus 2 \
  --disk size=20 \
  --cdrom /path/to/ubuntu.iso \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --network network=default \
  --graphics vnc
  • --name : 虚拟机名称
  • --memory : 分配的内存(单位 MB)
  • --vcpus : 虚拟 CPU 核数
  • --disk size=20 : 虚拟磁盘大小(单位 GB)
  • --cdrom : 用于安装的 ISO 镜像路径
  • --os-type--os-variant : 操作系统类型和版本
  • --network : 网络配置
  • --graphics : 图形模式(如 VNC)

执行该命令后,虚拟机将自动启动,并通过 VNC 或其他图形界面显示安装画面。

启动、停止、删除及快照虚拟机

KVM 通过简洁的命令即可轻松管理虚拟机。常用操作如下:

  • 启动虚拟机
    virsh start <virtual-machine-name>
    
  • 关闭虚拟机
    virsh shutdown <virtual-machine-name>
    
  • 强制停止虚拟机
    virsh destroy <virtual-machine-name>
    
  • 删除虚拟机(删除磁盘时请谨慎)
    virsh undefine <virtual-machine-name>
    
  • 创建快照
    virsh snapshot-create-as <virtual-machine-name> <snapshot-name>
    

所有这些操作也可以通过 virt-manager GUI 完成。

网络配置与扩展

网络配置是使用 KVM 运行虚拟机的关键环节。默认配置已能满足多数场景,但生产环境往往需要进行定制。本节阐述 KVM 网络的基础知识以及常用的高级配置。

默认 NAT(virbr0)与桥接网络的区别

当安装 KVM 时,会自动创建名为 virbr0 的虚拟网络桥。这是基于 NAT 的网络,具有以下特性。

  • virbr0(NAT 模式)的特性
  • 虚拟机可以访问外部互联网
  • 从宿主机或其他网络直接访问需要端口转发
  • 适用于家庭使用、开发和测试环境

相比之下,桥接网络为虚拟机提供与物理网络等同的访问权限。

  • 桥接网络的特性
  • 虚拟机加入与宿主机相同的网络段
  • 可以直接从物理 PC 和其他服务器访问
  • 适用于生产服务器和面向公众的服务

创建和配置自定义桥接(用于局域网访问)

如果您希望生产服务器或其他 PC 能直接访问虚拟机,则应配置桥接网络。下面是一个通用的操作示例,假设宿主机的物理网卡为 eth0

  1. 安装 bridge-utils(如果已安装可跳过)
    sudo apt install bridge-utils
    
  1. 编辑网络配置文件 Ubuntu 18.04 及以后版本使用 Netplan。编辑类似 /etc/netplan/01-netcfg.yaml 的配置文件。示例:
    network:
      version: 2
      renderer: networkd
      ethernets:
        eth0:
          dhcp4: no
      bridges:
        br0:
          interfaces: [eth0]
          dhcp4: yes
    
  1. 应用配置
    sudo netplan apply
    
  1. 将新桥接(br0)分配给虚拟机网络 使用 virt‑manager 或 virsh 将网络适配器更改为 br0。

静态 IP 分配和端口转发

  • 静态 IP 分配 您可以在客体操作系统内部配置静态 IP,或根据 MAC 地址通过 DHCP 服务器分配固定 IP。
  • 端口转发(使用 NAT 时) 通过 virsh 命令或 libvirt XML 配置,您可以将特定端口(如 SSH 或 Web 服务)从宿主机转发到虚拟机。示例(转发 SSH 端口 22):
    virsh nat-forward --network default --add-port tcp:2222:22
    

注意:通过编辑 libvirt 配置文件或使用 firewalld 控制访问,还可以进行更高级的配置。

存储管理与磁盘操作

在使用 KVM 运行虚拟机时,存储设计和磁盘管理极为重要。本节将说明虚拟磁盘的类型、创建方法、存储池的管理,以及如何扩展磁盘并有效使用快照。

虚拟磁盘类型(qcow2 与 raw)及使用场景

KVM 主要支持以下两种虚拟磁盘类型。

  • qcow2 格式
  • KVM 的标准虚拟磁盘格式
  • 支持快照、磁盘压缩以及空间高效分配
  • 适用于灵活的操作和测试环境
  • raw 格式
  • 简单的格式,不进行压缩或转换
  • 最适合追求最高性能和高 I/O 工作负载的场景

大多数情况下推荐使用 qcow2,但应根据具体需求选择合适的格式。

创建与管理存储池

KVM 通过所谓的存储池概念来管理虚拟机使用的磁盘资源。

  • 默认存储池 安装后,/var/lib/libvirt/images/ 被用作默认存储池。虚拟磁盘会在该目录下创建。
  • 创建新存储池(示例)
  1. 创建目录 sudo mkdir /data/kvm-images sudo chown libvirt-qemu:kvm /data/kvm-images
  2. 使用 virt‑manager 或 virsh 添加新池,使用 virsh:
    virsh pool-define-as --name mypool --type dir --target /data/kvm-images
    virsh pool-autostart mypool
    virsh pool-start mypool
    

扩展虚拟磁盘与使用快照

  • 扩展虚拟磁盘 为了增加磁盘容量,使用 qemu-img 命令(支持 qcow2 与 raw)。
    sudo qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G
    

调整大小后,还必须在客体操作系统内部扩展分区和文件系统。

  • 使用快照 使用 qcow2 磁盘时,您可以创建快照以在特定时间点保存虚拟机的状态。
    virsh snapshot-create-as <virtual-machine-name> <snapshot-name>
    

快照在进行配置更改、系统更新或测试回滚场景之前进行备份时极为有用。

客户操作系统的安装与运行

本节介绍如何在 KVM 虚拟机中安装并高效运行操作系统。内容涵盖典型的客户操作系统安装流程、ISO 镜像的处理以及性能优化技巧。

安装常见的客户操作系统

KVM 支持多种客户操作系统,包括 Ubuntu、CentOS 和 Windows。以下提供 Ubuntu 和 Windows 的示例安装步骤。

  • Ubuntu 安装
  1. 从 Ubuntu 官方网站下载最新的 ISO 镜像。
  2. 在 virt-manager 中创建新虚拟机时,选择“本地安装介质”,并指定下载的 ISO 文件。
  3. 为虚拟机配置 CPU、内存和磁盘容量。
  4. 按照屏幕提示完成标准的 Ubuntu 安装。
  • Windows 安装
  1. 从 Microsoft 官方网站下载 Windows 评估版 ISO 镜像。
  2. 使用 virt-manager 或 virt-install 创建新虚拟机,并指定 ISO 文件。
  3. 对于 Windows 客户机,安装 virtio 驱动可显著提升磁盘和网络性能。将 virtio ISO 挂载为虚拟 CD 驱动器,并在安装过程中使用。

获取并挂载 ISO 镜像

  • 客户操作系统的安装需要从官方渠道下载的 ISO 镜像。
  • 在创建虚拟机时指定 ISO 文件路径,即可将其挂载为虚拟 CD/DVD。
  • 如有需要,可同时挂载多个 ISO 镜像(操作系统和驱动)。

客户操作系统运行与性能优化技巧

  • 优化资源分配 合理分配 CPU 和内存。资源分配过多会对宿主操作系统和其他虚拟机产生负面影响。
  • 安装 virtio 驱动 在 Windows 或较旧的 Linux 客户机中安装 virtio 驱动,可大幅提升磁盘和网络性能。
  • 禁用不必要的服务 禁用客系统中未使用的服务和后台进程,有助于节约系统资源。
  • 使用 KVM 客户工具 安装 QEMU Guest Agent 可实现更精准的虚拟机信息获取以及受控关机操作。

实际使用案例与自动化技巧

KVM 并不仅限于简单的虚拟机创建与运行。它在各种业务和开发场景中得到广泛应用,通过结合脚本和自动化工具,可显著提升管理效率。本节将介绍实际使用案例和自动化思路。

服务器使用案例示例

  • 开发与测试环境分离 为每个项目准备独立的虚拟机,可自由切换软件版本和配置,从而在不影响生产系统的情况下测试新操作系统版本或应用程序。
  • 构建内部服务 将文件服务器、Web 服务器和数据库服务器分别运行在独立的虚拟机中,可降低故障影响。备份和快照也能按虚拟机轻松管理。

使用 CLI 与 Ansible 实现自动化供应

  • 使用 CLI 自动创建虚拟机 通过脚本化 virt-installvirsh 命令,可自动创建和管理多台虚拟机。例如:用于批量创建虚拟机的 Shell 脚本。
    for i in {1..5}
    do
      virt-install --name test-vm-$i --memory 1024 --vcpus 1 \
        --disk size=10 --cdrom /path/to/ubuntu.iso \
        --os-type linux --os-variant ubuntu20.04 \
        --graphics none --network network=default --noautoconsole
    done
    
  • 使用 Ansible 的基础设施自动化 使用 Ansible,您可以仅通过 playbook 自动化虚拟机创建、初始配置和应用部署。这在服务器众多或配置一致性至关重要的环境中尤为有效。

类云操作技巧

  • 创建 VM 模板 将经常使用的基础虚拟机保存为模板,可让您几乎瞬间部署新服务器。
  • API 集成与基于 Web 的管理工具 libvirt 提供可与自定义工具或其他管理系统集成的 API。在大规模环境中,诸如 Cockpit 的基于 Web 的管理工具实现可视化和集中化控制。

故障排除与常见错误解决方案

在运行 KVM 环境时,您可能会遇到虚拟机启动失败或网络连接问题等情况。本节涵盖常见问题、排查步骤以及如何有效利用日志和支持资源。

KVM 常见问题

  • 虚拟机启动失败或无法创建
  • 硬件虚拟化(Intel VT 或 AMD‑V)被禁用
  • 分配的内存或磁盘空间不足
  • 存储池或 ISO 镜像路径不正确
  • 网络连接问题
  • 虚拟网络适配器配置错误
  • 桥接或 NAT 配置错误,或 DHCP 分配失败
  • 防火墙或安全限制
  • 性能严重下降
  • 资源分配过度或不足
  • 缺少 virtio 驱动(尤其是 Windows 客户机)
  • 磁盘 I/O 瓶颈

日志检查与基本排查流程

出现问题时,检查日志应是第一步。

  • 检查系统日志
    sudo journalctl -xe
    

查找与 KVM 或 libvirt 相关的错误信息。

  • 检查 libvirt 日志 位于 /var/log/libvirt/(如 libvirtd.log)的日志文件提供有价值的信息。
  • 检查 VM 专用日志 使用 virt‑manager 或 virsh 检查 VM 状态,并在日志或详情视图中查看错误细节。
  • 检查网络状态
    ip a
    brctl show
    virsh net-list --all
    

这些命令有助于验证网络连接和桥接配置。

基本排查工作流

  1. 确定问题何时开始以及有哪些更改
  2. 查看日志和配置
  3. 如有必要,修改设置并重启服务或重新创建虚拟机

使用官方文档和社区资源

以下资源在排查问题时非常有帮助。

安全性与性能优化

安全高效地运行 KVM 环境需要安全措施和性能优化。本节介绍保护虚拟化平台和最大化资源效率的实用技术。

加强虚拟化安全性

  • 禁用不必要的服务并最小化配置 禁用客机和宿主系统中未使用的服务,以减少攻击面。
  • 防火墙和访问控制 在宿主和客机系统上适当配置防火墙(如 ufw 或 firewalld)。使用非默认端口、基于密钥的认证以及 fail2ban 等工具来保护 SSH 访问。
  • 虚拟机之间的隔离 使用不同的虚拟网络或物理网络分段来分离关键服务器,以在遭受妥协时限制损害。
  • 定期更新 保持宿主和客机系统的安全补丁和软件更新。

优化资源分配(CPU、内存、磁盘 I/O)

  • 基本资源管理 为每个虚拟机仔细分配 CPU 和内存,同时为宿主系统保留足够的资源。
  • 磁盘 I/O 优化 为关键虚拟机使用高速 SSD 存储。对 qcow2 格式的过度快照使用保持警惕,因为可能影响性能。
  • 使用 virtio 驱动 安装 virtio 驱动可显著提升客机操作系统的磁盘和网络性能。

自动化备份和快照

  • 定期创建快照 定期快照可在系统故障时实现快速恢复。
  • 备份磁盘镜像和配置文件 定期将虚拟磁盘镜像(qcow2 或 raw)和 libvirt XML 配置文件备份到外部存储。
  • 与自动化工具集成 使用 cron 或 Ansible 自动化备份和快照任务。

结论与学习资源

本文涵盖了从在 Ubuntu 上构建 KVM 虚拟化环境到日常运维、实际案例、故障排除、安全以及性能优化的全部内容。以下是摘要和进一步学习的推荐资源。

摘要

  • KVM 概述与优势 KVM 是一种开源的高性能虚拟化技术,广泛用于 Ubuntu 服务器环境。
  • 从安装到运维 我们演示了 CPU 虚拟化检查、软件包安装、权限设置、虚拟机创建以及基本操作。
  • 网络、存储与运维最佳实践 您学习了如何配置 NAT 与桥接网络、管理存储池、扩展磁盘以及有效使用快照。
  • 故障排除与安全 介绍了常见错误的解决方案、日志检查方法以及安全高效运维的最佳实践。

后续步骤与推荐资源

KVM 是一个强大的虚拟化平台,适用于个人和企业。请以本指南为基础,进一步深化理解,并根据具体需求定制 KVM。

命令速查表与常用配置示例

随时可用的常用命令和配置示例能够显著提升日常虚拟机管理效率。本节提供简明参考。

常用 KVM / virsh / virt-manager 命令

  • 列出虚拟机
    virsh list --all
    
  • 启动虚拟机
    virsh start <virtual-machine-name>
    
  • 关闭虚拟机
    virsh shutdown <virtual-machine-name>
    
  • 强制停止虚拟机
    virsh destroy <virtual-machine-name>
    
  • 创建虚拟机(virt-install)
    virt-install --name <name> --memory <MB> --vcpus <cores> \
      --disk size=<GB> --cdrom <ISO-path> \
      --os-type linux --os-variant ubuntu20.04
    
  • 删除虚拟机(仅删除定义)
    virsh undefine <virtual-machine-name>
    

网络和桥接配置示例

  • 列出网络
    virsh net-list --all
    

存储管理与磁盘操作

  • 列出存储池
    virsh pool-list --all
    
  • 调整虚拟磁盘大小
    sudo qemu-img resize /path/to/disk.qcow2 +10G
    
  • 创建快照
    virsh snapshot-create-as <virtual-machine-name> <snapshot-name>
    

其他实用技巧

  • 启用虚拟机自动启动
    virsh autostart <virtual-machine-name>
    
  • 显示详细的虚拟机信息
    virsh dominfo <virtual-machine-name>
    
  • 启动 virt-manager(图形界面)
    virt-manager
    

常见问题解答

Q1:KVM、VirtualBox 和 VMware 有何区别?

A1:KVM 是集成在 Linux 内核中的高性能虚拟化平台,适合生产服务器使用。VirtualBox 主要面向桌面用户,而 VMware 提供丰富的企业功能并有商业支持。若追求低成本高性能,KVM 是理想选择。

Q2:如何备份和恢复虚拟机?

A2:可以通过复制磁盘镜像文件(qcow2 或 raw)来备份虚拟机。同时建议备份 libvirt 的 XML 配置文件和快照,以便更轻松地恢复。

Q3:能在虚拟机内部使用 USB 设备吗?

A3:可以。可通过 virt-manager 的硬件设置或 virsh 配置 USB 直通,从而在虚拟机中使用 USB 存储设备、外接硬盘和打印机等。

Q4:如何在主机启动时自动启动虚拟机?

A4:运行 virsh autostart <virtual-machine-name> 命令,即可在主机系统启动时自动启动对应的虚拟机。

Q5:如果虚拟机运行缓慢该怎么办?

A5:检查 CPU 与内存分配,优化磁盘 I/O(使用更快的存储或在合适情况下将 qcow2 改为 raw),并在客系统中安装 virtio 驱动程序。

Q6:网络配置无法正常工作。应检查哪些方面?

A6:使用 virsh 和 brctl 命令检查网络状态。审查桥接、Netplan 或 NetworkManager 的配置文件,并在必要时重新创建虚拟网络。

Q7:可以使用 KVM 构建集群或高可用(HA)配置吗?

A7:可以。通过将 KVM 与 Pacemaker、Corosync 以及共享存储(NFS 或 iSCSI)结合使用,可实现 HA 配置和实时迁移。但需要具备较高的技术水平。

年収訴求