一、清理步骤

1.1 删除Rook集群资源

1.清理deploy

$ for i in `k get deploy -oname`; do k delete $i;done

说明:这里默认清除default空间的pod

2.清理pod

$ for i in `k get po -oname`; do k delete $i;done

说明:这里默认清除default空间的pod

3.清理PVC

$ k delete pvc --all

4.清理快照

$ k delete volumesnapshot XXXX

5.清理创建的 Pool

如果是块存储,执行下面命令进行清除

$ kubectl delete -n rook-ceph cephblockpool replicapool

如果是文件存储,执行下面命令进行清除

$ kubectl -n rook-ceph delete cephfilesystem myfs

6.清理 StorageClass

$ kubectl delete sc rook-ceph-block rook-cephfs

1.2 删除CephCluster CRD

1.编辑CephCluster并添加cleanupPolicy

$ kubectl -n rook-ceph patch cephcluster rook-ceph --type merge -p '{"spec":{"cleanupPolicy":{"confirmation":"yes-really-destroy-data"}}}'

说明:一旦启用清理策略,CephCluster 中任何新的配置更改都将被阻止。在请求删除 CR 之前不会发生任何事情,因此cleanupPolicy如果需要,仍然可以恢复此更改。

2.删除CephCluster

$ kubectl -n rook-ceph delete cephcluster rook-ceph

3.验证集群 CR 是否已删除

$ kubectl -n rook-ceph get cephcluster

1.3 删除操作员和相关资源

开始清理 Rook Ceph 操作员和所有其他资源

$ cd /root/rook/deploy/examples
$ kubectl delete -f operator.yaml
$ kubectl delete -f common.yaml
$ kubectl delete -f crds.yaml

1.4 删除主机上的数据

每台机器上删除/var/lib/rook/

$ rm -rf /var/lib/rook/*

1.5 删除磁盘数据

1.查看需要清理的磁盘主机,图中为3台主机

$ cd /root/rook/deploy/examples
$ vim cluster.yaml

删除磁盘数据-1

2.在这3台主机上编写清理脚本

$ vim clean.sh

DISK="/dev/sdb"

# 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

# This command hangs on some systems: with caution, 'dmsetup remove_all --force' can be used
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %

# ceph-volume setup can leave ceph-<UUID> directories in /dev and /dev/mapper (unnecessary clutter)
rm -rf /dev/ceph-*
rm -rf /dev/mapper/ceph--*

3.在这3台主机上执行清理磁盘脚本

$ yum install gdisk -y
$ bash clean.sh

如果出现以下信息,可不用处理

blkdiscard: /dev/sdb: BLKDISCARD ioctl failed: Operation not supported
ls: cannot access /dev/mapper/ceph-*: No such file or directory

说明:因为是Vmware虚拟机加的磁盘类型为SCSI,不具有 blkdiscard 能力

二、故障排除

如果上面删除中一直卡顿,说明之前的资源删除不干净,可按下面步骤进行相关排查:

1.检查名为rook-ceph的命名空间下的pod

$ kubectl -n rook-ceph get pod

如果没有删除干净,需要进行删除

$ kubectl -n rook-ceph delete pod --all

2.查看集群CRD

$ kubectl -n rook-ceph get cephcluster

如果没有删除干净,需要进行删除

$ kubectl -n rook-ceph delete cephcluster --all

如果由于某种原因操作符无法删除终结器(即操作符不再运行),您可以使用以下命令手动删除终结器:

for CRD in $(kubectl get crd -n rook-ceph | awk '/ceph.rook.io/ {print $1}'); do
    kubectl get -n rook-ceph "$CRD" -o name | \
    xargs -I {} kubectl patch -n rook-ceph {} --type merge -p '{"metadata":{"finalizers": [null]}}'
done

3.检查哪些资源正在阻止删除,并删除终结器和这些资源

$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n rook-ceph

4.删除关键资源终结器

Rook 为 Ceph 集群关键的资源添加了终结器ceph.rook.io/disaster-protection,这样资源就不会被意外删除。操作员负责在删除 CephCluster 时删除终结器。如果由于某种原因操作符无法删除终结器(即操作符不再运行),您可以使用以下命令手动删除终结器:

$ kubectl -n rook-ceph patch configmap rook-ceph-mon-endpoints --type merge -p '{"metadata":{"finalizers": [null]}}'
$ kubectl -n rook-ceph patch secrets rook-ceph-mon --type merge -p '{"metadata":{"finalizers": [null]}}'