我在机器 C 上进行了简单的安装,安装了 Oracle Linux 9.1 和 cockpit 以及 cockpit-machines。在机器 A 和 BI 上配置了一个 ceph 集群,它为 VM 磁盘定义了一个 rbd 块存储池。将最小配置和密钥环复制到机器 CI 上后,就可以“访问”ceph 集群,正如ceph osd lspools
机器 C 上的命令一样,它会按预期返回所有配置的池。
然而,在驾驶舱 UI 中,我看到的用于配置新存储池的唯一选项是filesystem
和network file system
,没有其他。
如何配置现有的 rbd 存储池,以供我在驾驶舱 UI 中创建的新虚拟机使用?
答案1
我不熟悉 cockpit 但熟悉 ceph。阅读驾驶舱文档我可能会选择物理磁盘作为源,物理磁盘是映射的 rbd 设备。如果您已经有一个专用于 rbd 的池,我会创建一个(或多个)所需大小的 rbd 映像:
rbd -p <pool> create -s <size> <name>
然后将该 rbd 设备映射到虚拟机管理程序上,为了在启动后自动映射,目录中有一个示例文件/etc/ceph
:
# cat /etc/ceph/rbdmap
# RbdDevice Parameters
#poolname/imagename id=client,keyring=/etc/ceph/ceph.client.keyring
要在启动后启用地图,您需要启用 rbdmap 服务:
# systemctl enable --now rbdmap.service
● rbdmap.service - Map RBD devices
Loaded: loaded (/usr/lib/systemd/system/rbdmap.service; disabled; vendor preset: disabled)
Active: inactive (dead)
当 rbd 映像映射到虚拟机管理程序时,您应该在lsblk
输出中看到它作为rbd
设备,或者在/dev/rbd
以下位置看到它:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 458K 0 rom
rbd0 252:0 0 10M 0 disk
# ls -l /dev/rbd0
brw-rw---- 1 root disk 252, 0 9. Feb 12:18 /dev/rbd0
因此从虚拟机管理程序的角度来看,它现在是一个可用于创建存储池的本地磁盘。
答案2
虽然目前无法在 Cockpit UI 中创建 rbd 存储池,但我找到了一种创建池以供 libvirt 使用的方法。池在 UI 中正确显示,我也可以在那里创建新卷。
- 登录到你的 ceph 管理节点并创建一个新的客户端令牌:
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=mypool'
- 登录到您的虚拟化主机(使用 Cockpit 管理的机器)并为 libvirt 配置池。
virsh secret-define --file secret.xml
virsh secret-set-value --secret UUID --base64 "$(ceph auth get-key client.libvirt)"
virsh pool-define mypool.xml
- 该池现在应该在 Cockpit UI 中可见,可以激活并可以创建新的卷。
配置文件应类似于以下内容:
<secret ephemeral='no' private='no'>
<uuid>UID</uuid>
<usage type='ceph'>
<name>client.libvirt secret</name>
</usage>
</secret>
<pool type="rbd">
<name>mypool</name>
<source>
<name>mypool</name>
<host name='CEPH_MON_IP'/>
<auth username='libvirt' type='ceph'>
<secret uuid='UUID'/>
</auth>
</source>
</pool>