OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
第 3 章 卸载 OpenShift Container Storage
3.1. 在内部模式中卸载 OpenShift Container Storage 复制链接链接已复制到粘贴板!
使用本节中的步骤卸载 OpenShift Container Storage。
卸载注解
Storage Cluster 上的注解用于更改卸载过程的行为。要定义卸载行为,在存储集群中引入了以下两个注解:
-
uninstall.ocs.openshift.io/cleanup-policy: delete
-
uninstall.ocs.openshift.io/mode: graceful
下表提供了有关可用于这些注解的不同值的信息:
注解 | 值 | 默认 | 行为 |
---|---|---|---|
cleanup-policy | delete | 是 |
Rook 清理物理驱动器和 |
cleanup-policy | retain | 否 |
Rook 不会清理物理驱动器和 |
mode | graceful | 是 | Rook 和 NooBaa 暂停卸载过程,直到管理员/用户移除 PVC 和 OBC |
mode | forced | 否 | Rook 和 NooBaa 即使使用 Rook 和 NooBaa 置备的 PVC/OBC 分别存在,也会继续卸载。 |
您可以通过使用以下命令编辑注解值来更改清理策略或卸载模式:
oc annotate storagecluster -n openshift-storage ocs-storagecluster uninstall.ocs.openshift.io/cleanup-policy="retain" --overwrite
$ oc annotate storagecluster -n openshift-storage ocs-storagecluster uninstall.ocs.openshift.io/cleanup-policy="retain" --overwrite
storagecluster.ocs.openshift.io/ocs-storagecluster annotated
oc annotate storagecluster -n openshift-storage ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
$ oc annotate storagecluster -n openshift-storage ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
storagecluster.ocs.openshift.io/ocs-storagecluster annotated
先决条件
- 确保 OpenShift Container Storage 集群处于健康状态。当因为资源或节点不足而导致部分 pod 无法成功终止时,卸载过程可能会失败。如果集群处于不健康状态,请在卸载 OpenShift Container Storage 前联络红帽客户支持。
- 使用 OpenShift Container Storage 提供的存储类,确保应用程序不使用持久性卷声明 (PVC) 或对象存储桶声明 (OBC)。
- 如果管理员创建了任何自定义资源(如自定义存储类、cephblockpools),则管理员必须在移除消耗这些资源后将它们删除。
流程
删除使用 OpenShift Container Storage 的卷快照。
列出来自所有命名空间的卷快照。
oc get volumesnapshot --all-namespaces
$ oc get volumesnapshot --all-namespaces
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上一命令的输出中,识别和删除使用 OpenShift Container Storage 的卷快照。
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
删除使用 OpenShift Container Storage 的 PVC 和 OBC。
在默认的卸载模式 (graceful) 中,卸载程序会等待所有使用 OpenShift Container Storage 的 PVC 和 OBC 被删除。
如果要事先删除 PVC 来删除存储集群,您可以将卸载模式注解设置为"强制"并跳过此步骤。这样做会导致系统中出现孤立 PVC 和 OBC。
使用 OpenShift Container Storage 删除 OpenShift Container Platform 监控堆栈 PVC。
使用 OpenShift Container Storage 删除 OpenShift Container Platform Registry PVC。
请查看 第 3.3 节 “从 OpenShift Container Storage 中删除 OpenShift Container Platform registry”
使用 OpenShift Container Storage 删除 OpenShift Container Platform 日志 PVC。
请查看 第 3.4 节 “从 OpenShift Container Storage 中删除集群日志记录 Operator”
删除使用 OpenShift Container Storage 置备的其他 PVC 和 OBC。
下面是一个示例脚本,用于标识使用 OpenShift Container Storage 置备的 PVC 和 OBC。该脚本忽略 Openshift Container Storage 内部使用的 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 删除 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 注意确保您已删除了集群中创建的任何自定义后备存储、存储桶类等。
删除 Storage Cluster 对象并等待相关资源被删除。
oc delete -n openshift-storage storagecluster --all --wait=true
$ oc delete -n openshift-storage storagecluster --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 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 Container Storage 节点上的 OSD 设备中删除
dm-crypt
管理的device-mapper
映射。创建
debug
pod 和chroot
到存储节点上的主机。oc debug node/<node name> chroot /host
$ oc debug node/<node name> $ chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取设备名称并记录 OpenShift Container Storage 设备。
dmsetup ls
$ dmsetup ls 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
退出上述命令。 查找
cryptsetup
进程的 PID,该进程一直卡住。ps
$ ps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
PID TTY TIME CMD 778825 ? 00:00:00 cryptsetup
PID TTY TIME CMD 778825 ? 00:00:00 cryptsetup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录要终止的
PID
编号。在本例中,PID
为778825
。使用
kill
命令终止进程。kill -9 <PID>
$ kill -9 <PID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证设备名称是否已移除。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
按
删除命名空间并等待删除完成。如果
openshift-storage
是活跃的项目,则需要切换到另一个项目。例如:
oc project default oc delete project openshift-storage --wait=true --timeout=5m
$ oc project default $ 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 Container Storage 时,如果没有完全删除命名空间并处于
Terminating
状态,请执行 故障排除和删除 Uninstall 过程中剩余的资源 的步骤,以识别阻塞命名空间的对象。取消标记存储节点。
oc label nodes --all cluster.ocs.openshift.io/openshift-storage- oc label nodes --all topology.rook.io/rack-
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage- $ oc label nodes --all topology.rook.io/rack-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点有污点,则删除 OpenShift Container Storage 污点。
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 Container Storage 置备的所有 PV。如果有任何 PV 处于
Released
状态,请将其删除。oc get pv oc delete pv <pv name>
$ oc get pv $ oc delete pv <pv name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 Multicloud 对象网关存储类。
oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
$ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
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 --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 --wait=true --timeout=5m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform Web 控制台中,确保完全卸载 OpenShift Container Storage,
-
点 Home
Overview 访问仪表板。 - 验证 Cluster 选项卡旁边是否不再显示持久性存储和对象存储选项卡。
-
点 Home