5.3. IBM Power Systems で動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え

IBM Power Systems でローカルストレージデバイスを使用してデプロイされた OpenShift Container Storage のオブジェクトストレージデバイス (OSD) を置き換えることができます。基礎となるストレージデバイスを置き換える必要がある場合は、この手順を使用します。

前提条件

  • データに耐久性があることを確認します。

    • OpenShift Web コンソールで、Storage → Overview にナビゲートします。
    • Status カードの Persistent Storage で、Data Resiliency に緑色のチェックマークが付いていることを確認します。

手順

  1. 置き換える必要がある OSD と、その OSD がスケジュールされている OpenShift Container Platform ノードを特定します。

    $ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide

    出力例:

    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 を置き換える必要があり、worker-0 は OSD がスケジュールされる RHOCP ノードです。

    注記

    置き換える OSD が正常である場合、Pod のステータスは Running になります。

  2. 置き換えられる 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_removerook-ceph-osd 接頭辞の直後にくる Pod 名の整数です。この例では、デプロイメント名は rook-ceph-osd-0 です。

    出力例:

    deployment.apps/rook-ceph-osd-0 scaled
  3. rook-ceph-osd Pod が停止していることを確認します。

    $ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}

    出力例:

    No resources found in openshift-storage namespace.
    注記

    rook-ceph-osd Pod が terminating 状態にある場合は、force オプションを使用して Pod を削除します。

    $ oc delete -n openshift-storage pod rook-ceph-osd-0-86bf8cdc8-4nb5t --grace-period=0 --force

    出力例:

    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
  1. 新規 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

      出力例:

      ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl
          ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-64xjl

      この例では、PVC 名は ocs-deviceset-localblock-0-data-0-64xjl です。

    2. 古い ocs-osd-removal ジョブを削除します。

      $ oc delete -n openshift-storage job ocs-osd-removal-job

      出力例:

      job.batch "ocs-osd-removal-job" deleted
    3. openshift-storage プロジェクトを変更します。

      $ oc project openshift-storage
    4. クラスターから以前の OSD を削除します。

      $ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} | oc -n openshift-storage create -f -

      コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます。(例: FAILED_OSD_IDS=0,1,2)

      警告

      この手順により、OSD はクラスターから完全に削除されます。osd_id_to_remove の正しい値が指定されていることを確認します。

  2. ocs-osd-removal Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    $ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    注記

    ocs-osd-removal が失敗し、Pod が予想される Completed の状態にない場合、追加のデバッグのために Pod ログを確認します。以下に例を示します。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
  3. 置き換える OSD に関連付けられた Persistent Volume Claim (永続ボリューム要求、PVC) リソースを削除します。

    1. PVC に関連付けられた PV を特定します。

      $ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>

      ここで、xy、および pvc-suffix は、ステップ 4(a) で特定された DeviceSet の値です。

      出力例:

      NAME                      STATUS        VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      ocs-deviceset-localblock-0-data-0-64xjl   Bound    local-pv-8137c873    256Gi      RWO     localblock     24h

      この例では、関連付けられた PV は local-pv-8137c873 です。

    2. 置き換えるデバイスの名前を特定します。

      $ oc get pv local-pv-<pv-suffix> -o yaml | grep path

      ここで、pv-suffix は、前のステップで特定された PV 名の値です。

      出力例:

      path: /mnt/local-storage/localblock/vdc

      この例では、デバイス名は vdc です。

    3. 置き換える OSD に関連付けられた prepare-pod を特定します。

      $ oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Mounted

      ここで、xy、および pvc-suffix は、直前の手順で特定された DeviceSet の値です。

      出力例:

      Mounted By:    rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc

      この例では、prepare-pod の名前は rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc です。

    4. 関連付けられた PVC を削除する前に osd-prepare Pod を削除します。

      $ oc delete -n openshift-storage pod rook-ceph-osd-prepare-ocs-deviceset-<x>-<y>-<pvc-suffix>-<pod-suffix>

      ここで、xypvc-suffix、および pod-suffix は、直前の手順で特定された osd-prepare Pod 名の値です。

      出力例:

      job.batch "ocs-osd-removal-job" deleted
    5. openshift-storage プロジェクトを変更します。

      $ oc project openshift-storage
    6. クラスターから以前の 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 -
      <failed_osd_id>

      rook-ceph-osd 接頭辞の直後の Pod 名の整数です。コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます (例: FAILED_OSD_IDS=0,1,2)

      OSD が 3 つしかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するにはスペースが不十分なクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。

      警告

      この手順により、OSD はクラスターから完全に削除されます。osd_id_to_remove の正しい値が指定されていることを確認します。

  4. ocs-osd-removal-job Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。

    Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    pod "rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc" deleted
    1. 置き換える OSD に関連付けられた PVC を削除します。

      $ oc delete -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>

      ここで、xy、および pvc-suffix は、直前の手順で特定された DeviceSet の値です。

      出力例:

      persistentvolumeclaim "ocs-deviceset-localblock-0-data-0-64xjl" deleted
  5. 先の手順で特定された、置き換えるデバイスに関連付けられた PV を削除します。この例では、PV 名は local-pv-8137c873 です。

    $ oc delete pv local-pv-8137c873

    出力例:

    persistentvolume "local-pv-8137c873" deleted
  6. 古いデバイスを置き換え、新規デバイスを使用して新規の OpenShift Container Platform PV を作成します。

    1. 置き換えるデバイスで OpenShift Container Platform ノードにログインします。この例では、OpenShift Container Platform ノードは worker-0 です。

      $ oc debug node/worker-0

      出力例:

      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
    2. 先に特定したデバイス名 vdc を使用して置き換える /dev/disk の内容を記録します。

      # ls -alh /mnt/local-storage/localblock

      出力例:

      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
    3. LocalVolumeSet CR の名前を見つけ、置き換えるデバイス /dev/disk を削除またはコメントアウトします。

      $ oc get -n openshift-local-storage localvolumeset
      NAME          AGE
      localblock   25h
  7. 置き換えるデバイスで OpenShift Container Platform ノードにログインし、古い symlink を削除します。

    $ oc debug node/worker-0

    出力例:

    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
    1. 置き換えるデバイス名の古い symlink を特定します。この例では、デバイス名は vdc です。

      # ls -alh /mnt/local-storage/localblock

      出力例:

      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
    2. symlink を削除します。

      # rm /mnt/local-storage/localblock/vdc
    3. symlink が削除されていることを確認します。

      # ls -alh /mnt/local-storage/localblock

      出力例:

      total 0
      drwxr-xr-x. 2 root root 6 Nov 18 17:11 .
      drwxr-xr-x. 3 root root 24 Nov 18 15:23 ..
      重要

      OpenShift Container Storage 4.5 以降の新規デプロイメントでは、LVM が使用されていないため、ceph-volume raw モードが動作します。そのため、追加の検証は不要であり、次のステップに進むことができます。

  8. デバイスを新しいデバイスに置き換えます。
  9. 正しい OpenShift Container Platform ノードにログインし、新規ドライブのデバイス名を特定します。同じデバイスを使用しない限り、デバイス名は変更する必要があります。

    # lsblk

    出力例:

    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

    この例では、新しいデバイス名は vdd です。

  10. 新しい /dev/disk が利用可能になると、localvolumeset によって自動検出されます。
  11. 新規 PV が Available 状態にあり、正しいサイズであることを確認します。

    $ oc get pv | grep 256Gi

    出力例:

    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
  12. 新規デバイス用に新規 OSD を作成します。

    1. rook-ceph-operator を再起動して Operator の調整を強制的に実行して新規 OSD をデプロイします。

      1. rook-ceph-operator の名前を特定します。

        $ oc get -n openshift-storage pod -l app=rook-ceph-operator

        出力例:

        NAME                                  READY   STATUS    RESTARTS   AGE
        rook-ceph-operator-85f6494db4-sg62v   1/1     Running   0          1d20h
      2. rook-ceph-operator を削除します。

        $ oc delete -n openshift-storage pod rook-ceph-operator-85f6494db4-sg62v

        出力例:

        pod "rook-ceph-operator-85f6494db4-sg62v" deleted

        この例では、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

        出力例:

        NAME                                  READY   STATUS    RESTARTS   AGE
        rook-ceph-operator-85f6494db4-wx9xx   1/1     Running   0          50s

        新規 OSD の作成には、Operator が再起動するまでに数分かかる場合があります。

  13. ocs-osd-removal ジョブを削除します。

    $ oc delete -n openshift-storage job ocs-osd-removal-job

    出力例:

    job.batch "ocs-osd-removal-job" deleted

検証手順

  • 新しい OSD が実行されており、新規 PVC が作成されていることを確認します。

    $ oc get -n openshift-storage pods -l app=rook-ceph-osd

    出力例:

    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
    $ oc get -n openshift-storage pvc | grep localblock

    出力例:

    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
  • OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。

    図5.2 デバイスの置き換え後の OpenShift Container Platform ストレージダッシュボードの OSD ステータス

    RHOCP storage dashboard showing the healthy OSD.