清理分布式存储

如果需要删除 rook-ceph 集群并重新部署新的集群,应按照本文档依次清理分布式存储服务相关资源。

目录

注意事项

在清理 rook-ceph 之前,请确保所有使用 Ceph 存储的 PVC 和 PV 资源已被删除。

操作步骤

删除 VolumeSnapshotClasses

  1. 删除 VolumeSnapshotClasses。

    kubectl delete VolumeSnapshotClass csi-cephfs-snapshotclass csi-rbd-snapshotclass
  2. 验证 VolumeSnapshotClasses 是否已清理。

    kubectl get VolumeSnapshotClass | grep csi-cephfs-snapshotclass
    kubectl get VolumeSnapshotClass | grep csi-rbd-snapshotclass

    当这些命令无输出时,表示清理完成。

删除 StorageClasses

  1. 进入 Administrator

  2. 在左侧导航栏点击 Storage Management > Storage Classes

  3. 点击 ⋮ > Delete,删除所有使用 Ceph 存储方案的 StorageClasses。

删除存储池

此步骤应在完成上一步后执行。

  1. 进入 Administrator

  2. 在左侧导航栏点击 Storage Management > Distributed Storage

  3. Storage Pool Area,点击 ⋮ > Delete,逐个删除所有存储池。当存储池区域显示 No Storage Pools 时,表示存储池已成功删除。

  4. (可选)如果集群模式为 Extended,还需在集群的 Master 节点执行以下命令,删除创建的内置存储池。

    kubectl -n rook-ceph delete cephblockpool -l cpaas.io/builtin=true

    响应:

    cephblockpool.ceph.rook.io "builtin-mgr" deleted

删除 ceph-cluster

此步骤应在完成上一步后执行。

  1. 更新 ceph-cluster 并启用清理策略。

    kubectl -n rook-ceph patch cephcluster ceph-cluster --type merge -p '{"spec":{"cleanupPolicy":{"confirmation":"yes-really-destroy-data"}}}'
  2. 删除 ceph-cluster。

    kubectl delete cephcluster ceph-cluster -n rook-ceph
  3. 删除执行清理的 jobs。

    kubectl delete jobs --all -n rook-ceph
  4. 验证 ceph-cluster 是否清理完成。

    kubectl get cephcluster  -n rook-ceph | grep ceph-cluster

    当此命令无输出时,表示清理完成。

删除 rook-operator

此步骤应在完成上一步后执行。

  1. 删除 rook-operator。

    kubectl -n rook-ceph delete subscriptions.operators.coreos.com rook-operator
  2. 验证 rook-operator 是否清理完成。

    kubectl get subscriptions.operators.coreos.com -n rook-ceph | grep rook-operator

    当此命令无输出时,表示清理完成。

  3. 验证所有 ConfigMaps 是否已清理。

    kubectl get configmap -n rook-ceph

    当此命令无输出时,表示清理完成。如有输出结果,执行以下命令清理,替换 <configmap> 为实际输出。

    kubectl -n rook-ceph patch configmap <configmap> --type merge -p '{"metadata":{"finalizers": []}}'
  4. 验证所有 Secrets 是否已清理。

    kubectl get secret -n rook-ceph

    当此命令无输出时,表示清理完成。如有输出结果,执行以下命令清理,替换 <secret> 为实际输出。

    kubectl -n rook-ceph patch secrets <secret> --type merge -p '{"metadata":{"finalizers": []}}'
  5. 验证 rook-ceph 是否清理完成。

    kubectl get all -n rook-ceph

    当此命令无输出时,表示清理完成。

执行清理脚本

完成以上步骤后,表示 Kubernetes 和 Ceph 相关资源已清理干净。接下来需要清理主机上 rook-ceph 的残留。

清理脚本

clean-rook.sh 清理脚本内容如下:

点击查看
#!/bin/bash

DISK="$1"

if [ ! -n "$DISK" ]
then
   echo "you must input block dev"
   exit
else
   echo "are you sure to clean device: $DISK ? yes/no"
   read ANSWER
   case $ANSWER in
     [Yy]*)
     echo " you input is y or Y !"
     ;;
     [Nn]*)
     echo " you input a "$ANSWER
     exit
     ;;
   esac
fi

echo "clean /var/lib/rook"
rm -rf /var/lib/rook


echo "clean block dev"

# Recreate partition table and add partition using fdisk, do not delete the empty lines in between
echo "g
n



w" | sudo fdisk $DISK


# Zap the disk to a fresh, usable state (zap-all is important, because MBR has to be clean)
# You will have to run this step for all disks.
sgdisk --zap-all $DISK

# Clean HDDs with dd
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync


# Clean disks such as SSDs with blkdiscard instead of dd
blkdiscard $DISK

# These steps only have to be run once on each node
# If rook sets up OSDs using ceph-volume, teardown leaves some devices mapped that lock the disks.
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %

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

注意事项

清理脚本依赖 sgdisk 命令,请确保在执行清理脚本前已安装该命令。

  • Ubuntu 安装命令:sudo apt install gdisk
  • RedHat 或 CentOS 安装命令:sudo yum install gdisk

操作步骤

  1. 在业务集群中部署分布式存储的每台机器上执行清理脚本 clean-rook.sh。

    sh clean-rook.sh /dev/[device_name]

    示例:sh clean-rook.sh /dev/vdb

    执行时会提示确认是否真的清理该设备,确认后输入 yes 开始清理。

  2. 使用 lsblk -f 命令查看分区信息。当该命令输出中 FSTYPE 列为空时,表示清理完成。