Ceph 集群 RBD 裸磁盘重置

47 阅读2分钟

背景

以下记录一次 Rook Ceph 集群的磁盘清理重置的记录。

关于如何在 Rook-Ceph 集群中做清理可以参照这篇官方文档,这是一个正确的清理流程:

https://rook.io/docs/rook/v1.12/Storage-Configuration/ceph-teardown/#delete-the-data-on-hosts

暴力拆迁

我的情况是在实验环境强制 kubeadm reset 直接强断 worker 节点。

然后通过 kubectl delete no 删除。

然后再 kubectl remove -f cluster.yaml 的方式销毁一个 rook-ceph 集群。

重新拉起

然后重新 kubeadm join 拉起几个 worker,重新 kubectl create -f cluster.yaml

按理来说对应的 node 上面有裸盘,就可以自动创建 osd Pod,但是事实上这几个裸盘(/dev/sdb)并没有如愿生成 osd。

然后尝试加入全新的裸盘 /dev/sdc,这几个盘的 osd Pod 被成功正常拉起来了。

说明一个问题:

对于某个裸盘而言,如果之前的清理没有按照一个完整的流程来清理,实际上旧的数据是存在某种标志导致无法被新的集群重新利用的,所以我们需要对裸盘进行修复或者清理,使得其可以正常加入新的集群创建 osd。

裸盘清理

按照上面的官网文档,清理一个磁盘用下面的方法,基本就是低格这个磁盘。

DISK="/dev/sdX"

# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
sgdisk --zap-all $DISK

# Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync

# SSDs may be better cleaned with blkdiscard instead of dd
blkdiscard $DISK

# Inform the OS of partition table changes
partprobe $DISK

尝试操作实验一下:

sgdisk 这个命令在 gdisk 这个包里面:

yum install -y gdisk

实际上做下面两个操作就可以让这个盘重置,然后重启,稍等很久就可以重新生成 osd。

sgdisk --zap-all /dev/<sdX>
dd if=/dev/zero of=/dev/<sdX> bs=1M count=100 oflag=direct,dsync

安全修复

TODO: 这个是一个待考虑的问题,感觉在开发环境的不稳定节点状态下(可能多个节点随时一片挂掉的情况),还是有机会造成较大的崩溃,如何安全备份、修复是一个后续需要仔细掌握的课题。

参考: