在cockpit中配置ceph块存储池

在cockpit中配置ceph块存储池

我在机器 C 上进行了简单的安装,安装了 Oracle Linux 9.1 和 cockpit 以及 cockpit-machines。在机器 A 和 BI 上配置了一个 ceph 集群,它为 VM 磁盘定义了一个 rbd 块存储池。将最小配置和密钥环复制到机器 CI 上后,就可以“访问”ceph 集群,正如ceph osd lspools机器 C 上的命令一样,它会按预期返回所有配置的池。

然而,在驾驶舱 UI 中,我看到的用于配置新存储池的唯一选项是filesystemnetwork 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 中正确显示,我也可以在那里创建新卷。

  1. 登录到你的 ceph 管理节点并创建一个新的客户端令牌:

ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=mypool'

  1. 登录到您的虚拟化主机(使用 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

  1. 该池现在应该在 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>

相关内容