在Cockpit中配置已有Ceph RBD块存储池供新建虚拟机使用的问题
在Cockpit中配置已有Ceph RBD块存储池供新建虚拟机使用的问题
首先得明确:Cockpit的cockpit-machines模块是基于libvirt来管理虚拟机存储的,所以要让Cockpit识别到你的Ceph RBD池,得先把这个池注册到libvirt里,同时确保相关依赖组件都安装到位。下面一步步来解决:
1. 安装libvirt的RBD存储驱动
Oracle Linux 9.1默认可能没装libvirt对接RBD的驱动包,先安装它:
sudo dnf install libvirt-daemon-driver-storage-rbd
安装完成后重启libvirt服务,让新驱动生效:
sudo systemctl restart libvirtd
2. 将Ceph密钥导入libvirt的secret存储
因为libvirt需要验证Ceph集群的访问权限,你得把Ceph的客户端密钥导入到libvirt的secret系统里:
- 先从已有的keyring里提取密钥(假设你用的是
client.admin用户,替换成你实际的客户端用户名):
ceph auth get-key client.admin
复制输出的密钥字符串,后面要用。
- 创建一个secret配置XML文件(比如
/tmp/ceph-secret.xml),内容如下:
<secret ephemeral='no' private='no'> <uuid>$(uuidgen)</uuid> <!-- 这里会自动生成唯一UUID,也可以手动指定 --> <usage type='ceph'> <name>ceph client.admin secret</name> <!-- 这个名称要和后面存储池配置里的对应上 --> </usage> </secret>
- 定义这个secret:
sudo virsh secret-define /tmp/ceph-secret.xml
- 设置secret的值(把
<UUID>替换成刚才输出的UUID,<CEPH_KEY>替换成之前提取的密钥):
sudo virsh secret-set-value --secret <UUID> --base64 <CEPH_KEY>
3. 注册Ceph RBD池到libvirt
现在创建存储池的XML配置文件(比如/tmp/rbd-pool.xml),替换里面的占位符为你的实际信息:
<pool type='rbd'> <name>ceph-vm-storage</name> <!-- 这个名称会在Cockpit的存储池列表里显示 --> <source> <name>your-rbd-pool-name</name> <!-- 替换成你Ceph集群里已有的RBD池名称 --> <host name='machine-a-ip' port='6789'/> <!-- 替换成Ceph节点A的IP --> <host name='machine-b-ip' port='6789'/> <!-- 替换成Ceph节点B的IP --> <auth type='ceph' username='client.admin'> <!-- 替换成你的Ceph客户端用户名 --> <secret usage='ceph client.admin secret'/> <!-- 这里要和之前secret配置里的name一致 --> </auth> </source> </pool>
- 定义这个存储池:
sudo virsh pool-define /tmp/rbd-pool.xml
- 启动存储池:
sudo virsh pool-start ceph-vm-storage
- 设置存储池开机自启:
sudo virsh pool-autostart ceph-vm-storage
4. 在Cockpit里验证
现在刷新Cockpit的虚拟机页面,进入“存储池”选项卡,你应该就能看到刚才注册的Ceph RBD池了。之后创建新虚拟机时,选择磁盘存储的时候就可以选这个池了。
额外注意事项
- 确保机器C的防火墙允许访问Ceph节点的6789端口(Ceph的默认通信端口)。
- 如果遇到权限问题,可以检查SELinux状态,临时关闭测试:
sudo setenforce 0,如果没问题可以添加对应的SELinux规则。 - 尽量保证机器C上的Ceph客户端版本和集群版本兼容,避免出现奇怪的兼容性问题。
备注:内容来源于stack exchange,提问作者a.ilchinger
相关产品推荐
相关产品推荐

