背景
以下记录一次 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: 这个是一个待考虑的问题,感觉在开发环境的不稳定节点状态下(可能多个节点随时一片挂掉的情况),还是有机会造成较大的崩溃,如何安全备份、修复是一个后续需要仔细掌握的课题。
参考:
- 如何恢复一个 Rook 集群:blog.palark.com/manual-reco…