rbd块设备的id修改

背景

看到有这个需求,具体碰到什么场景了不太清楚,之前做过rbd的重构的研究,既然能重构,那么修改应该是比重构还要简单一点的,我们具体看下怎么操作

数据结构分析

rbd的元数据信息

[root@lab104 ~]# rbd create testrbd --size 1T
[root@lab104 ~]# rbd info testrbd
rbd image 'testrbd':
    size 1 TiB in 262144 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 5f0c22d39dda
    block_name_prefix: rbd_data.5f0c22d39dda
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features:
    flags:
    create_timestamp: Thu Apr 10 11:01:08 2025
    access_timestamp: Thu Apr 10 11:01:08 2025
    modify_timestamp: Thu Apr 10 11:01:08 2025
[root@lab104 ~]# rbd rm testrbd
Removing image: 100% complete...done.
[root@lab104 ~]# rbd create testrbd --size 1T
[root@lab104 ~]# rbd info testrbd
rbd image 'testrbd':
    size 1 TiB in 262144 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 5f57bde3f24c
    block_name_prefix: rbd_data.5f57bde3f24c
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features:
    flags:
    create_timestamp: Thu Apr 10 11:07:17 2025
    access_timestamp: Thu Apr 10 11:07:17 2025
    modify_timestamp: Thu Apr 10 11:07:17 2025

这个id信息就是那个block_name_prefix里面的,可以看到,同样的名称同样的大小,重建一次,这个信息就发生了改变了,说明这个信息是随机性的,并没有固定算法,这些信息是在几个地方有记录的我们把这几个地方找出来

rbd相关的对象

rbd_id.testrbd
rbd_directory
rbd_header.5f57bde3f24c
rbd_object_map.5f57bde3f24c

这几个是元数据的对象,其它就是数据的信息,我们假如要改id名称,需要先处理元数据

rbd_data.5f57bde3f24c.xxxxxxxx

数据存储是这样的

[root@lab104 ~]# rados -p rbd listomapvals rbd_directory
id_5f57bde3f24c
value (11 bytes) :
00000000  07 00 00 00 74 65 73 74  72 62 64                 |....testrbd|
0000000b

name_testrbd
value (16 bytes) :
00000000  0c 00 00 00 35 66 35 37  62 64 65 33 66 32 34 63  |....5f57bde3f24c|
00000010

rbd_directory通过omap老存储id和名称的对应关系

[root@lab104 ~]# rados -p rbd listomapvals rbd_header.5f57bde3f24c
access_timestamp
value (8 bytes) :
00000000  e5 35 f7 67 95 6f 07 08                           |.5.g.o..|
00000008

create_timestamp
value (8 bytes) :
00000000  e5 35 f7 67 95 6f 07 08                           |.5.g.o..|
00000008

features
value (8 bytes) :
00000000  3d 00 00 00 00 00 00 00                           |=.......|
00000008

modify_timestamp
value (8 bytes) :
00000000  e5 35 f7 67 95 6f 07 08                           |.5.g.o..|
00000008

object_prefix
value (25 bytes) :
00000000  15 00 00 00 72 62 64 5f  64 61 74 61 2e 35 66 35  |....rbd_data.5f5|
00000010  37 62 64 65 33 66 32 34  
<think>我们正在讨论如何在Rook中配置CephRBD存储块设备。根据引用内容,我们可以总结出以下步骤: 1. **修改StorageClass配置**:首先需要修改RBD的StorageClass配置文件。根据引用[2]和[3],配置文件位于Rook示例目录中(例如`/root/rook/deploy/examples/csi/rbd/storageclass.yaml`)。在该文件中,我们可以设置副本数(`replicated.size`)等参数。注意,在生产环境中副本数至少为3,实验环境可以设置为2。2.**创建StorageClass和存储池**:使用kubectl命令创建StorageClass和相应的CephBlockPool(存储池)。引用[2]和[3]展示了如何执行`kubectlcreate -f storageclass.yaml`命令来创建资源。 3. **验证创建结果**:创建后,我们可以通过`kubectl getcephblockpool-n rook-ceph`和`kubectlget sc`命令来检查资源是否成功创建。 4. **使用RBD存储**:创建StorageClass后,就可以在应用(如WordPress)中通过PersistentVolumeClaim(PVC)来请求RBD块存储。引用[3]提到了部署WordPress使用RBD的示例。具体步骤: ###步骤1:修改StorageClass配置文件进入Rook的示例目录,编辑`storageclass.yaml`文件:```bashcd/root/rook/deploy/examples/csi/rbdvimstorageclass.yaml```在文件中,找到`parameters`部分,设置副本数(根据实际环境调整): ```yamlparameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures:layeringcsi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace:rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name:rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace:rook-cephcsi.storage.k8s.io/fstype: ext4reclaimPolicy:DeleteallowVolumeExpansion: truevolumeBindingMode: Immediate```注意:副本数实际上是在CephBlockPool中设置的,而不是在StorageClass中。因此,我们还需要修改存储池的配置。在同一个目录下,有一个`pool.yaml`文件(如果没有,可以从其他示例中复制或创建)。编辑`pool.yaml`: ```yamlapiVersion:ceph.rook.io/v1kind:CephBlockPoolmetadata:name:replicapoolnamespace: rook-cephspec:failureDomain: hostreplicated:size:2#设置副本数,生产环境建议3```###步骤2:创建存储池和StorageClass首先创建存储池(CephBlockPool):```bashkubectlapply -f pool.yaml -n rook-ceph```然后创建StorageClass: ```bashkubectl apply-fstorageclass.yaml``` ###步骤3:验证创建结果检查存储池和StorageClass: ```bashkubectl getcephblockpool-nrook-cephkubectl getsc```###步骤4:使用RBD存储现在,你可以创建PVC来使用这个StorageClass。例如,创建一个PVC的YAML文件(pvc.yaml):```yamlapiVersion: v1kind:PersistentVolumeClaimmetadata:name: rbd-pvcspec:storageClassName:rook-ceph-blockaccessModes:- ReadWriteOnceresources:requests:storage:1Gi``` 应用PVC:```bashkubectlapply -f pvc.yaml```然后,在Pod中挂载这个PVC即可。###注意事项-确保Rook Ceph集群已经部署并处于健康状态。 -根据实际需求调整存储池的副本数,并确保有足够的OSD来满足副本要求。 通过以上步骤,你可以在Rook中配置并使用CephRBD块存储设备[^2][^3]。§§相关问题§§1.如何调整RookCeph存储池的副本数?2.如何在KubernetesPod中使用RBD块存储? 3. Rook CephRBDCephFS有什么区别? 4.如何监控RookCeph集群的健康状态?</think>### 在 Rook 中配置 Ceph RBD 块存储的步骤 #### 1. **准备 StorageClass 配置文件** 进入 Rook 示例目录,修改 `storageclass.yaml`: ```bash cd /root/rook/deploy/examples/csi/rbd vim storageclass.yaml ``` 关键配置项: ```yaml apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: replicapool # 存储池名称 namespace: rook-ceph spec: replicated: size: 2 # 生产环境建议≥3,且不超过OSD数量[^2] --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-ceph-block provisioner: rook-ceph.rbd.csi.ceph.com parameters: clusterID: rook-ceph pool: replicapool # 与上方存储池名一致 imageFormat: "2" # RBD镜像格式 reclaimPolicy: Delete ``` #### 2. **创建存储资源** 应用配置文件创建存储池和 StorageClass: ```bash kubectl apply -f storageclass.yaml -n rook-ceph ``` #### 3. **验证配置结果** ```bash # 检查存储池状态 kubectl get cephblockpool -n rook-ceph # 输出示例:NAME PHASE # replicapool Ready[^2] # 检查StorageClass kubectl get sc # 输出示例:NAME PROVISIONER # rook-ceph-block rook-ceph.rbd.csi.ceph.com[^3] ``` #### 4. **在应用中使用 RBD** 在 Pod 的 PVC 中指定 StorageClass: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-pvc spec: storageClassName: rook-ceph-block # 匹配创建的SC accessModes: [ReadWriteOnce] resources: requests: storage: 10Gi ``` #### 关键注意事项: - **副本数配置**:`size` 值必须 ≤ OSD 节点数量,生产环境至少为 3 以确保高可用[^2]。 - **存储池管理**:通过 `CephBlockPool` CRD 管理,支持动态调整参数。 - **多集群支持**:可通过不同 `clusterID` 区分多个 Ceph 集群。 - **监控**:通过 Ceph Dashboard 查看 RBD 设备状态和性能指标[^4]。 > 配置完成后,Kubernetes 应用即可通过 PVC 自动申请 RBD 块设备,Rook 会处理底层存储的创建、挂载和生命周期管理[^1][^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉磨磨

打赏是写出更好教程的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值