4、KVM 实战部署:在 Ubuntu 22.04 上安装 KVM,创建第一台虚拟机

好,前面我们把虚拟化的理论、架构都聊透了。现在,咱们来点真格的。

这一章,我会带你亲手在 Ubuntu 22.04 上把 KVM 装起来,然后创建你的第一台虚拟机。别担心,跟着我的节奏走,每一步我都会告诉你为什么这么做,以及我踩过的坑。

4.1 环境准备:先看看你的硬件支不支持

动手之前,先检查一下硬件。KVM 要求 CPU 支持虚拟化扩展(Intel VT-x 或 AMD-V)。

我个人习惯,第一步先跑这条命令:

egrep -c '(vmx|svm)' /proc/cpuinfo

如果返回的数字大于 0,说明你的 CPU 支持虚拟化。返回 0 的话……嗯,你可能得换个机器,或者去 BIOS 里把虚拟化功能打开。

我遇到过好几次,明明 CPU 支持,但 BIOS 里默认是关闭的。尤其是品牌机,像 Dell、HP 的台式机,经常默认关着。你想想看,折腾半天装不上,结果就是 BIOS 里一个开关没开,多冤。

小提示: 如果你是在虚拟机里再装 KVM(嵌套虚拟化),记得给母机 CPU 开启 "向客户机传递硬件虚拟化" 的选项。VMware 和 VirtualBox 都有这个设置。

4.2 安装 KVM 及相关组件

Ubuntu 22.04 上装 KVM 其实很简单。一条命令搞定核心组件:

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

这里我解释一下这几个包是干嘛的:

  • qemu-kvm:KVM 的核心,负责模拟 CPU 和内存。
  • libvirt-daemon-system:libvirt 服务,管理虚拟机的生命周期。
  • libvirt-clients:命令行工具,比如 virsh
  • bridge-utils:网络桥接工具,让虚拟机像独立主机一样上网。
  • virt-manager:图形化管理工具,新手友好。

装完之后,记得把当前用户加到 libvirtkvm 用户组里:

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

然后退出登录,重新进一下。这一步容易忘,我曾经就因为这个,折腾了半天发现没权限创建虚拟机。

4.3 验证安装:看看 KVM 跑起来了没

安装完别急着创建虚拟机,先验证一下服务状态:

sudo systemctl status libvirtd

如果看到 active (running),说明服务正常。再跑这条命令:

virsh list --all

正常情况下,会显示一个空的列表。这说明 KVM 已经准备好迎接你的第一台虚拟机了。

重要: 如果 virsh list 报错说连接不上,多半是 libvirtd 没启动,或者当前用户不在 libvirt 组里。检查一下,别慌。

4.4 创建第一台虚拟机:两种方式

创建虚拟机有两种方式:命令行和图形界面。我建议新手先用图形界面,直观一些。等熟练了,再用命令行批量部署。

4.4.1 方式一:用 virt-manager 图形界面创建

在终端里输入 virt-manager,会弹出一个窗口。点击左上角的 "创建新虚拟机" 按钮。

然后跟着向导走:

  1. 选择安装方式:选 "本地安装介质(ISO 镜像或 CDROM)"。
  2. 选择 ISO 文件:浏览到你下载好的 ISO 文件。我一般把 ISO 放在 /var/lib/libvirt/images/ 目录下。
  3. 分配内存和 CPU:根据你的物理机资源来。我建议至少 2GB 内存、2 个 CPU 核心。
  4. 分配磁盘空间:默认是 20GB,够用。记得选 "立即分配全部磁盘空间" 还是 "按需分配"。按需分配省空间,但性能稍差。
  5. 网络选择:默认是 NAT 模式,虚拟机可以上网,但外部访问不了虚拟机。如果你想让虚拟机像独立主机一样,选 "桥接模式"。

点击 "完成",虚拟机就会启动,进入安装界面。后面就跟装普通系统一样了。

注意: 如果虚拟机启动后黑屏,或者报 "KVM 不可用" 的错误,检查一下 BIOS 里虚拟化是否开启,或者你的 CPU 是否支持。我遇到过一台老旧的 i5-2400,虽然支持 VT-x,但主板 BIOS 太老,默认关闭了。

4.4.2 方式二:用命令行创建(virt-install)

如果你喜欢命令行,或者需要批量部署,用 virt-install 更高效。下面是一个典型的命令:

sudo virt-install \
  --name ubuntu-vm1 \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/ubuntu-vm1.qcow2,size=20 \
  --cdrom /path/to/ubuntu-22.04-server.iso \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 \
  --os-variant ubuntu22.04

解释一下参数:

  • --name:虚拟机名字,自己取。
  • --ram:内存大小,单位 MB。
  • --vcpus:CPU 核心数。
  • --disk:磁盘路径和大小。qcow2 是 KVM 的默认格式,支持快照和按需分配。
  • --cdrom:ISO 文件路径。
  • --network:网络类型。默认是 NAT。
  • --graphics:图形输出方式。VNC 方便远程连接。
  • --os-variant:操作系统类型,优化性能。

执行后,终端会输出一些信息,然后启动 VNC 客户端连接。如果你没有图形界面,可以加上 --location 参数用文本模式安装。

4.5 虚拟机管理基础:几个常用命令

虚拟机创建好了,怎么管理?记住这几个命令就够了:

命令 作用
virsh list --all 列出所有虚拟机(包括关闭的)
virsh start vm-name 启动虚拟机
virsh shutdown vm-name 优雅关机
virsh destroy vm-name 强制断电(慎用)
virsh reboot vm-name 重启虚拟机
virsh console vm-name 进入虚拟机控制台(文本模式)
virsh undefine vm-name 删除虚拟机定义(不删磁盘文件)

我个人习惯,日常管理用 virsh 命令行,快。但如果是调试网络或者查看图形界面,我会开 virt-manager,毕竟可视化更直观。

4.6 避坑指南:我踩过的几个坑

最后,分享几个我实际项目中遇到的坑,你遇到了别慌:

  • 坑一:虚拟机无法上网
    检查一下网络模式。如果是 NAT,虚拟机应该能自动获取 IP。如果不行,试试 dhclient 手动获取。桥接模式的话,确保物理网卡支持混杂模式。
  • 坑二:虚拟机启动报 "CPU 不兼容"
    这通常是因为母机 CPU 和虚拟机配置的 CPU 类型不匹配。在 virt-manager 里把 CPU 模型改成 "host-passthrough" 就好了。
  • 坑三:磁盘性能差
    我曾经给虚拟机分配了 4 核 8G,结果跑数据库还是慢。后来发现磁盘缓存模式默认是 "none",改成 "writeback" 后性能提升明显。当然,这有数据丢失风险,生产环境慎用。
我的经验: 刚开始玩 KVM,别追求完美。先跑起来,再慢慢调优。我第一台虚拟机装的是 Ubuntu Server,连图形界面都没装,就为了练手。等熟悉了,再搞复杂的网络、存储配置。

好了,这一章就到这里。你的第一台 KVM 虚拟机应该已经跑起来了。下一章,我们会聊聊虚拟机的网络配置,怎么让虚拟机像物理机一样上网、对外提供服务。