Rook Ceph OSD异常,格式化osd硬盘重新挂载

        今天突然一个osd节点pod一直无法正常运行,查看logs后发现报出的错误信息没办法判断是出了什么问题,在网络上搜索也没有找到解决办法,无奈之下只能决定格式化osd节点硬盘,重新加载试试。

1、进入rook ceph toolbox工具pod

kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash

2、命名用ceph命令查询并删除osd

#查询状态,找到要移除的osd id
ceph osd status
#标记移除的osd
ceph osd out osd.1
ceph osd purge 1 --yes-i-really-mean-it
ceph osd crush remove osd.1
ceph auth rm osd.1
ceph osd rm osd.1 

3、删除相关osd节点的deployment

kubectl delete deploy rook-ceph-osd-1 -n rook-ceph

4、登录要删除osd所在的服务器,格式化osd硬盘

#检查硬盘路径
fdisk -l
#删除硬盘分区信息
DISK="/dev/sdb"
sgdisk --zap-all $DISK
#清理硬盘数据(hdd硬盘使用dd,ssd硬盘使用blkdiscard,二选一)
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
blkdiscard $DISK
#删除原osd的lvm信息(如果单个节点有多个osd,那么就不能用*拼配模糊删除,而根据lsblk -f查询出明确的lv映射信息再具体删除,参照第5项操作)
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*
#重启,sgdisk –zzap-all需要重启后才生效
reboot

报错错误:cannot open /dev/sdb: Device or resource busy

5、手动查看并删除原osd创建的lvm信息(可选,根据第4步执行情况决定),否则格式化时会报 cannot open /dev/sdb: Device or resource busy 异常

#查看lvm设备信息
dmsetup ls;
#删除ceph osd lvm映射关系
dmsetup remove ceph--5a4cb4bb--70b3--40bd--9da7--09d4f264a513-osd-xxxxxxxxx
#移动lv
lvremove /dev/mapper/ceph--5a4cb4bb--70b3--40bd--9da7--09d4f264a513-osd—xxxxxxxxx
#删除相关文件
rm –rf /dev/ceph--5a4cb4bb--70b3--40bd--9da7--09d4f264a513

5、重启ceph operator调度,使检测到格式化后的osd硬盘,osd启动后ceph集群会自动平衡数据

kubectl rollout restart deploy rook-ceph-operator -n rook-ceph

注:如果新osd pod无法执行起来可以通过查询osd prepare日志找问题

kubectl -n rook-ceph logs rook-ceph-osd-prepare-node1-fvmrp provision
原文地址:https://www.cnblogs.com/lswweb/p/13895160.html