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 里一个开关没开,多冤。
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:图形化管理工具,新手友好。
装完之后,记得把当前用户加到 libvirt 和 kvm 用户组里:
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,会弹出一个窗口。点击左上角的 "创建新虚拟机" 按钮。
然后跟着向导走:
- 选择安装方式:选 "本地安装介质(ISO 镜像或 CDROM)"。
- 选择 ISO 文件:浏览到你下载好的 ISO 文件。我一般把 ISO 放在
/var/lib/libvirt/images/目录下。 - 分配内存和 CPU:根据你的物理机资源来。我建议至少 2GB 内存、2 个 CPU 核心。
- 分配磁盘空间:默认是 20GB,够用。记得选 "立即分配全部磁盘空间" 还是 "按需分配"。按需分配省空间,但性能稍差。
- 网络选择:默认是 NAT 模式,虚拟机可以上网,但外部访问不了虚拟机。如果你想让虚拟机像独立主机一样,选 "桥接模式"。
点击 "完成",虚拟机就会启动,进入安装界面。后面就跟装普通系统一样了。
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 虚拟机应该已经跑起来了。下一章,我们会聊聊虚拟机的网络配置,怎么让虚拟机像物理机一样上网、对外提供服务。