5.2. 替换 IBM Power 上的正常工作或失败的存储设备


您可以使用 IBM Power 上的本地存储设备替换 OpenShift Data Foundation 中部署的对象存储设备(OSD)。

注意

可能需要替换一个或多个底层存储设备。

先决条件

  • 红帽建议为替换设备配置类似的基础架构和资源,以用于被替换的设备。
  • 确保数据具有弹性。

    • 在 OpenShift Web 控制台中,点 Storage Data Foundation
    • Storage Systems 选项卡,然后点 ocs-storagecluster-storagesystem
    • Block and File 仪表板的 Status 卡中,在 Overview 选项卡中,验证 Data Resiliency 是否具有绿色勾号。

流程

  1. 确定需要替换的 OSD,以及在其上调度 OSD 的 OpenShift Container Platform 节点。

    $ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap

    在本例中,需要替换 rook-ceph-osd-0-86bf8cdc8-4nb5tworker-0 是调度 OSD 的 RHOCP 节点。

    注意

    如果要替换的 OSD 处于健康状态,pod 的状态为 Running

  2. 缩减 OSD 部署,以替换 OSD。

    $ osd_id_to_remove=0
    Copy to Clipboard Toggle word wrap
    $ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
    Copy to Clipboard Toggle word wrap

    其中,osd_id_to_remove 是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。在本例中,部署名称为 rook-ceph-osd-0

    输出示例:

    deployment.extensions/rook-ceph-osd-0 scaled
    Copy to Clipboard Toggle word wrap
  3. 验证 rook-ceph-osd pod 是否已终止。

    $ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
    Copy to Clipboard Toggle word wrap

    输出示例:

    No resources found in openshift-storage namespace.
    Copy to Clipboard Toggle word wrap
    重要

    如果 rook-ceph-osd pod 处于 terminating 状态超过几分钟,请使用 force 选项删除 pod。

    $ oc delete -n openshift-storage pod rook-ceph-osd-0-86bf8cdc8-4nb5t --grace-period=0 --force
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap
  4. 从集群中移除旧 OSD,以便您可以添加新 OSD。

    1. 识别与要替换的 OSD 关联的 DeviceSet

      $ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
      Copy to Clipboard Toggle word wrap

      输出示例:

      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 Toggle word wrap

      在本例中,持久性卷声明(PVC)名称是 ocs-deviceset-localblock-0-data-0-64xjl

    2. 识别与 PVC 关联的持久性卷(PV)。

      $ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
      Copy to Clipboard Toggle word wrap

      其中 xypvc-suffix 是前面步骤中标识的 DeviceSet 中的值。

      输出示例:

      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 Toggle word wrap

      在本例中,关联的 PV 是 local-pv-8137c873

    3. 确定要替换的设备的名称。

      $ oc get pv local-pv-<pv-suffix> -o yaml | grep path
      Copy to Clipboard Toggle word wrap

      其中,pv-suffix 是前面步骤中标识的 PV 名称中的值。

      输出示例:

      path: /mnt/local-storage/localblock/vdc
      Copy to Clipboard Toggle word wrap

      在本例中,设备名称为 vdc

    4. 找到与要被替换的 OSD 关联的 prepare-pod

      $ oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Used
      Copy to Clipboard Toggle word wrap

      其中 xypvc-suffix 是前面步骤中标识的 DeviceSet 中的值。

      输出示例:

      Used By:    rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc
      Copy to Clipboard Toggle word wrap

      在本例中,prepare-pod 名称为 rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc

    5. 删除所有旧的 ocs-osd-removal 任务。

      $ oc delete -n openshift-storage job ocs-osd-removal-job
      Copy to Clipboard Toggle word wrap

      输出示例:

      job.batch "ocs-osd-removal-job" deleted
      Copy to Clipboard Toggle word wrap
      注意

      以上命令必须达到 Completed 状态,然后继续下一步。这可能需要超过十分钟。

    6. 更改到 openshift-storage 项目。

      $ oc project openshift-storage
      Copy to Clipboard Toggle word wrap
    7. 从集群中移除旧 OSD。

      $ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} FORCE_OSD_REMOVAL=false |oc create -n openshift-storage -f -
      Copy to Clipboard Toggle word wrap

      FORCE_OSD_REMOVAL 值必须在有三个 OSD 的集群中更改为"true",或者有足够空间的集群在移除 OSD 后恢复所有这三个数据副本。

      警告

      这一步会导致 OSD 完全从集群中移除。确保提供了 osd_id_to_remove 的正确值。

  5. 通过检查 ocs-osd-removal-job pod 的状态,验证 OSD 是否已成功移除。

    状态为 Completed,确认 OSD 移除作业已成功。

    $ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    Copy to Clipboard Toggle word wrap
  6. 确保 OSD 移除已完成。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    Copy to Clipboard Toggle word wrap

    输出示例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    Copy to Clipboard Toggle word wrap
    重要

    如果 ocs-osd-removal-job 失败并且 pod 不在预期的 Completed 状态,请检查 pod 日志来进一步调试。

    例如:

    # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
    Copy to Clipboard Toggle word wrap
  7. 如果在安装时启用了加密,请从从相应 OpenShift Data Foundation 节点中删除的 OSD 中删除 dm-crypt 管理的 device-mapper 映射。

    1. 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’
      Copy to Clipboard Toggle word wrap

      输出示例:

      2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
      Copy to Clipboard Toggle word wrap
    2. 对于之前标识的每个节点,执行以下操作:

      1. 创建 debug pod 和 chroot 到存储节点上的主机。

        $ oc debug node/<node name>
        Copy to Clipboard Toggle word wrap
        <node name>

        是节点的名称。

        $ chroot /host
        Copy to Clipboard Toggle word wrap
      2. 根据上一步中标识的 PVC 名称,查找相关的设备名称。

        $ dmsetup ls| grep <pvc name>
        Copy to Clipboard Toggle word wrap
        <pvc name>

        是 PVC 的名称。

        输出示例:

        ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
        Copy to Clipboard Toggle word wrap
      3. 删除映射的设备。

        $ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
        Copy to Clipboard Toggle word wrap
        重要

        如果上述命令因为权限不足而卡住,请运行以下命令:

        • CTRL+Z 退出上述命令。
        • 查找阻塞的进程的 PID。

          $ ps -ef | grep crypt
          Copy to Clipboard Toggle word wrap
        • 使用 kill 命令终止进程。

          $ kill -9 <PID>
          Copy to Clipboard Toggle word wrap
          <PID>
          是进程 ID。
        • 验证设备名称是否已移除。

          $ dmsetup ls
          Copy to Clipboard Toggle word wrap
  8. 查找需要删除的 PV。

    $ oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    Copy to Clipboard Toggle word wrap

    输出示例:

    local-pv-d6bf175b           1490Gi       RWO         Delete          Released            openshift-storage/ocs-deviceset-0-data-0-6c5pw      localblock      2d22h       compute-1
    Copy to Clipboard Toggle word wrap
  9. 删除 PV。

    $ oc delete pv <pv-name>
    Copy to Clipboard Toggle word wrap
    <pv-name>
    是 PV 的名称。
  10. 替换旧设备,并使用新设备创建新的 OpenShift Container Platform PV。

    1. 使用要替换的设备登录到 OpenShift Container Platform 节点。在本例中,OpenShift Container Platform 节点是 worker-0

      $ oc debug node/worker-0
      Copy to Clipboard Toggle word wrap

      输出示例:

      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 Toggle word wrap
    2. 使用前面标识的设备名称 vdc 记录要替换的 /dev/disk

      # ls -alh /mnt/local-storage/localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      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 Toggle word wrap
    3. 查找 LocalVolume CR 的名称,并删除或注释掉要替换的设备 /dev/disk

      $ oc get -n openshift-local-storage localvolume
      Copy to Clipboard Toggle word wrap

      输出示例:

      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
      # oc edit -n openshift-local-storage localvolume localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
          storageClassDevices:
          - devicePaths:
         #   - /dev/vdc
            storageClassName: localblock
            volumeMode: Block
      [...]
      Copy to Clipboard Toggle word wrap

      确保在编辑 CR 后保存更改。

  11. 使用要替换的设备登录到 OpenShift Container Platform 节点,并删除旧的符号链接

    $ oc debug node/worker-0
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap
    1. 确定要替换的设备名称的旧 符号链接。在本例中,设备名称为 vdc

      # ls -alh /mnt/local-storage/localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      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 Toggle word wrap
    2. 删除 符号链接

      # rm /mnt/local-storage/localblock/vdc
      Copy to Clipboard Toggle word wrap
    3. 验证是否删除了 symlink

      # ls -alh /mnt/local-storage/localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      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 Toggle word wrap
  12. 使用新设备替换旧设备。
  13. 重新登录到正确的 OpenShift Cotainer Platform 节点,并确定新驱动器的设备名称。设备名称必须更改,除非您要重置同一设备。

    # lsblk
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    vda                          252:0    0   40G  0 disk
    |-vda1                       252:1    0    4M  0 part
    |-vda2                       252:2    0  384M  0 part /boot
    `-vda4                       252:4    0 39.6G  0 part
      `-coreos-luks-root-nocrypt 253:0    0 39.6G  0 dm   /sysroot
    vdb                          252:16   0  512B  1 disk
    vdd                          252:32   0  256G  0 disk
    Copy to Clipboard Toggle word wrap

    在这个示例中,新设备名称为 vdd

  14. 在新的 /dev/disk 可用后,您可以向 LocalVolume CR 添加新磁盘条目。

    1. 编辑 LocalVolume CR 并添加新 /dev/disk

      在本例中,新设备为 /dev/vdd

      # oc edit -n openshift-local-storage localvolume localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
          storageClassDevices:
          - devicePaths:
          #  - /dev/vdc
            - /dev/vdd
            storageClassName: localblock
            volumeMode: Block
      [...]
      Copy to Clipboard Toggle word wrap

      确保在编辑 CR 后保存更改。

  15. 验证是否有新 PV 处于 Available 状态且大小正确。

    $ oc get pv | grep 256Gi
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap
  16. 为新设备创建一个新 OSD。

    部署新的 OSD。您需要重启 rook-ceph-operator 来强制协调 Operator。

    1. 识别 rook-ceph-operator 的名称。

      $ oc get -n openshift-storage pod -l app=rook-ceph-operator
      Copy to Clipboard Toggle word wrap

      输出示例:

      NAME                                  READY   STATUS    RESTARTS   AGE
      rook-ceph-operator-85f6494db4-sg62v   1/1     Running   0          1d20h
      Copy to Clipboard Toggle word wrap
    2. 删除 rook-ceph-operator

      $ oc delete -n openshift-storage pod rook-ceph-operator-85f6494db4-sg62v
      Copy to Clipboard Toggle word wrap

      输出示例:

      pod "rook-ceph-operator-85f6494db4-sg62v" deleted
      Copy to Clipboard Toggle word wrap

      在本例中,rook-ceph-operator pod 名称为 rook-ceph-operator-85f6494db4-sg62v

    3. 验证 rook-ceph-operator pod 是否已重启。

      $ oc get -n openshift-storage pod -l app=rook-ceph-operator
      Copy to Clipboard Toggle word wrap

      输出示例:

      NAME                                  READY   STATUS    RESTARTS   AGE
      rook-ceph-operator-85f6494db4-wx9xx   1/1     Running   0          50s
      Copy to Clipboard Toggle word wrap

      在操作器重启后,创建新 OSD 可能需要几分钟时间。

  17. 删除 ocs-osd-removal 任务。

    $ oc delete -n openshift-storage job ocs-osd-removal-job
    Copy to Clipboard Toggle word wrap

    输出示例:

    job.batch "ocs-osd-removal-job" deleted
    Copy to Clipboard Toggle word wrap
注意

使用带有数据加密的外部密钥管理系统(KMS)时,可以从 Vault 服务器中删除旧的 OSD 加密密钥,因为它现在是孤立的密钥。

验证步骤

  1. 验证是否有新的 OSD 正在运行。

    $ oc get -n openshift-storage pods -l app=rook-ceph-osd
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap
  2. 验证是否创建了新 PVC。

    $ oc get -n openshift-storage pvc | grep localblock
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 Toggle word wrap
  3. 可选:如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。

    1. 识别运行新 OSD pod 的节点。

      $ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/<OSD-pod-name>
      Copy to Clipboard Toggle word wrap
      <OSD-pod-name>

      是 OSD pod 的名称。

      例如:

      $ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
      Copy to Clipboard Toggle word wrap

      输出示例:

      NODE
      compute-1
      Copy to Clipboard Toggle word wrap
    2. 对于之前标识的每个节点,执行以下操作:

      1. 创建调试 pod,并为所选主机打开 chroot 环境。

        $ oc debug node/<node name>
        Copy to Clipboard Toggle word wrap
        <node name>

        是节点的名称。

        $ chroot /host
        Copy to Clipboard Toggle word wrap
      2. 检查 ocs-deviceset 名称旁边的 crypt 关键字。

        $ lsblk
        Copy to Clipboard Toggle word wrap
  4. 登录 OpenShift Web 控制台,并在存储下的 OpenShift Data Foundation 控制面板中检查状态卡。
注意

根据正在恢复的数据量,完整数据恢复可能需要更长的时间。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat