准备工作与前提条件检查
在开始安装之前,确保您的系统满足虚拟化的基本要求至关重要,这一步可以避免后续许多不必要的麻烦。

最核心的前提是CPU必须支持硬件虚拟化扩展技术,即Intel的VT-x或AMD的AMD-V,您可以通过以下命令来快速检查:
# 检查CPU是否支持虚拟化扩展 lscpu | grep Virtualization
如果输出中包含 VT-x 或 AMD-V 字样,则表示您的CPU支持硬件虚拟化,另一个方法是检查 /proc/cpuinfo 文件:
# 如果输出结果大于0,则表示支持 egrep -c '(vmx|svm)' /proc/cpuinfo
确保您的CentOS系统是最新的,这可以修复已知的漏洞并确保所有软件包的兼容性,执行以下命令进行系统更新:
sudo yum update -y
虽然不是强制性的,但建议您拥有一个具有 sudo 权限的非root用户来进行操作,这符合Linux安全最佳实践。
安装KVM核心组件
CentOS通过软件包组的形式,极大地简化了KVM环境的安装,我们需要安装的主要是“Virtualization Host”这个软件包组,它包含了运行虚拟机所需的所有核心组件。
执行以下命令来安装KVM主机环境:
sudo yum groupinstall "Virtualization Host" -y
这个命令会自动安装一系列关键的软件包,为了更好地理解,下表列出了其中的核心组件及其作用:
| 组件名称 | 功能描述 |
|---|---|
qemu-kvm |
提供硬件模拟的用户空间组件,是KVM的虚拟机监控器。 |
libvirt |
提供一个管理虚拟机和其它虚拟化功能的API、守护进程和管理工具(如virsh)。 |
virt-install |
一个用于创建虚拟机的命令行工具。 |
bridge-utils |
用于创建和管理网络桥接的工具。 |
除了核心组件,我们还需要安装一些管理和查看工具,以便后续能方便地创建和连接到虚拟机:
sudo yum install virt-install virt-viewer -y
virt-viewer 是一个图形化的虚拟机控制台查看器,可以让我们通过图形界面访问虚拟机的安装过程或桌面环境。
启动并配置Libvirt服务
安装完成后,libvirt 守护进程并不会自动启动,我们需要手动启动它,并将其设置为开机自启,以确保虚拟化服务在系统重启后依然可用。

# 启动libvirtd服务 sudo systemctl start libvirtd # 设置libvirtd服务开机自启 sudo systemctl enable libvirtd
启动服务后,我们可以通过以下命令验证其状态,确保它正在正常运行:
sudo systemctl status libvirtd
如果看到输出中包含 active (running) 的绿色字样,则表示服务已成功启动。libvirt 会自动创建一个名为 virbr0 的默认NAT网络,我们可以使用 virsh 命令来查看:
virsh net-list --all
这个默认网络非常适合初学者,因为它允许虚拟机通过宿主机访问外部网络,而无需复杂的网络配置。
验证安装是否成功
为了确保整个KVM环境安装无误,我们可以进行几个简单的验证步骤。
-
检查KVM内核模块是否加载: KVM是作为内核模块运行的,执行以下命令确认模块已加载:
lsmod | grep kvm
正常情况下,您应该能看到
kvm_intel或kvm_amd以及kvm模块。 -
测试
virsh连接:virsh是与libvirt交互的主要工具,尝试列出所有虚拟机(此时列表应为空),可以验证与libvirt守护进程的通信是否正常:virsh list --all
如果命令执行成功且没有报错,说明KVM环境已基本就绪。
创建与管理第一个虚拟机
一切准备就绪,我们可以创建第一个虚拟机了,这里我们使用virt-install命令行工具,它功能强大且灵活,在执行命令前,请确保您已经下载了一个操作系统的ISO镜像文件(例如CentOS Stream的ISO)并将其放置在服务器上。
以下是一个创建虚拟机的示例命令:

sudo virt-install \ --name=centos-stream-vm \ --memory=2048 \ --vcpus=2 \ --disk path=/var/lib/libvirt/images/centos-stream-vm.qcow2,size=20 \ --cdrom /path/to/your/CentOS-Stream-8-x86_64-latest-dvd1.iso \ --graphics spice \ --network network=default \ --os-variant=centos8
命令解析:
--name: 指定虚拟机的名称。--memory: 分配给虚拟机的内存大小(MB)。--vcpus: 分配给虚拟机的虚拟CPU核心数。--disk: 指定虚拟磁盘的路径、格式(默认为qcow2)和大小(GB)。--cdrom: 指定安装介质的ISO文件路径。--graphics: 指定图形显示协议,spice是性能较好的选择。--network: 指定虚拟机连接的网络,这里使用默认的NAT网络。--os-variant: 指定操作系统类型,这有助于virt-install优化虚拟机参数。
执行命令后,虚拟机将开始创建并启动,您需要使用virt-viewer来连接到它的图形控制台,以完成操作系统的安装:
virt-viewer centos-stream-vm
在弹出的窗口中,您将看到熟悉的操作系统安装界面,按照提示完成安装即可。
安装完成后,您可以使用virsh命令来管理虚拟机生命周期:
virsh start <vm_name>: 启动虚拟机。virsh shutdown <vm_name>: 优雅关闭虚拟机。virsh destroy <vm_name>: 强制关闭虚拟机(相当于拔电源)。virsh autostart <vm_name>: 设置虚拟机随宿主机开机自启。
相关问答FAQs
问题1:我运行 virt-install 后,如何连接到虚拟机的图形化安装界面?
解答:当您在 virt-install 命令中使用了 --graphics spice 或 --graphics vnc 参数时,虚拟机会开启一个图形控制台,要连接到这个控制台,最简单的方法是在执行 virt-install 的同一台机器上(如果它有图形桌面环境)使用 virt-viewer 工具,命令格式为 virt-viewer <虚拟机名称>,virt-viewer centos-stream-vm,如果您的宿主机是纯命令行环境,您需要配置SSH隧道,将远程的VNC/SPICE端口转发到本地,然后在您的本地Windows/macOS/Linux桌面机器上使用VNC Viewer或SPICE客户端进行连接,或者,更推荐的方式是安装 virt-manager(sudo yum install virt-manager),它是一个功能强大的图形化管理工具,可以直观地看到所有虚拟机的控制台。
问题2:我的虚拟机无法访问外部网络,该怎么办?
解答:这是一个常见的网络配置问题,请按照以下步骤排查:
- 检查默认网络:首先确认
libvirt的默认网络是否处于活动状态,运行virsh net-list --all,default网络的状态不是active,请执行sudo virsh net-start default和sudo virsh net-autostart default来启动并设置其开机自启。 - 检查防火墙:CentOS的防火墙可能会阻止虚拟机的网络流量。
libvirt在安装时会配置相应的防火墙规则,但如果您修改过防火墙,可能导致规则失效,检查firewalld的libvirt区域是否处于活动状态,并确保其允许相关流量。 - 检查虚拟机内部网络配置:登录到虚拟机内部,检查其IP地址是否正确获取(通常是DHCP分配的
168.122.x网段),尝试ping网关(168.122.1)和外部地址(如8.8.8)来定位问题所在。 - 考虑桥接模式:如果您的虚拟机需要作为独立服务器出现在局域网中(拥有与宿主机同网段的IP),则需要配置网络桥接,这比默认的NAT模式更复杂,需要修改宿主机的网络脚本,将物理网卡(如
eth0)加入到一个网桥(如br0)中,然后在创建虚拟机时使用--network bridge=br0参数。