rook(v0.9)+ceph 清理过程记录

  • 清除集群时,注意清除以下资源

rook-ceph-system namespace: 由operator.yaml创建的operator和agent所在的namespace
rook-ceph namespace: 由cluster.yaml创建的rook cluster所在的namespace
/var/lib/rook: 在集群中配置monitor和osd配置的所在路径

如果安官方范例安装wordpress,可以执行以下命令删除相关资源

kubectl delete -f ../wordpress.yaml
kubectl delete -f ../mysql.yaml
kubectl delete -n rook-ceph cephblockpool replicapool
kubectl delete storageclass rook-ceph-block
kubectl delete -f kube-registry.yaml

  • 删除集群CRD

删除相关资源以后,删除cluster CRD,在删除operator和agent之前删除cluster,执行以下操作

kubectl delete -f operator.yaml
kubectl delete namespace rook-ceph   #如果没有被其他资源使用,也可以直接删除掉rook-ceph namespace

  • 在每台服务器上删除数据

最后的清理步骤需要删除集群中每个主机上的文件。需要删除集群CRD中指定的dataDirHostPath属性下的所有文件。否则,启动新群集时将保留不一致状态。
默认存放在/var/lib/rook下,所在这下面的数据全部要删除掉,如果不是默认,查看dataDirHostPath配置的相关路径

可以使用以下方法重置集群的osd

#!/usr/bin/env bash
DISK="/dev/sdb"
# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
# You will have to run this step for all disks.
sgdisk --zap-all $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- directories in /dev (unnecessary clutter)
rm -rf /dev/ceph-*

  • 故障排查

一个namespace下的资源如果没有清除,那么这个namespace是无法被删除的,所以如果namespace和集群CRD执行删除命令后,一直处于terminating状态时,可以通过以下命令查看pod状态
kubectl -n rook-ceph get pod
如果pod状态也是terminating,那么可以通过以下命令强制删除
kubectl delete pod
再次查看集群状态
kubectl -n rook-ceph get cephcluster

如果即使您之前已执行删除命令,群集CRD仍然存在,可以参考执行以下操作
创建群集CRD时,Rook operator会自动添加finalizer 。finalizer允许operator确保在删除集群CRD之前,将清除所有块和文件。如果没有正确的清理,pod正在使用的存储将无限期挂起,直到系统重新启动。

如果因为某些原因无法自动删除finalizer,可以通过以下命令手动删除
kubectl -n rook-ceph patch cephclusters.ceph.rook.io rook-ceph -p '{"metadata":{"finalizers": []}}' --type=merge

执行后,可以看到cluster CRD在几秒内被删除,并且不再阻碍其他的清理,比如namespace的删除。

参考官网

你可能感兴趣的:(#,Kubernetes,#,storage)