CentOS云服务器上如何安装和配置QEMU-KVM虚拟机环境?

在 CentOS 上安装和配置 QEMU-KVM 虚拟机环境,通常分为以下几个关键步骤。以下操作以 CentOS 7/8 为例(若为 CentOS Stream 9 或 RHEL 系列,命令基本一致,但包名可能略有差异):


✅ 一、检查 CPU 是否支持虚拟化

# 查看 Intel VT-x 或 AMD-V 是否开启
grep -E '(vmx|svm)' /proc/cpuinfo
  • 若有输出,说明 CPU 支持虚拟化;
  • 若无输出,请进入 BIOS/UEFI 开启 Intel VT-xAMD-V 功能。

💡 提示:部分云服务器(如阿里云、腾讯云、AWS 等)默认未启用 KVM 虚拟化,需确认实例类型是否支持(例如阿里云的 ecs.g6 等通用型实例通常支持)。


✅ 二、安装 KVM 及相关工具

1. 安装 QEMU-KVM 及管理工具

sudo yum install -y qemu-kvm libvirt libvirt-daemon-config-network 
    libvirt-daemon-kvm virt-manager bridge-utils guestfs-tools

⚠️ 注意:

  • libvirt-daemon-config-network 用于自动创建 virbr0 网桥(可选但推荐);
  • virt-manager 是图形化管理工具(若仅需命令行,可省略);
  • bridge-utils 用于手动配置网桥网络(高级用法)。

2. 启动并启用 libvirtd 服务

sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd

确认状态为 active (running)


✅ 三、配置用户权限(避免 sudo 频繁使用)

将当前用户加入 libvirtkvm 组:

sudo usermod -aG libvirt,kvm $USER

🔐 修改后需重新登录(或执行 newgrp kvm && newgrp libvirt)使组生效。

验证:

groups | grep -E 'libvirt|kvm'

✅ 四、验证 KVM 是否正常工作

# 检查内核模块是否加载
lsmod | grep kvm

# 测试 libvirt 连接
virsh list --all

# 查看可用后端
virsh capabilities | grep -A 5 '<arch name="x86_64">'

virsh list --all 返回空列表但无报错,说明环境已就绪。


✅ 五、创建示例虚拟机(CLI 方式)

1. 准备 ISO 镜像(以 CentOS 9 Stream 为例)

# 下载 ISO(示例地址,请替换为官方源)
wget https://mirror.centos.org/centos/9-stream/BaseOS/x86_64/os/images/pxeboot/vmlinuz
wget https://mirror.centos.org/centos/9-stream/BaseOS/x86_64/os/images/pxeboot/initrd.img
# 更推荐使用完整 ISO:
wget https://mirrors.aliyun.com/centos/9-stream/ISOs/x86_64/CentOS-Stream-9-GenericCloud-latest.x86_64.iso

将 ISO 放入 /var/lib/libvirt/images/ 或自定义目录。

2. 使用 virt-install 创建 VM

sudo virt-install 
  --name centos9-test 
  --ram 2048 
  --vcpus 2 
  --disk path=/var/lib/libvirt/images/centos9-test.qcow2,size=20,format=qcow2 
  --cdrom /path/to/CentOS-Stream-9-GenericCloud-latest.x86_64.iso 
  --network network=default 
  --graphics vnc,listen=0.0.0.0 
  --os-variant centos9.0

📌 参数说明:

  • --network network=default:使用 libvirt 默认的 NAT 网络(virbr0);
  • --graphics vnc:启用 VNC 远程访问(需配合防火墙规则);
  • --os-variant:帮助 libvirt 优化性能(非必需,但推荐)。

3. 启动并查看 VM

sudo virsh start centos9-test
sudo virsh list --all

通过 VNC 连接(如使用 virt-viewernoVNC)进行安装。


✅ 六、网络配置建议(进阶)

方案 A:默认 NAT(简单,适合单机测试)

  • 已启用:virbr0 网桥 + DHCP;
  • 无需额外配置,VM 可上网。

方案 B:桥接模式(需宿主机有物理网卡)

# 编辑网桥配置(CentOS 7/8 使用 NetworkManager 或 ifcfg)
# 示例:创建 br0 绑定 eth0
sudo nmcli connection add type bridge con-name br0 ifname br0
sudo nmcli connection add type bridge-slave master br0 slave-type bridge ifname eth0
sudo nmcli connection up br0

然后在 virt-install 中使用:

--network bridge=br0,model=virtio

✅ 七、安全与优化建议

项目 建议
防火墙 开放 VNC 端口(5900+)仅对内网:
firewall-cmd --add-port=5900/tcp --permanent
SELinux 生产环境建议保持 enforcing,但需确保 VM 磁盘路径正确标记:
chcon -R -t virt_image_t /var/lib/libvirt/images/
性能优化 使用 virtio 驱动(磁盘/网络),启用 KSM/KVM 内存合并(高级)
备份 定期用 virsh dumpxml + qemu-img snapshot 做快照备份

✅ 八、常用 virsh 命令速查

virsh list --all          # 列出所有 VM
virsh start <name>        # 启动
virsh shutdown <name>     # 优雅关机
virsh destroy <name>      # 强制停止
virsh undefine <name>     # 删除定义(保留磁盘)
virsh domblklist <name>   # 查看磁盘
virsh console <name>      # 进入控制台
virsh screenshot <name> file.png  # 截图

❗ 常见问题排查

问题 解决方案
error: Failed to connect socket 检查 libvirtd 是否运行;重启:systemctl restart libvirtd
Permission denied 确认用户已在 libvirtkvm 组;重新登录
KVM not available 检查 BIOS 虚拟化开关;云服务器需确认实例类型支持
网络不通 检查 virbr0 状态:ip addr show virbr0;尝试 virsh net-start default

需要我提供:

  • 自动化部署脚本(Ansible/YAML)?
  • 使用 Docker + KVM 的混合方案?
  • 图形化管理界面(Cockpit + WebVNC)配置指南?

欢迎告诉我你的具体场景(开发测试 / 生产部署 / 多租户隔离等),我可进一步定制方案。