今天突然一个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硬盘
安装sgdisk命令,yum install -y gdisk
#检查硬盘路径 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