OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
替换设备
安全替换操作或失败的设备的说明
摘要
使开源包含更多 复制链接链接已复制到粘贴板!
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对文档提供反馈信息。请告诉我们如何让它更好。提供反馈:
关于特定内容的简单评论:
- 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点在高亮文本上弹出的 Add Feedback。
- 按照显示的步骤操作。
要提交更复杂的反馈,请创建一个 Bugzilla ticket:
- 进入 Bugzilla 网站。
- 在 Component 中选择 Documentation。
- 在 Description 中输入您要提供的信息。包括文档相关部分的链接。
- 点 Submit Bug。
前言 复制链接链接已复制到粘贴板!
根据部署类型,您可以选择以下步骤之一来替换存储设备:
有关在 AWS 上部署的动态创建存储集群,请参阅:
- 有关在 VMware 上部署的动态创建存储集群,请参阅 第 2.1 节 “替换 VMware 基础架构上的操作或失败存储设备”
- 有关在 Red Hat Virtualization 上部署的动态创建存储集群,请参阅 第 3.1 节 “在 Red Hat Virtualization 安装程序置备的基础架构中替换操作或失败的存储设备”
- 有关在 Microsoft Azure 上部署的动态创建存储集群,请参阅 第 4.1 节 “在 Azure 安装程序置备的基础架构中替换操作或失败的存储设备”
有关使用本地存储设备部署的存储集群,请参阅:
OpenShift Container Storage 不支持异构 OSD 大小。
第 1 章 在 AWS 上部署动态置备的 OpenShift Container Storage 复制链接链接已复制到粘贴板!
1.1. 在 AWS 用户置备的基础架构中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
当您需要替换 AWS 用户置备的基础架构上动态创建的存储集群中的设备时,必须替换存储节点。有关如何替换节点的详情,请参考:
1.2. 在 AWS 安装程序置备的基础架构中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
当您需要替换 AWS 安装程序置备的基础架构上动态创建的存储集群中的设备时,必须替换存储节点。有关如何替换节点的详情,请参考:
第 2 章 VMware 上部署的动态置备的 OpenShift Container Storage 复制链接链接已复制到粘贴板!
2.1. 替换 VMware 基础架构上的操作或失败存储设备 复制链接链接已复制到粘贴板!
当一个或多个虚拟机磁盘(VMDK)需要替换在 VMware 基础架构上动态部署的 OpenShift Container Storage 中时,使用此流程。这个过程有助于在新卷上创建新持久性卷声明 (PVC) 并删除旧的对象存储设备 (OSD)。
先决条件
确保数据具有弹性。
- 在 OpenShift Web 控制台中,导航到 Storage → Overview。
- 在 Status 卡中的 Persistent Storage 下,确认 Data Resiliency 有一个绿色勾号标记。
流程
确定需要替换的 OSD,以及在其上调度 OSD 的 OpenShift Container Platform 节点。
oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
rook-ceph-osd-0-6d77d6c7c6-m8xj6
需要替换,compute-2
是调度 OSD 的 OpenShift Container Platform 节点。注意如果要更换的 OSD 处于健康状态,则 Pod 的状态将为
Running
。缩减 OSD 部署,以替换 OSD。
每次您要替换 OSD 时,通过将
osd_id_to_remove
参数更新为 OSD ID 来重复这一步。osd_id_to_remove=0 oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
$ osd_id_to_remove=0 $ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
osd_id_to_remove
是 pod 名称中紧接在rook-ceph-osd
前缀后面的整数。在本例中,部署名称为rook-ceph-osd-0
。输出示例:
deployment.extensions/rook-ceph-osd-0 scaled
deployment.extensions/rook-ceph-osd-0 scaled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
rook-ceph-osd
pod 是否已终止。oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
No resources found.
No resources found.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
rook-ceph-osd
pod 处于terminating
状态,请使用force
选项删除 pod。oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
$ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD,以便能够添加新 OSD。
删除所有旧的
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD。
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>
是
rook-ceph-osd
前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2
。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL
值必须更改为true
,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1'
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在安装时启用了加密,在从相应 OpenShift Container Storage 节点中删除的 OSD 设备中删除
dm-crypt
关联的device-mapper
映射。从
ocs-osd-removal-job
pod 日志中获取所替换 OSD 的 PVC 名称:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于第 #1 步中指定的每个节点,请执行以下操作:
创建
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 根据上一步中标识的 PVC 名称查找相关的设备名称
dmsetup ls| grep <pvc name>
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除映射的设备。
cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-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 验证设备名称是否已移除。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
按
删除
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用带有数据加密的外部密钥管理系统(KMS)时,可以从 Vault 服务器中删除旧的 OSD 加密密钥,因为它现在是孤立的密钥。
验证步骤
验证是否有新的 OSD 正在运行。
oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否创建了处于
Bound
状态的新 PVC。oc get -n openshift-storage pvc
$ oc get -n openshift-storage pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-2s6w4 Bound pvc-7c9bcaf7-de68-40e1-95f9-0b0d7c0ae2fc 512Gi RWO thin 5m ocs-deviceset-1-0-q8fwh Bound pvc-9e7e00cb-6b33-402e-9dc5-b8df4fd9010f 512Gi RWO thin 1d20h ocs-deviceset-2-0-9v8lq Bound pvc-38cdfcee-ea7e-42a5-a6e1-aaa6d4924291 512Gi RWO thin 1d20h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-2s6w4 Bound pvc-7c9bcaf7-de68-40e1-95f9-0b0d7c0ae2fc 512Gi RWO thin 5m ocs-deviceset-1-0-q8fwh Bound pvc-9e7e00cb-6b33-402e-9dc5-b8df4fd9010f 512Gi RWO thin 1d20h ocs-deviceset-2-0-9v8lq Bound pvc-38cdfcee-ea7e-42a5-a6e1-aaa6d4924291 512Gi RWO thin 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。
识别运行新 OSD pod 的节点。
oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
$ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于上一步中确定的每个节点,请执行以下操作:
创建调试 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 运行 "lsblk" 并检查
ocs-deviceset
名旁边的 "crypt" 关键字。lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
登录 OpenShift Web 控制台并查看存储仪表板。
图 2.1. 在设备替换后,OpenShift Container Platform 存储仪表板中的 OSD 状态
3.1. 在 Red Hat Virtualization 安装程序置备的基础架构中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
当一个或多个虚拟机磁盘(VMDK)需要替换在 Red Hat Virtualization 基础架构上部署的 OpenShift Container Storage 中时,使用此流程。这个过程有助于在新卷上创建新持久性卷声明 (PVC) 并删除旧的对象存储设备 (OSD)。
先决条件
确保数据具有弹性。
- 在 OpenShift Web 控制台中,导航到 Storage → Overview。
- 在 Status 卡中的 Persistent Storage 下,确认 Data Resiliency 有一个绿色勾号标记。
流程
确定需要替换的 OSD,以及在其上调度 OSD 的 OpenShift Container Platform 节点。
oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
rook-ceph-osd-0-6d77d6c7c6-m8xj6
需要替换,compute-2
是调度 OSD 的 OpenShift Container Platform 节点。注意如果要更换的 OSD 处于健康状态,则 Pod 的状态将为
Running
。缩减 OSD 部署,以替换 OSD。
每次您要替换 OSD 时,通过将
osd_id_to_remove
参数更新为 OSD ID 来重复这一步。osd_id_to_remove=0 oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
$ osd_id_to_remove=0 $ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
osd_id_to_remove
是 pod 名称中紧接在rook-ceph-osd
前缀后面的整数。在本例中,部署名称为rook-ceph-osd-0
。输出示例:
deployment.extensions/rook-ceph-osd-0 scaled
deployment.extensions/rook-ceph-osd-0 scaled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
rook-ceph-osd
pod 是否已终止。oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
No resources found.
No resources found.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
rook-ceph-osd
pod 处于terminating
状态,请使用force
选项删除 pod。oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
$ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD,以便能够添加新 OSD。
删除所有旧的
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job"
job.batch "ocs-osd-removal-job"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD。
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>
是
rook-ceph-osd
前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2
。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL
值必须更改为true
,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1'
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在安装时启用了加密,在从相应 OpenShift Container Storage 节点中删除的 OSD 设备中删除
dm-crypt
关联的device-mapper
映射。从
ocs-osd-removal-job
pod 日志中获取所替换 OSD 的 PVC 名称:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于第 #1 步中指定的每个节点,请执行以下操作:
创建
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 根据上一步中标识的 PVC 名称查找相关的设备名称
dmsetup ls| grep <pvc name>
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除映射的设备。
cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-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 验证设备名称是否已移除。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
按
删除
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用带有数据加密的外部密钥管理系统(KMS)时,可以从 Vault 服务器中删除旧的 OSD 加密密钥,因为它现在是孤立的密钥。
验证步骤
验证是否有新的 OSD 正在运行。
oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否创建了处于
Bound
状态的新 PVC。oc get -n openshift-storage pvc
$ oc get -n openshift-storage pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。
识别运行新 OSD pod 的节点。
oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
$ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于上一步中确定的每个节点,请执行以下操作:
创建调试 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 运行 "lsblk" 并检查
ocs-deviceset
名旁边的 "crypt" 关键字。lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
登录 OpenShift Web 控制台并查看存储仪表板。
图 3.1. 在设备替换后,OpenShift Container Platform 存储仪表板中的 OSD 状态
4.1. 在 Azure 安装程序置备的基础架构中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
当您需要替换 Azure 安装程序置备的基础架构上动态创建的存储集群中的设备时,必须替换存储节点。有关如何替换节点的详情,请参考:
第 5 章 使用本地存储设备部署的 OpenShift Container Storage 复制链接链接已复制到粘贴板!
5.1. 替换 Amazon EC2 基础架构上的失败存储设备 复制链接链接已复制到粘贴板!
当您需要替换 Amazon EC2(存储优化的 I3 基础架构)上的存储设备时,您必须替换存储节点。有关如何替换节点的详情,请参考在 Amazon EC2 基础架构中替换失败的存储节点。
5.2. 在由本地存储设备支持的集群中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
您可以使用以下基础架构中的本地存储设备替换 OpenShift Container Storage 中部署的对象存储设备(OSD):
- 裸机
- VMware
- Red Hat Virtualization
当需要替换一个或多个底层存储设备时,请使用这个步骤。
先决条件
- 红帽建议将替换设备配置为带有类似基础架构和要替换设备的资源。
-
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建一个
LocalVolumeSet
对象来启用自动置备设备,请按照本地存储支持的集群的 Post-update 配置更改中所述的步骤进行。 -
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建
LocalVolumeDiscovery
对象,现在请按照 由本地存储支持的集群的 Post-update 配置更改 中所述的步骤进行。 确保数据具有弹性。
- 在 OpenShift Web 控制台中,导航到 Storage → Overview。
- 在 Status 卡中的 Persistent Storage 下,确认 Data Resiliency 有一个绿色勾号标记。
流程
- 从相关的 worker 节点中删除底层存储设备。
验证相关的 OSD Pod 已移到 CrashLoopBackOff 状态。
确定需要替换的 OSD,以及在其上调度 OSD 的 OpenShift Container Platform 节点。
oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
rook-ceph-osd-0-6d77d6c7c6-m8xj6
需要替换,compute-2
是调度 OSD 的 OpenShift Container Platform 节点。缩减 OSD 部署,以替换 OSD。
osd_id_to_remove=0 oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
$ osd_id_to_remove=0 $ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
osd_id_to_remove
是 pod 名称中紧接在rook-ceph-osd
前缀后面的整数。在本例中,部署名称为rook-ceph-osd-0
。输出示例:
deployment.extensions/rook-ceph-osd-0 scaled
deployment.extensions/rook-ceph-osd-0 scaled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
rook-ceph-osd
pod 是否已终止。oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
No resources found in openshift-storage namespace.
No resources found in openshift-storage namespace.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
rook-ceph-osd
pod 处于terminating
状态超过几分钟,请使用force
选项删除 pod。oc delete -n openshift-storage pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --grace-period=0 --force
$ oc delete -n openshift-storage pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --grace-period=0 --force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD,以便能够添加新 OSD。
删除所有旧的
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧 OSD。
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>
是
rook-ceph-osd
前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2
。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL
值必须更改为true
,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在安装时启用了加密,在从相应 OpenShift Container Storage 节点中删除的 OSD 设备中删除
dm-crypt
关联的device-mapper
映射。从
ocs-osd-removal-job
pod 日志中获取所替换 OSD 的 PVC 名称:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于第 #1 步中指定的每个节点,请执行以下操作:
创建
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 根据上一步中标识的 PVC 名称查找相关的设备名称
dmsetup ls| grep <pvc name>
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除映射的设备。
cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-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 验证设备名称是否已移除。
dmsetup ls
$ dmsetup ls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
按
查找命令需要删除的持久性卷(PV):
oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
$ oc get pv -L kubernetes.io/hostname | grep localblock | grep Released local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除持久卷:
oc delete pv local-pv-d6bf175b
$ oc delete pv local-pv-d6bf175b
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 向节点物理地添加新设备。
使用以下命令,跟踪与
deviceInclusionSpec
匹配的设备的持久性卷置备。调配持久卷可能需要几分钟时间。oc -n openshift-local-storage describe localvolumeset localblock
$ oc -n openshift-local-storage describe localvolumeset localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调配了持久卷后,将自动为调配的卷创建新的 OSD Pod。
删除
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用带有数据加密的外部密钥管理系统(KMS)时,可以从 Vault 服务器中删除旧的 OSD 加密密钥,因为它现在是孤立的密钥。
验证步骤
验证是否有新的 OSD 正在运行。
oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果新 OSD 在几分钟后没有显示
Running
,请重启rook-ceph-operator
pod 来强制协调。oc delete pod -n openshift-storage -l app=rook-ceph-operator
$ oc delete pod -n openshift-storage -l app=rook-ceph-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否创建了新 PVC。
oc get -n openshift-storage pvc | grep localblock
$ oc get -n openshift-storage pvc | grep localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
ocs-deviceset-0-0-c2mqb Bound local-pv-b481410 1490Gi RWO localblock 5m ocs-deviceset-1-0-959rp Bound local-pv-414755e0 1490Gi RWO localblock 1d20h ocs-deviceset-2-0-79j94 Bound local-pv-3e8964d3 1490Gi RWO localblock 1d20h
ocs-deviceset-0-0-c2mqb Bound local-pv-b481410 1490Gi RWO localblock 5m ocs-deviceset-1-0-959rp Bound local-pv-414755e0 1490Gi RWO localblock 1d20h ocs-deviceset-2-0-79j94 Bound local-pv-3e8964d3 1490Gi RWO localblock 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。
识别运行新 OSD pod 的节点。
oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
$ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于上一步中确定的每个节点,请执行以下操作:
创建调试 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 运行 "lsblk" 并检查
ocs-deviceset
名旁边的 "crypt" 关键字。lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
登录 OpenShift Web 控制台,再检查存储控制面板上的 OSD 状态。
图 5.1. 在设备替换后,OpenShift Container Platform 存储仪表板中的 OSD 状态
根据正在恢复的数据量,完整数据恢复可能需要更长的时间。
5.3. 替换 IBM Power 系统上的操作或失败存储设备 复制链接链接已复制到粘贴板!
您可以使用 IBM Power Systems 上的本地存储设备替换 OpenShift Container Storage 中部署的对象存储设备(OSD)。当需要替换底层存储设备时,请使用这个步骤。
先决条件
确保数据具有弹性。
- 在 OpenShift Web 控制台中,导航到 Storage → Overview。
- 在 Status 卡中的 Persistent Storage 下,确认 Data Resiliency 有一个绿色勾号标记。
流程
确定需要替换的 OSD,以及在其上调度 OSD 的 OpenShift Container Platform 节点。
oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-86bf8cdc8-4nb5t 0/1 crashLoopBackOff 0 24h 10.129.2.26 worker-0 <none> <none> rook-ceph-osd-1-7c99657cfb-jdzvz 1/1 Running 0 24h 10.128.2.46 worker-1 <none> <none> rook-ceph-osd-2-5f9f6dfb5b-2mnw9 1/1 Running 0 24h 10.131.0.33 worker-2 <none> <none>
rook-ceph-osd-0-86bf8cdc8-4nb5t 0/1 crashLoopBackOff 0 24h 10.129.2.26 worker-0 <none> <none> rook-ceph-osd-1-7c99657cfb-jdzvz 1/1 Running 0 24h 10.128.2.46 worker-1 <none> <none> rook-ceph-osd-2-5f9f6dfb5b-2mnw9 1/1 Running 0 24h 10.131.0.33 worker-2 <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,需要替换
rook-ceph-osd-0-86bf8cdc8-4nb5t
,worker-0
是调度 OSD 的 RHOCP 节点。注意如果要更换的 OSD 处于健康状态,则 Pod 的状态将为
Running
。缩减 OSD 部署,以替换 OSD。
osd_id_to_remove=0 oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
$ osd_id_to_remove=0 $ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
osd_id_to_remove
是 pod 名称中紧接在rook-ceph-osd
前缀后面的整数。在本例中,部署名称为rook-ceph-osd-0
。输出示例:
deployment.apps/rook-ceph-osd-0 scaled
deployment.apps/rook-ceph-osd-0 scaled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
rook-ceph-osd
pod 是否已终止。oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
No resources found in openshift-storage namespace.
No resources found in openshift-storage namespace.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
rook-ceph-osd
pod 处于terminating
状态,请使用force
选项删除 pod。oc delete -n openshift-storage pod rook-ceph-osd-0-86bf8cdc8-4nb5t --grace-period=0 --force
$ oc delete -n openshift-storage pod rook-ceph-osd-0-86bf8cdc8-4nb5t --grace-period=0 --force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-86bf8cdc8-4nb5t" force deleted
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-86bf8cdc8-4nb5t" force deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从集群中移除旧 OSD,以便能够添加新 OSD。
识别与要替换的 OSD 关联的
DeviceSet
。oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
$ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl
ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,PVC 名称为
ocs-deviceset-localblock-0-data-0-64xjl
。删除所有旧的
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧的 OSD
oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} | oc -n openshift-storage create -f -
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} | oc -n openshift-storage create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过在 命令中添加逗号分隔的 OSD ID 来移除多个 OSD。(例如:FAILED_OSD_IDS=0,1,2)
警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为Completed
,确认 OSD 移除作业已成功完成。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与要替换的 OSD 关联的持久卷声明(PVC)资源。
标识与 PVC 关联的 PV。
oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
$ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
x
、y
和pvc-suffix
是DeviceSet
中在第 4(a)步中识别的值。输出示例:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-localblock-0-data-0-64xjl Bound local-pv-8137c873 256Gi RWO localblock 24h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-localblock-0-data-0-64xjl Bound local-pv-8137c873 256Gi RWO localblock 24h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,关联的 PV 是
local-pv-8137c873
。确定要替换的设备的名称。
oc get pv local-pv-<pv-suffix> -o yaml | grep path
$ oc get pv local-pv-<pv-suffix> -o yaml | grep path
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
pv-suffix
是前面步骤中标识的 PV 名称中的值。输出示例:
path: /mnt/local-storage/localblock/vdc
path: /mnt/local-storage/localblock/vdc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,设备名称为
vdc
。找到与要被替换的 OSD 关联的
prepare-pod
。oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Mounted
$ oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Mounted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
x
、y
和pvc-suffix
是前面步骤中标识的DeviceSet
中的值。输出示例:
Mounted By: rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc
Mounted By: rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
prepare-pod
名称为rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc
。在删除关联的 PVC 前,删除
osd-prepare
pod。oc delete -n openshift-storage pod rook-ceph-osd-prepare-ocs-deviceset-<x>-<y>-<pvc-suffix>-<pod-suffix>
$ oc delete -n openshift-storage pod rook-ceph-osd-prepare-ocs-deviceset-<x>-<y>-<pvc-suffix>-<pod-suffix>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
x
、y
、pvc-suffix
和pod-suffix
是上一步中标识的osd-prepare
pod 名称中的值。输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群中移除旧的 OSD
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>
是
rook-ceph-osd
前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2
。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL
值必须更改为true
,否则在移除 OSD 后恢复所有三个数据副本不足。警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal-job
pod 的状态,验证 OSD 是否已成功移除。状态为
Completed
,确认 OSD 移除作业已成功。pod "rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc" deleted
pod "rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与要替换的 OSD 关联的 PVC。
oc delete -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
$ oc delete -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
x
、y
和pvc-suffix
是前面步骤中标识的DeviceSet
中的值。输出示例:
persistentvolumeclaim "ocs-deviceset-localblock-0-data-0-64xjl" deleted
persistentvolumeclaim "ocs-deviceset-localblock-0-data-0-64xjl" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除与要替换的设备关联的 PV,这已在前面的步骤中识别。在本例中,PV 名称为
local-pv-8137c873
。oc delete pv local-pv-8137c873
$ oc delete pv local-pv-8137c873
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
persistentvolume "local-pv-8137c873" deleted
persistentvolume "local-pv-8137c873" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换旧设备,并使用新设备创建新的 OpenShift Container Platform PV。
使用要替换的设备登录到 OpenShift Container Platform 节点。在本例中,OpenShift Container Platform 节点是
worker-0
。oc debug node/worker-0
$ oc debug node/worker-0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Starting pod/worker-0-debug ... To use host binaries, run `chroot /host` Pod IP: 192.168.88.21 If you don't see a command prompt, try pressing enter. # chroot /host
Starting pod/worker-0-debug ... To use host binaries, run `chroot /host` Pod IP: 192.168.88.21 If you don't see a command prompt, try pressing enter. # chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用前面标识的设备名称
vdc
记录要替换的/dev/disk
。ls -alh /mnt/local-storage/localblock
# ls -alh /mnt/local-storage/localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
total 0 drwxr-xr-x. 2 root root 17 Nov 18 15:23 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 .. lrwxrwxrwx. 1 root root 8 Nov 18 15:23 vdc -> /dev/vdc
total 0 drwxr-xr-x. 2 root root 17 Nov 18 15:23 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 .. lrwxrwxrwx. 1 root root 8 Nov 18 15:23 vdc -> /dev/vdc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找
LocalVolumeSet
CR 的名称,并删除或注释掉要替换的设备/dev/disk
。oc get -n openshift-local-storage localvolumeset
$ oc get -n openshift-local-storage localvolumeset NAME AGE localblock 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用要替换的设备登录到 OpenShift Container Platform 节点,并删除旧的
符号链接
。oc debug node/worker-0
$ oc debug node/worker-0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Starting pod/worker-0-debug ... To use host binaries, run `chroot /host` Pod IP: 192.168.88.21 If you don't see a command prompt, try pressing enter. # chroot /host
Starting pod/worker-0-debug ... To use host binaries, run `chroot /host` Pod IP: 192.168.88.21 If you don't see a command prompt, try pressing enter. # chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定要替换的设备名称的旧
符号链接
。在本例中,设备名称为vdc
。ls -alh /mnt/local-storage/localblock
# ls -alh /mnt/local-storage/localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
total 0 drwxr-xr-x. 2 root root 17 Nov 18 15:23 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 .. lrwxrwxrwx. 1 root root 8 Nov 18 15:23 vdc -> /dev/vdc
total 0 drwxr-xr-x. 2 root root 17 Nov 18 15:23 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 .. lrwxrwxrwx. 1 root root 8 Nov 18 15:23 vdc -> /dev/vdc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
符号链接
。rm /mnt/local-storage/localblock/vdc
# rm /mnt/local-storage/localblock/vdc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否删除了
symlink
。ls -alh /mnt/local-storage/localblock
# ls -alh /mnt/local-storage/localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
total 0 drwxr-xr-x. 2 root root 6 Nov 18 17:11 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 ..
total 0 drwxr-xr-x. 2 root root 6 Nov 18 17:11 . drwxr-xr-x. 3 root root 24 Nov 18 15:23 ..
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要对于 OpenShift Container Storage 4.5 或更高版本的新部署,LVM 不在使用中,
ceph-volume
原始模式则改为在 play 中。因此,不需要额外的验证,您可以继续下一步。
- 使用新设备替换该设备。
重新登录到正确的 OpenShift Cotainer Platform 节点,并确定新驱动器的设备名称。设备名称必须更改,除非您要重新排序同一设备。
lsblk
# lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,新设备名称为
vdd
。-
新
/dev/disk
可用后,localvolumeset 将自动检测到它。 验证是否有新 PV 处于
Available
状态且大小正确。oc get pv | grep 256Gi
$ oc get pv | grep 256Gi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
local-pv-1e31f771 256Gi RWO Delete Bound openshift-storage/ocs-deviceset-localblock-2-data-0-6xhkf localblock 24h local-pv-ec7f2b80 256Gi RWO Delete Bound openshift-storage/ocs-deviceset-localblock-1-data-0-hr2fx localblock 24h local-pv-8137c873 256Gi RWO Delete Available localblock 32m
local-pv-1e31f771 256Gi RWO Delete Bound openshift-storage/ocs-deviceset-localblock-2-data-0-6xhkf localblock 24h local-pv-ec7f2b80 256Gi RWO Delete Bound openshift-storage/ocs-deviceset-localblock-1-data-0-hr2fx localblock 24h local-pv-8137c873 256Gi RWO Delete Available localblock 32m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为新设备创建新 OSD。
通过重启
rook-ceph-operator
来强制 Operator 协调,从而部署新的 OSD。识别
rook-ceph-operator
的名称。oc get -n openshift-storage pod -l app=rook-ceph-operator
$ oc get -n openshift-storage pod -l app=rook-ceph-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-85f6494db4-sg62v 1/1 Running 0 1d20h
NAME READY STATUS RESTARTS AGE rook-ceph-operator-85f6494db4-sg62v 1/1 Running 0 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
rook-ceph-operator
。oc delete -n openshift-storage pod rook-ceph-operator-85f6494db4-sg62v
$ oc delete -n openshift-storage pod rook-ceph-operator-85f6494db4-sg62v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
pod "rook-ceph-operator-85f6494db4-sg62v" deleted
pod "rook-ceph-operator-85f6494db4-sg62v" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,rook-ceph-operator pod 名称为
rook-ceph-operator-85f6494db4-sg62v
。验证
rook-ceph-operator
pod 是否已重启。oc get -n openshift-storage pod -l app=rook-ceph-operator
$ oc get -n openshift-storage pod -l app=rook-ceph-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-85f6494db4-wx9xx 1/1 Running 0 50s
NAME READY STATUS RESTARTS AGE rook-ceph-operator-85f6494db4-wx9xx 1/1 Running 0 50s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在操作器重启后,创建新 OSD 可能需要几分钟时间。
删除
ocs-osd-removal
任务。oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
验证新 OSD 是否正在运行,并且创建了一个新的 PVC。
oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
rook-ceph-osd-0-76d8fb97f9-mn8qz 1/1 Running 0 23m rook-ceph-osd-1-7c99657cfb-jdzvz 1/1 Running 1 25h rook-ceph-osd-2-5f9f6dfb5b-2mnw9 1/1 Running 0 25h
rook-ceph-osd-0-76d8fb97f9-mn8qz 1/1 Running 0 23m rook-ceph-osd-1-7c99657cfb-jdzvz 1/1 Running 1 25h rook-ceph-osd-2-5f9f6dfb5b-2mnw9 1/1 Running 0 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage pvc | grep localblock
$ oc get -n openshift-storage pvc | grep localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
ocs-deviceset-localblock-0-data-0-q4q6b Bound local-pv-8137c873 256Gi RWO localblock 10m ocs-deviceset-localblock-1-data-0-hr2fx Bound local-pv-ec7f2b80 256Gi RWO localblock 1d20h ocs-deviceset-localblock-2-data-0-6xhkf Bound local-pv-1e31f771 256Gi RWO localblock 1d20h
ocs-deviceset-localblock-0-data-0-q4q6b Bound local-pv-8137c873 256Gi RWO localblock 10m ocs-deviceset-localblock-1-data-0-hr2fx Bound local-pv-ec7f2b80 256Gi RWO localblock 1d20h ocs-deviceset-localblock-2-data-0-6xhkf Bound local-pv-1e31f771 256Gi RWO localblock 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 登录 OpenShift Web 控制台并查看存储仪表板。
图 5.2. 在设备替换后,OpenShift Container Platform 存储仪表板中的 OSD 状态
5.4. 在 IBM Z 或 LinuxONE 基础架构中替换操作或失败的存储设备 复制链接链接已复制到粘贴板!
您可以使用新的 SCSI 磁盘替换 IBM Z 或 LinuxONE 基础架构中的操作或失败存储设备。
IBM Z 或 LinuxONE 支持 SCSI FCP 磁盘逻辑单元(SCSI 磁盘)作为来自外部磁盘存储的持久性存储设备。SCSI 磁盘可使用其 FCP 设备号、两个目标全球端口名称(WWPN1 和 WWPN2)以及逻辑单元号(LUN)来识别。如需更多信息,请参阅 https://www.ibm.com/support/knowledgecenter/SSB27U_6.4.0/com.ibm.zvm.v640.hcpa5/scsiover.html
先决条件
确保数据具有弹性。
- 在 OpenShift Web 控制台中,导航到 Storage → Overview。
- 在 Status 卡中的 Persistent Storage 下,确认 Data Resiliency 有一个绿色勾号标记。
流程
使用以下命令列出所有磁盘:
lszdev
$ lszdev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ID
项中,SCSI 磁盘以zfcp-lun
表示,格式是<device-id>:<wwpn>:<lun-id>
。第一个磁盘用于操作系统。如果一个存储设备失败,则可以将其替换为新磁盘。删除磁盘。
在磁盘上运行以下命令,使用要替换的磁盘的 SCSI 磁盘标识符替换
scsi-id
。chzdev -d scsi-id
$ chzdev -d scsi-id
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:以下命令删除设备 ID 为
0.0.8204
、WWPN0x500507630a0b50a4
以及 LUN0x4002403000000000
的一个磁盘:chzdev -d 0.0.8204:0x500407630c0b50a4:0x3002b03000000000
$ chzdev -d 0.0.8204:0x500407630c0b50a4:0x3002b03000000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令附加一个新的 SCSI 磁盘:
chzdev -e 0.0.8204:0x500507630b1b50a4:0x4001302a00000000
$ chzdev -e 0.0.8204:0x500507630b1b50a4:0x4001302a00000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意新磁盘的设备 ID 必须与要替换的磁盘相同。新磁盘通过其 WWPN 和 LUN ID 进行标识。
列出所有 FCP 设备以验证新磁盘是否已配置。
lszdev zfcp-lun
$ lszdev zfcp-lun TYPE ID ON PERS NAMES zfcp-lun 0.0.8204:0x102107630b1b5060:0x4001402900000000 yes no sda sg0 zfcp-lun 0.0.8204:0x500507630b1b50a4:0x4001302a00000000 yes yes sdb sg1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow