OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
第 4 章 卸载 OpenShift Data Foundation
4.1. 在内部附加设备模式中卸载 OpenShift Data Foundation 复制链接链接已复制到粘贴板!
使用本节中的步骤卸载 OpenShift Data Foundation。
卸载注解
Storage Cluster 上的注解用于更改卸载过程的行为。要定义卸载行为,在存储集群中引入了以下两个注解:
-
uninstall.ocs.openshift.io/cleanup-policy: delete
-
uninstall.ocs.openshift.io/mode: graceful
下表提供了有关可用于这些注解的不同值的信息:
注解 | 值 | 默认 | 行为 |
---|---|---|---|
cleanup-policy | delete | 是 |
Rook 清理物理驱动器和 |
cleanup-policy | retain | 否 |
Rook 不会清理物理驱动器和 |
模式 | graceful | 是 | rook 和 NooBaa 在管理员/用户删除持久性卷声明(PVC)和 Object Bucket Claims(OBC)前暂停卸载过程。 |
模式 | forced | 否 | rook 和 NooBaa 会在卸载过程中继续进行,即使 PVC/OBCs 使用 Rook 和 NooBaa 置备 |
编辑注解的值,以更改清理策略或卸载模式。
oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/cleanup-policy="retain" --overwrite
$ oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/cleanup-policy="retain" --overwrite
oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
$ oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
两个命令的预期输出:
storagecluster.ocs.openshift.io/ocs-storagecluster annotated
storagecluster.ocs.openshift.io/ocs-storagecluster annotated
先决条件
- 确保 OpenShift Data Foundation 集群处于健康状态。当因为资源或节点不足而导致部分 pod 无法成功终止时,卸载过程可能会失败。如果集群处于不健康状态,请在卸载 OpenShift Data Foundation 前联系红帽客户支持。
- 使用 OpenShift Data Foundation 提供的存储类,确保应用程序不使用持久性卷声明 (PVC) 或对象存储桶声明 (OBC)。
- 如果管理员创建了任何自定义资源(如自定义存储类、cephblockpools),则管理员必须在移除消耗这些资源后将它们删除。
流程
删除使用 OpenShift Data Foundation 的卷快照。
列出来自所有命名空间的卷快照。
oc get volumesnapshot --all-namespaces
$ oc get volumesnapshot --all-namespaces
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从上一命令的输出中,识别和删除使用 OpenShift Data Foundation 的卷快照。
oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
$ oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <VOLUME-SNAPSHOT-NAME>
- 是卷快照的名称
<NAMESPACE>
- 是项目的命名空间
删除使用 OpenShift Data Foundation 的 PVC 和 OBC。
在默认的卸载模式 (graceful) 中,卸载程序会等待所有使用 OpenShift Data Foundation 的 PVC 和 OBC 被删除。
如果要在没有删除 PVC 的情况下删除 Storage Cluster,您可以将卸载模式注解设置为
forced(强制)
并跳过此步骤。这样做会在系统中产生孤立 PVC 和 OBC。使用 OpenShift Data Foundation 删除 OpenShift Container Platform 监控堆栈 PVC。
使用 OpenShift Data Foundation 删除 OpenShift Container Platform Registry PVC。
从 OpenShift Data Foundation 中删除 OpenShift Container Platform registry
使用 OpenShift Data Foundation 删除 OpenShift Container Platform 日志 PVC。
删除使用 OpenShift Data Foundation 置备的其他 PVC 和 OBC。
下面是一个示例脚本,用于标识使用 OpenShift Data Foundation 置备的 PVC 和 OBC。该脚本将忽略 OpenShift Data Foundation 内部使用的 PVC。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意云平台省略
RGW_PROVISIONER
。删除 OBC。
oc delete obc <obc-name> -n <project-name>
$ oc delete obc <obc-name> -n <project-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <obc-name>
- 是 OBC 的名称
<project-name>
- 是项目的名称
删除 PVC。
oc delete pvc <pvc-name> -n <project-name>
$ oc delete pvc <pvc-name> -n <project-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <pvc-name>
- 是 PVC 的名称
<project-name>
是项目的名称
注意确保您已删除了集群中创建的任何自定义后备存储、存储桶类等。
删除 Storage System 对象,并等待相关资源被删除。
oc delete -n openshift-storage storagesystem --all --wait=true
$ oc delete -n openshift-storage storagesystem --all --wait=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
uninstall.ocs.openshift.io/cleanup-policy
是否已设置为delete
(默认),并确保其状态为Completed
。oc get pods -n openshift-storage | grep -i cleanup
$ oc get pods -n openshift-storage | grep -i cleanup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME READY STATUS RESTARTS AGE cluster-cleanup-job-<xx> 0/1 Completed 0 8m35s cluster-cleanup-job-<yy> 0/1 Completed 0 8m35s cluster-cleanup-job-<zz> 0/1 Completed 0 8m35s
NAME READY STATUS RESTARTS AGE cluster-cleanup-job-<xx> 0/1 Completed 0 8m35s cluster-cleanup-job-<yy> 0/1 Completed 0 8m35s cluster-cleanup-job-<zz> 0/1 Completed 0 8m35s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认目录
/var/lib/rook
现在为空。只有uninstall.ocs.openshift.io/cleanup-policy
注解设置为delete
(默认)时,此目录才为空。for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host ls -l /var/lib/rook; done
$ for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host ls -l /var/lib/rook; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在安装时启用了加密,请从所有 OpenShift Data Foundation 节点上的 OSD 设备删除
dm-crypt
管理的device-mapper
映射。创建
debug
pod 和chroot
到存储节点上的主机。oc debug node/<node-name>
$ oc debug node/<node-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot /host
$ chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <node-name>
- 是节点的名称
获取设备名称并记录 OpenShift Data Foundation 设备。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
ocs-deviceset-0-data-0-57snx-block-dmcrypt (253:1)
ocs-deviceset-0-data-0-57snx-block-dmcrypt (253:1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除映射的设备。
cryptsetup luksClose --debug --verbose ocs-deviceset-0-data-0-57snx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-0-data-0-57snx-block-dmcrypt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果上述命令因为权限不足而卡住,请运行以下命令:
-
按
CTRL+Z
退出上述命令。 查找阻塞的进程的 PID。
ps -ef | grep crypt
$ ps -ef | grep crypt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
kill
命令终止进程。kill -9 <PID>
$ kill -9 <PID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <PID>
- 是进程 ID
验证设备名称是否已移除。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
按
删除命名空间并等待删除完成。如果
openshift-storage
是活跃的项目,则需要切换到另一个项目。例如:
oc project default
$ oc project default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete project openshift-storage --wait=true --timeout=5m
$ oc delete project openshift-storage --wait=true --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果以下命令返回 NotFound 错误,则项目被删除。
oc get project openshift-storage
$ oc get project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意卸载 OpenShift Data Foundation 时,如果还没有完全删除
命名空间
并处于Terminating
状态,请执行故障排除和删除 Uninstall 期间剩余的资源 的步骤,以识别阻止命名空间终止的对象。- 如果您使用本地存储设备部署了 OpenShift Data Foundation,请删除本地存储 Operator 配置。请参阅 删除本地存储 Operator 配置。
取消标记存储节点。
oc label nodes --all cluster.ocs.openshift.io/openshift-storage-
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label nodes --all topology.rook.io/rack-
$ oc label nodes --all topology.rook.io/rack-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点存在污点,则删除 OpenShift Data Foundation 污点。
oc adm taint nodes --all node.ocs.openshift.io/storage-
$ oc adm taint nodes --all node.ocs.openshift.io/storage-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认已删除使用 OpenShift Data Foundation 置备的所有持久卷(PV)。如果有任何 PV 处于
Released
状态,请将其删除。oc get pv
$ oc get pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pv <pv-name>
$ oc delete pv <pv-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <pv-name>
- 是 PV 的名称
删除
CustomResourceDefinitions
。oc delete crd backingstores.noobaa.io bucketclasses.noobaa.io cephblockpools.ceph.rook.io cephclusters.ceph.rook.io cephfilesystems.ceph.rook.io cephnfses.ceph.rook.io cephobjectstores.ceph.rook.io cephobjectstoreusers.ceph.rook.io noobaas.noobaa.io ocsinitializations.ocs.openshift.io storageclusters.ocs.openshift.io cephclients.ceph.rook.io cephobjectrealms.ceph.rook.io cephobjectzonegroups.ceph.rook.io cephobjectzones.ceph.rook.io cephrbdmirrors.ceph.rook.io storagesystems.odf.openshift.io --wait=true --timeout=5m
$ oc delete crd backingstores.noobaa.io bucketclasses.noobaa.io cephblockpools.ceph.rook.io cephclusters.ceph.rook.io cephfilesystems.ceph.rook.io cephnfses.ceph.rook.io cephobjectstores.ceph.rook.io cephobjectstoreusers.ceph.rook.io noobaas.noobaa.io ocsinitializations.ocs.openshift.io storageclusters.ocs.openshift.io cephclients.ceph.rook.io cephobjectrealms.ceph.rook.io cephobjectzonegroups.ceph.rook.io cephobjectzones.ceph.rook.io cephrbdmirrors.ceph.rook.io storagesystems.odf.openshift.io --wait=true --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确保在 OpenShift Container Platform Web 控制台中完全卸载 OpenShift Data Foundation,
- 点 Storage。
- 验证 OpenShift Data Foundation 是否不再出现在 Storage 下。
4.1.1. 删除本地存储 Operator 配置 复制链接链接已复制到粘贴板!
只有在您使用本地存储设备部署了 OpenShift Data Foundation 时,才使用本节中的说明。
对于仅使用 localvolume
资源部署的 OpenShift Data Foundation,请直接转到第 8 步。
流程
标识
LocalVolumeSet
以及 OpenShift Data Foundation 使用的对应StorageClassName
。oc get localvolumesets.local.storage.openshift.io -n openshift-local-storage
$ oc get localvolumesets.local.storage.openshift.io -n openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将变量 SC 设置为提供
LocalVolumeSet
的StorageClass
。export SC="<StorageClassName>"
$ export SC="<StorageClassName>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出并记下稍后要清理的设备。要列出磁盘的设备 ID,请按照这里所述的步骤进行操作,请参阅查找可用的存储设备。
输出示例:
/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3
/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
LocalVolumeSet
。oc delete localvolumesets.local.storage.openshift.io <name-of-volumeset> -n openshift-local-storage
$ oc delete localvolumesets.local.storage.openshift.io <name-of-volumeset> -n openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除给定
StorageClassName
的本地存储 PV。oc get pv | grep $SC | awk '{print $1}'| xargs oc delete pv
$ oc get pv | grep $SC | awk '{print $1}'| xargs oc delete pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
StorageClassName
。oc delete sc $SC
$ oc delete sc $SC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
LocalVolumeSet
创建的符号链接。[[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
[[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
LocalVolumeDiscovery
。oc delete localvolumediscovery.local.storage.openshift.io/auto-discover-devices -n openshift-local-storage
$ oc delete localvolumediscovery.local.storage.openshift.io/auto-discover-devices -n openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
LocalVolume
资源(如果有)。使用以下步骤删除在当前或以前的 OpenShift Data Foundation 版本中置备 PV 的
LocalVolume
资源。此外,确保这些资源不提供给集群上的其他租户使用。对于每个本地卷,请执行以下操作:
标识
LocalVolume
以及 OpenShift Data Foundation 使用的对应StorageClassName
。oc get localvolume.local.storage.openshift.io -n openshift-local-storage
$ oc get localvolume.local.storage.openshift.io -n openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将变量 LV 设置为 LocalVolume 的名称,变量 SC 设置为 StorageClass 的名称
例如:
LV=local-block SC=localblock
$ LV=local-block $ SC=localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出并记下稍后要清理的设备。
oc get localvolume -n openshift-local-storage $LV -o jsonpath='{ .spec.storageClassDevices[].devicePaths[] }{"\n"}'
$ oc get localvolume -n openshift-local-storage $LV -o jsonpath='{ .spec.storageClassDevices[].devicePaths[] }{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
/dev/sdb /dev/sdc /dev/sdd /dev/sde
/dev/sdb /dev/sdc /dev/sdd /dev/sde
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除本地卷资源。
oc delete localvolume -n openshift-local-storage --wait=true $LV
$ oc delete localvolume -n openshift-local-storage --wait=true $LV
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除剩余的 PV 和 StorageClasses(如果存在)。
oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5m oc delete storageclass $SC --wait --timeout=5m
$ oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5m $ oc delete storageclass $SC --wait --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从该资源的存储节点中清理工件。
[[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
$ [[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
分别擦除第 1 和第 8 步中列出的每个本地卷组或本地卷的磁盘,以便可以重复使用它们。
列出存储节点。
oc get nodes -l cluster.ocs.openshift.io/openshift-storage=
oc get nodes -l cluster.ocs.openshift.io/openshift-storage=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME STATUS ROLES AGE VERSION node-xxx Ready worker 4h45m v1.18.3+6c42de8 node-yyy Ready worker 4h46m v1.18.3+6c42de8 node-zzz Ready worker 4h45m v1.18.3+6c42de8
NAME STATUS ROLES AGE VERSION node-xxx Ready worker 4h45m v1.18.3+6c42de8 node-yyy Ready worker 4h46m v1.18.3+6c42de8 node-zzz Ready worker 4h45m v1.18.3+6c42de8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取节点控制台并在出现提示时执行
chroot /host
命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将磁盘路径存储在 DISKS 变量中的引号内。有关磁盘路径列表,请查看第 3 步和第 8.c 步以了解本地卷集和本地卷。
输出示例:
DISKS="/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3 " DISKS="/dev/sdb /dev/sdc /dev/sdd /dev/sde ".
sh-4.4# DISKS="/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3 " or sh-4.2# DISKS="/dev/sdb /dev/sdc /dev/sdd /dev/sde ".
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有磁盘上运行
sgdisk --zap-all
。for disk in $DISKS; do sgdisk --zap-all $disk;done
sh-4.4# for disk in $DISKS; do sgdisk --zap-all $disk;done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 退出 shell,再对其他节点重复此操作。
exit exit
sh-4.4# exit exit sh-4.2# exit exit Removing debug pod ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除
openshift-local-storage
命名空间并等待删除完成。如果openshift-local-storage
命名空间是活跃的项目,则需要切换到另一个项目。例如:
oc project default oc delete project openshift-local-storage --wait=true --timeout=5m
$ oc project default $ oc delete project openshift-local-storage --wait=true --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果以下命令返回了 NotFound 错误,则该项目将被删除。
oc get project openshift-local-storage
$ oc get project openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow