📘 文档目的与功能
本文档旨在提供一个 清晰、可靠、可复现 的指南,将在 Rocky Linux 9.6 系统上从零开始安装和配置 KVM 虚拟化平台,并搭配 Cockpit Web 界面进行可视化管理。内容包括:
- 系统环境准备与国内源配置
- 安装 KVM、libvirt、Cockpit 等核心组件
- 配置桥接网络(bridge)实现虚拟机直连物理网络
- 创建存储池与虚拟机
- 常见问题排查与解决方案
- 官方文档:https://docs.rockylinux.org/zh/guides/virtualization/cockpit-machines/
本指南适用于 物理服务器 或 虚拟化平台内嵌套运行 KVM 的场景,尤其注重解决桥接网络、存储池创建、Cockpit 界面与 CLI 协同配置等常见难点。
脚本快速部署
https://gitee.com/cncsrf/rocky-kvm-cockpit-auto-deploy



🛠️ 一、系统环境准备
1. 系统信息
- 操作系统:Rocky Linux 9.6(最小化安装)
- IP 地址:192.168.20.72/23
- 网关:192.168.20.1
- 网络接口:
ens33 - 目标:安装 KVM + libvirt + Cockpit,通过 Cockpit 管理虚拟机
#IP及接口信息
ip a|grep 192.168
inet 192.168.20.72/23 brd 192.168.21.255 scope global noprefixroute ens33
2. 更换国内源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.ustc.edu.cn/rocky|g' \
-i.bak \
/etc/yum.repos.d/rocky-extras.repo \
/etc/yum.repos.d/rocky.repo
#刷新源
dnf makecache
3. 检查硬件虚拟化支持
egrep -c '(vmx|svm)' /proc/cpuinfo
#若返回值大于 0,则表示支持虚拟化
📦 二、安装 KVM 与 Cockpit
1. 更新系统并安装组件
dnf update -y
dnf install -y cockpit cockpit-machines libvirt qemu-kvm virt-install virt-viewer
dnf install -y wget lrzsz net-tools
2. 启动服务
systemctl enable --now libvirtd cockpit.socket
systemctl status libvirtd
systemctl status cockpit.socket
3. 允许 Cockpit 使用 root 登录
echo "#root" | tee /etc/cockpit/disallowed-users
4. 开放防火墙端口(默认无需操作)
firewall-cmd --add-port=9090/tcp --permanent
firewall-cmd --reload
5. 访问 Cockpit
- 浏览器访问:
http://你的服务器IP:9090 - 使用 root 及系统密码登录

🌉 三、配置桥接网络(bridge)
Cockpit 无法创建桥接网络,必须使用命令行创建。
1. 创建桥接接口 br0
nmcli con add type bridge ifname br0 stp no
nmcli con add type bridge-slave ifname ens33 master br0
2. 配置桥接 IP
nmcli con modify bridge-br0 ipv4.addresses 192.168.20.72/23
nmcli con modify bridge-br0 ipv4.gateway 192.168.20.1
nmcli con modify bridge-br0 ipv4.dns 114.114.114.114
nmcli con modify bridge-br0 ipv4.method manual
nmcli con up bridge-br0

3. 验证桥接状态
ip a show br0
#应显示 state UP 和 LOWER_UP,发现异常,继续第4步操作

4. 常见问题:NO-CARRIER
如果 br0 显示 NO-CARRIER,说明 ens33 未正确作为 slave 加入桥接,执行:
nmcli con down ens33
nmcli con up bridge-slave-ens33
nmcli con up bridge-br0
systemctl restart NetworkManager

🔧 四、配置 libvirt 网络
1. 查看默认网络
virsh net-list --all
#默认会显示 default(virbr0,NAT 网络)
2. 禁用 NAT 网络(如不需要)
virsh net-autostart default --disable
virsh net-destroy default
3. 彻底移除 NAT 网络定义(可选)
virsh net-undefine default
#此后 Cockpit 中将不再显示 default 网络

💾 五、创建存储池(可选)
1. 创建存储目录
mkdir -p /home/images
2. 创建 libvirt 存储池(Cockpit 可识别)
virsh pool-define-as \
--name default_pool \
--type dir \
--target /home/images
#然后依次执行:
virsh pool-start default_pool
virsh pool-autostart default_pool
#验证
virsh pool-list --all
3. 上传 ISO 镜像
将所需 ISO 镜像上传至 /home/images
🖥️ 六、通过 Cockpit 创建虚拟机
1. 访问 Cockpit → 虚拟机 → 创建虚拟机
- 安装源:选择
/home/images/xxx.iso - 存储:选择
default_pool或自定义路径 - 网络:选择
br0(桥接模式) - 内存、CPU:按需分配
2. 编辑和检查虚拟机
- 网络接口:检查IP信息是否正确
- 安装系统:如没问题,选择安装系统
- 如使用 DHCP,应能自动获取 IP(若在虚拟化平台内,需开启混杂模式)


🛠️ 七、命令行创建虚拟机(可选)
virt-install \
--name vm1 \
--ram 2048 \
--vcpus 2 \
--os-variant centos7.0 \
--cdrom /home/images/centos.iso \
--disk path=/home/images/vm1.qcow2,size=20 \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0
🧪 八、常见问题排查
1. 虚拟机无法获取 IP(DHCP 失败)
- 检查桥接状态:
bridge link中应有vnetX和ens33均为forwarding - 检查混杂模式:若在 ESXi 等虚拟化平台内,需开启 混杂模式 和 MAC 地址变更允许
2. Cockpit 无法访问
- 确认服务状态:
systemctl status cockpit.socket - 确认防火墙开放 9090 端口
- 确认已安装
cockpit-machines
3. 存储池无法识别
- 使用
virsh pool-list --all确认池状态为active - 确认目录权限:
chown -R root:root /home/images
📋九、其它问题
📎附录:常用命令速查
| 命令 | 说明 |
|---|---|
virsh list --all |
列出所有虚拟机 |
virsh start <vm> |
启动虚拟机 |
virsh shutdown <vm> |
关闭虚拟机 |
virsh undefine <vm> |
删除虚拟机定义 |
virsh net-list --all |
列出所有网络 |
virsh pool-list --all |
列出所有存储池 |
bridge link |
查看桥接端口状态 |
ip a show br0 |
查看桥接接口详情 |
🚀 Cockpit 扩展 + 自定义脚本
如果想管理多台KVM,要相对简单的方式,可以:
- 在多个服务器上都安装 Cockpit
- 使用 Cockpit Machines 的远程连接功能
- 配置共享存储(如 NFS)
- 使用脚本实现基础迁移
🔄 单机方案 vs 集群方案对比
| 特性 | 单机 Cockpit | oVirt/RHV | Proxmox VE |
|---|---|---|---|
| 多节点管理 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| Web 管理界面 | ✅ 基础 | ✅ 完整 | ✅ 完整 |
| 在线迁移 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| 高可用 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| 共享存储 | ❌ 需手动配置 | ✅ 内置支持 | ✅ 内置支持 |
| 部署复杂度 | ⭐ 简单 | ⭐⭐⭐⭐⭐ 复杂 | ⭐⭐ 中等 |
| 适合场景 | 个人/测试 | 企业生产 | 中小企业 |