一、准备工作
1. 检查硬件虚拟化支持
KVM 要求处理器支持硬件虚拟化技术:Intel VT-x(虚拟化技术扩展)或 AMD-V(虚拟化技术扩展)。
检查方法:
-
使用以下命令检查 CPU 是否支持虚拟化:
egrep '(vmx|svm)' /proc/cpuinfo
-
输出含有
vmx
的为 Intel 处理器支持虚拟化 -
输出含有
svm
的为 AMD 处理器支持虚拟化
注意:如果没有输出,可能需要进入 BIOS 并启用虚拟化技术(Intel VT-x 或 AMD-V)。
-
2. 更新系统
在安装软件包之前,先确保 RHEL 9 系统是最新的。
sudo dnf update -y
二、安装 KVM 和虚拟化工具
在 RHEL 9 中,虚拟化软件包可以通过软件组来安装,包含 KVM 核心组件和其他工具。
1. 安装 KVM 和相关组件
运行以下命令安装 KVM、libvirt(虚拟机管理工具)、virt-install
(命令行安装虚拟机工具)和 virt-manager
(图形界面虚拟机管理工具)。
sudo dnf install -y @virtualization
sudo dnf install -y virt-install virt-manager libvirt libvirt-devel qemu-kvm
安装包解释:
-
@virtualization
:安装虚拟化相关软件组 -
virt-install
:命令行工具,用于创建虚拟机 -
virt-manager
:图形化界面管理虚拟机的工具 -
libvirt
:虚拟机管理工具,提供服务管理 KVM -
libvirt-devel
:用于开发的库 -
qemu-kvm
:QEMU(Quick Emulator)是 KVM 的默认虚拟机管理程序(Hypervisor)
三、启动和配置 KVM 服务
1. 启动 libvirtd
服务
libvirt
是 KVM 的核心服务,负责管理虚拟机的生命周期。
sudo systemctl enable --now libvirtd
-
enable
:设置开机自启 -
--now
:立即启动服务
你可以用以下命令检查服务是否正在运行:
sudo systemctl status libvirtd
2. 加入 libvirt 组(可选)
为了简化操作,将当前用户加入 libvirt
组,这样无需使用 sudo
就能管理虚拟机。
sudo usermod -aG libvirt $(whoami)
newgrp libvirt
3. 验证 KVM 内核模块是否加载
验证 KVM 内核模块(kernel module)是否正确加载:
sudo lsmod | grep kvm
输出中应该有类似如下的内容:
kvm_intel 32768 0
kvm 90112 1 kvm_intel
其中:
-
kvm_intel
表示这是 Intel 的虚拟化模块 -
对于 AMD 的处理器,则是
kvm_amd
如果没有看到相应模块,说明 KVM 模块未加载,可以手动加载:
sudo modprobe kvm
四、网络配置(可选,桥接网络)
虚拟机默认通过 NAT 网络访问外部网络。如果希望虚拟机能作为局域网中的独立主机,使用桥接网络会更合适。
1. 安装桥接工具
sudo dnf install -y bridge-utils
2. 创建桥接网络
首先创建一个新的网桥接口。你可以修改现有的网络连接,或者添加新的桥接。
使用 NetworkManager 创建桥接:
-
打开
/etc/NetworkManager/system-connections/
目录,并找到现有的网络连接配置文件(文件名格式类似于eno1.nmconnection
)。 -
编辑该文件,将
type
设置为bridge
。
[connection]
id=bridge0
type=bridge
interface-name=br0
[bridge]
stp=false
-
重启 NetworkManager:
sudo systemctl restart NetworkManager
-
配置完成后,可以使用
ip addr
或nmcli
命令查看网桥是否创建成功。
五、创建虚拟机
可以使用命令行工具 virt-install
或图形化工具 virt-manager
来创建和管理虚拟机。
1. 使用命令行工具 virt-install
创建虚拟机
假设有一个 RHEL 9 的 ISO 镜像文件在 /var/lib/libvirt/images/rhel-9.iso
,并希望创建一台虚拟机。
sudo virt-install \
--name=rhel-vm \
--ram=4096 \
--vcpus=4 \
--os-type=linux \
--os-variant=rhel9.0 \
--cdrom=/var/lib/libvirt/images/rhel-9.iso \
--network bridge=br0 \
--disk path=/var/lib/libvirt/images/rhel-vm.qcow2,size=20 \
--graphics=none \
--console pty,target_type=serial
参数解释:
-
--name=rhel-vm
:虚拟机名称 -
--ram=4096
:分配 4GB 内存 -
--vcpus=4
:分配 4 个虚拟 CPU 核心 -
--os-type=linux
:操作系统类型 -
--os-variant=rhel9.0
:指定 RHEL 9 版本 -
--cdrom=/path/to/iso
:指定 ISO 镜像 -
--network bridge=br0
:使用br0
网桥网络 -
--disk path=/path/to/disk,size=20
:指定虚拟硬盘位置及大小(20GB) -
--graphics=none
:无图形化界面(使用命令行安装) -
--console pty,target_type=serial
:使用串行终端
2. 使用图形化工具 virt-manager
-
在终端中运行
virt-manager
:sudo virt-manager
-
通过图形化界面创建虚拟机,步骤包括:
-
选择
本地安装媒体
。 -
指定 ISO 镜像文件。
-
分配内存和 CPU。
-
配置虚拟硬盘大小和位置。
-
选择网络类型(默认 NAT,或者桥接网桥)。
-
六、虚拟机的管理
1. 使用 virsh
管理虚拟机
virsh
是 libvirt 提供的命令行工具,用于管理虚拟机的生命周期。
查看虚拟机状态:
sudo virsh list --all
启动虚拟机:
sudo virsh start rhel-vm
关闭虚拟机:
sudo virsh shutdown rhel-vm
强制停止虚拟机:
sudo virsh destroy rhel-vm
删除虚拟机:
sudo virsh undefine rhel-vm
设置虚拟机开机自动启动:
sudo virsh autostart rhel-vm
七、其他常见问题与解决方案
1. KVM 无法启动虚拟机?
-
检查
libvirtd
服务是否正常运行:sudo systemctl status libvirtd
-
确认 CPU 是否支持虚拟化,并且虚拟化技术在 BIOS 中启用。
2. 图形界面无法使用?
-
确保安装了
virt-manager
,并正确启动 X11 会话(远程服务器可能需要 X forwarding 配置)。
3. 网络无法连通?
-
检查网络设置,特别是桥接网络的配置,确保虚拟机使用正确的桥接接口。