我正在 Kubernetes 上再次尝试使用 rook-ceph 进行存储。我有 3 个节点,每个节点都有
- 安装在 的本地 SSD 分区
/dev/sda2
,以及 - 位于 的 NAS 卷
/dev/sdb
。
在我的 rook-config 中,我使用所有设备,它会自动查找并使用它们作为 OSD。到目前为止一切顺利。
我想做的是将它们视为 Kubernetes 中的两个独立存储类 - ssd-pool 速度快但体积小,而 NAS-pool 速度慢但体积大。这样,我可以将 IO 密集型 pod(如数据库)附加到 ssd-storageclass 上,而将大小密集型 pod(如文件服务器)附加到 NAS-storageclass 上。
由于 rook-ceph 当前将所有 OSD 附加到同一个池,因此我无法通过 kubernetes 存储类定位特定的 OSD:
bash-4.4$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.82942 root default
-7 0.27647 host k8s-storage-1
1 ssd 0.17879 osd.1 up 1.00000 1.00000
5 ssd 0.09769 osd.5 up 1.00000 1.00000
-3 0.27647 host k8s-storage-2
2 ssd 0.17879 osd.2 up 1.00000 1.00000
3 ssd 0.09769 osd.3 up 1.00000 1.00000
-5 0.27647 host k8s-storage-3
0 ssd 0.17879 osd.0 up 1.00000 1.00000
4 ssd 0.09769 osd.4 up 1.00000 1.00000
bash-4.4$ ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 k8s-storage-3 196M 182G 0 0 1 16 exists,up¹
1 k8s-storage-1 374M 182G 0 0 0 0 exists,up¹
2 k8s-storage-2 261M 182G 0 0 1 90 exists,up¹
3 k8s-storage-2 121M 99.8G 0 0 0 0 exists,up²
4 k8s-storage-3 187M 99.8G 0 0 0 0 exists,up²
5 k8s-storage-1 85.3M 99.9G 0 0 0 0 exists,up²
¹local SSD storage
²remote NAS storage (it's just a 100gb for testing purposes)
我确实找到了一个可行的解决方案,即使用 运行两个单独的 rook-ceph 实例deviceFilter
,这样其中一个 rook-ceph 集群仅使用 SSD,而另一个仅使用 NAS 卷。我不喜欢这个解决方案,因为它的缺点是必须在一个 kubernetes 集群中运行两个 rook-ceph 集群实例。
有没有办法让 rook-ceph 分离 SSD 和 NAS 存储,以便它们可以通过 kubernetes 存储类独立定位?
更新 1:我发现我可以手动更新设备的存储类别:ceph osd crush set-device-class osd.XXX
- 我现在唯一缺少的是如何通过 a 来定位它们kubernetes storageclass
,ceph pool
其中(我猜?)OSD 必须放在其中?
最好的,拉尔斯
答案1
@LarsKumbier 您可以创建 cephcluster 来为 OSD 集指定设备类https://github.com/rook/rook/blob/f70b687a6077877e29ab02b06a881ed2d65c3c78/Documentation/CRDs/Cluster/ceph-cluster-crd.md#osd-configuration-settings https://github.com/rook/rook/blob/f70b687a6077877e29ab02b06a881ed2d65c3c78/Documentation/CRDs/Cluster/ceph-cluster-crd.md#storage-class-device-sets 并将该设备类用于 cephfs 和 rbd 池,并创建一个存储类来指向 rbd 池和 cephfs 数据池?这是否需要创建多个 ceph 集群?