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 协同配置等常见难点。
脚本快速部署


🛠️ 一、系统环境准备
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. 更换国内源
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
📋九、其它问题
📎附录:常用命令速查

🚀 Cockpit 扩展 + 自定义脚本
如果想管理多台KVM,要相对简单的方式,可以:
在多个服务器上都安装 Cockpit
使用 Cockpit Machines 的远程连接功能
配置共享存储(如 NFS)
使用脚本实现基础迁移
🔄 单机方案 vs 集群方案对比

作者提示含AI生成内容。作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
