KVM虚拟化平台搭建与Cockpit管理:基于Rocky Linux 9.6

📘 文档目的与功能

  本文档旨在提供一个 清晰、可靠、可复现 的指南,将在 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,要相对简单的方式,可以:

  1. 在多个服务器上都安装 Cockpit
  2. 使用 Cockpit Machines 远程连接功能
  3. 配置共享存储(如 NFS)
  4. 使用脚本实现基础迁移

🔄 单机方案 vs 集群方案对比
特性 单机 Cockpit oVirt/RHV Proxmox VE
多节点管理 ❌ 不支持 ✅ 支持 ✅ 支持
Web 管理界面 ✅ 基础 ✅ 完整 ✅ 完整
在线迁移 ❌ 不支持 ✅ 支持 ✅ 支持
高可用 ❌ 不支持 ✅ 支持 ✅ 支持
共享存储 ❌ 需手动配置 ✅ 内置支持 ✅ 内置支持
部署复杂度 ⭐ 简单 ⭐⭐⭐⭐⭐ 复杂 ⭐⭐ 中等
适合场景 个人/测试 企业生产 中小企业