第 6 章 使用本地存储设备部署的 OpenShift Data Foundation


您可以使用以下基础架构中的本地存储设备替换 OpenShift Data Foundation 中部署的对象存储设备(OSD):

  • 裸机
  • VMware
  • Red Hat Virtualization
注意

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

先决条件

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

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

流程

  1. 从相关的 worker 节点中删除底层存储设备。
  2. 验证相关的 OSD Pod 已移到 CrashLoopBackOff 状态。

    确定需要替换的 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-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 Toggle word wrap

    在本例中,rook-ceph-osd-0-6d77d6c7c6-m8xj6 需要替换,compute-2 是调度 OSD 的 OpenShift Container Platform 节点。

  3. 缩减 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
  4. 验证 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-6d77d6c7c6-m8xj6 --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-6d77d6c7c6-m8xj6" force deleted
    Copy to Clipboard Toggle word wrap
  5. 从集群中移除旧 OSD,以便您可以添加新 OSD。

    1. 删除所有旧的 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
    2. 进入 openshift-storage 项目。

      $ oc project openshift-storage
      Copy to Clipboard Toggle word wrap
    3. 从集群中移除旧 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 的正确值。

  6. 通过检查 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
  7. 确保 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
  8. 如果在安装时启用了加密,在从相应 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-name>
        Copy to Clipboard Toggle word wrap
        <ocs-deviceset-name>

        是基于上一步中标识的 PVC 名称的相关设备名称。

        重要

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

        • 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
  9. 查找需要删除的持久性卷(PV)。

    $ oc get pv -L kubernetes.io/hostname | grep <storageclass-name> | 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
  10. 删除 PV。

    $ oc delete pv <pv_name>
    Copy to Clipboard Toggle word wrap
  11. 向节点物理地添加新设备。
  12. 跟踪与 deviceInclusionSpec 匹配的设备的 PV 置备。置备 PV 可能需要几分钟时间。

    $ oc -n openshift-local-storage describe localvolumeset <lvs-name>
    Copy to Clipboard Toggle word wrap

    输出示例:

    [...]
    Status:
      Conditions:
        Last Transition Time:          2020-11-17T05:03:32Z
        Message:                       DiskMaker: Available, LocalProvisioner: Available
        Status:                        True
        Type:                          DaemonSetsAvailable
        Last Transition Time:          2020-11-17T05:03:34Z
        Message:                       Operator reconciled successfully.
        Status:                        True
        Type:                          Available
      Observed Generation:             1
      Total Provisioned Device Count: 4
    Events:
    Type    Reason      Age          From                Message
    ----    ------      ----         ----                -------
    Normal  Discovered  2m30s (x4    localvolumeset-     node.example.com -
            NewDevice   over 2m30s)  symlink-controller  found possible
                                                         matching disk,
                                                         waiting 1m to claim
    
    Normal  FoundMatch  89s (x4      localvolumeset-     node.example.com -
            ingDisk     over 89s)    symlink-controller  symlinking matching
                                                         disk
    Copy to Clipboard Toggle word wrap

    调配 PV 后,为 PV 自动创建新的 OSD pod。

  13. 删除 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-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 Toggle word wrap
    重要

    如果新 OSD 在几分钟后没有显示 Running,请重启 rook-ceph-operator pod 来强制协调。

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

    输出示例:

    pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
    Copy to Clipboard Toggle word wrap
  2. 验证是否创建了新 PVC。

    $ oc get -n openshift-storage pvc | grep <lvs-name>
    Copy to Clipboard Toggle word wrap

    输出示例:

    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 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 控制台,再检查存储控制面板上的 OSD 状态。
注意

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat