Menu Close

デバイスの置き換え

Red Hat OpenShift Container Storage 4.7

稼働中のデバイスまたは障害のあるデバイスを安全に置き換える手順

概要

本書では、Red Hat OpenShift Container Storage のストレージデバイスを安全に置き換える方法について説明します。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の CTO、Chris Wright のメッセージ を参照してください。

Red Hat ドキュメントへのフィードバック (英語のみ)

弊社のドキュメントについてのご意見をお聞かせください。ドキュメントの改善点があれば、ぜひお知らせください。フィードバックをお寄せいただくには、以下をご確認ください。

  • 特定の部分についての簡単なコメントをお寄せいただく場合は、以下をご確認ください。

    1. ドキュメントの表示が Multi-page HTML 形式になっていて、ドキュメントの右上端に Feedback ボタンがあることを確認してください。
    2. マウスカーソルで、コメントを追加する部分を強調表示します。
    3. そのテキストの下に表示される Add Feedback ポップアップをクリックします。
    4. 表示される手順に従ってください。
  • より詳細なフィードバックを行う場合は、Bugzilla のチケットを作成します。

    1. Bugzilla の Web サイトに移動します。
    2. Component で Documentation を選択します。
    3. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも記入してください。
    4. Submit Bug をクリックします。

はじめに

デプロイメントのタイプに応じて、以下のいずれかの手順を選択してストレージノードを置き換えることができます。

注記

OpenShift Container Storage は異なる OSD サイズをサポートしません。

第1章 AWS への OpenShift Container Storage の動的プロビジョニング

1.1. AWS のユーザーによってプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え

AWA のユーザーによってプロビジョニングされるインフラストラクチャーの動的に作成されたストレージクラスターのデバイスを置き換える必要がある場合は、ストレージノードを置き換える必要があります。ノードを置き換える方法は、以下を参照してください。

1.2. AWS のインストーラーでプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え

AWA のインストーラーでプロビジョニングされるインフラストラクチャーの動的に作成されたストレージクラスターのデバイスを置き換える必要がある場合は、ストレージノードを置き換える必要があります。ノードを置き換える方法は、以下を参照してください。

第2章 VMware への OpenShift Container Storage の動的プロビジョニング

2.1. VMwareインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え

この手順は、VMware インフラストラクチャーに動的にデプロイされる OpenShift Container Storage で 1 つまたは複数の仮想マシンディスク (VMDK) を置き換える必要がある場合に使用します。この手順は、新規ボリュームで新規の Persistent Volume Claim(永続ボリューム要求、PVC)を作成し、古いオブジェクトストレージデバイス (OSD) を削除するのに役立ちます。

手順

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

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

    出力例:

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

    注記

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

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

    出力例:

    deployment.extensions/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.
    注記

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

    $ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0

    出力例:

    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
  4. 新規 OSD を追加できるようにクラスターから古い OSD を削除します。

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

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

      出力例:

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

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

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

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

      警告

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

  5. 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'
  6. 暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Container Storage ノードから削除された 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’

      以下は例になります。

      2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
    2. 手順 #1 で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、ストレージノードのホストに対して chroot を作成します。

        $ oc debug node/<node name>
        $ chroot /host
      2. 直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。

        sh-4.4# dmsetup ls| grep <pvc name>
        ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
      3. マップ済みデバイスを削除します。

        $ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
        注記

        権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。

        • CTRL+Z を押して上記のコマンドを終了します。
        • スタックしたプロセスの PID を検索します。

          $ ps -ef | grep crypt
        • kill コマンドを使用してプロセスを終了します。

          $ kill -9 <PID>
        • デバイス名が削除されていることを確認します。

          $ dmsetup ls
  7. ocs-osd-removal ジョブを削除します。

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

    出力例:

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

データ暗号化で外部の鍵管理システム (KMS) を使用する場合は、古い OSD 暗号化キーは孤立したキーであるために Vault サーバーから削除できます。

検証手順

  1. 新しい OSD が実行されていることを確認します。

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

    出力例:

    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
  2. Bound 状態の新しい PVC が作成されていることを確認します。

    $ oc get -n openshift-storage pvc

    出力例:

    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
  3. (オプション) クラスターでクラスター全体の暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。

    1. 新規 OSD Pod が実行しているノードを特定します。

      $ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>

      以下は例になります。

      oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
    2. 直前の手順で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。

        $ oc debug node/<node name>
        $ chroot /host
      2. 「lsblk」を実行し、ocs-deviceset 名の横にある「crypt」キーワードを確認します。

        $ lsblk
  4. OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。

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

    RHOCP storage dashboard showing the healthy OSD.

第3章 Red Hat Virtualization への OpenShift Container Storage の動的プロビジョニング

3.1. Red Hat Virtualization のインストーラーでプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え

この手順は、Red Hat Virtualization インフラストラクチャーにデプロイされる OpenShift Container Storage で 1 つまたは複数の仮想マシンディスク (VMDK) を置き換える必要がある場合に使用します。この手順は、新規ボリュームで新規の Persistent Volume Claim(永続ボリューム要求、PVC)を作成し、古いオブジェクトストレージデバイス (OSD) を削除するのに役立ちます。

手順

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

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

    出力例:

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

    注記

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

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

    出力例:

    deployment.extensions/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.
    注記

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

    $ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0

    出力例:

    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
  4. 新規 OSD を追加できるようにクラスターから古い OSD を削除します。

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

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

      出力例:

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

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

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

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

      警告

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

  5. 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'
  6. 暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Container Storage ノードから削除された 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’

      以下は例になります。

      2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
    2. 手順 #1 で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、ストレージノードのホストに対して chroot を作成します。

        $ oc debug node/<node name>
        $ chroot /host
      2. 直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。

        sh-4.4# dmsetup ls| grep <pvc name>
        ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
      3. マップ済みデバイスを削除します。

        $ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
        注記

        権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。

        • CTRL+Z を押して上記のコマンドを終了します。
        • スタックしたプロセスの PID を検索します。

          $ ps -ef | grep crypt
        • kill コマンドを使用してプロセスを終了します。

          $ kill -9 <PID>
        • デバイス名が削除されていることを確認します。

          $ dmsetup ls
  7. ocs-osd-removal ジョブを削除します。

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

    出力例:

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

データ暗号化で外部の鍵管理システム (KMS) を使用する場合は、古い OSD 暗号化キーは孤立したキーであるために Vault サーバーから削除できます。

検証手順

  1. 新しい OSD が実行されていることを確認します。

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

    出力例:

    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
  2. Bound 状態の新しい PVC が作成されていることを確認します。

    $ oc get -n openshift-storage pvc
  3. (オプション) クラスターでクラスター全体の暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。

    1. 新規 OSD Pod が実行しているノードを特定します。

      $ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>

      以下は例になります。

      oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
    2. 直前の手順で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。

        $ oc debug node/<node name>
        $ chroot /host
      2. 「lsblk」を実行し、ocs-deviceset 名の横にある「crypt」キーワードを確認します。

        $ lsblk
  4. OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。

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

    RHOCP storage dashboard showing the healthy OSD.

第4章 Microsoft Azure への OpenShift Container Storage の動的プロビジョニング

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

基盤のストレージデバイスを 1 つまたは複数置き換える必要がある場合は、この手順を使用します。

前提条件

手順

  1. 関連するワーカーノードから基礎となるストレージデバイスを削除します。
  2. 関連する OSD Pod が CrashLoopBackOff 状態になったことを確認します。

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

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

    出力例:

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

  3. 置き換えられる 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.extensions/rook-ceph-osd-0 scaled
  4. 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-6d77d6c7c6-m8xj6 --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-6d77d6c7c6-m8xj6" force deleted
  5. 新規 OSD を追加できるようにクラスターから古い OSD を削除します。

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

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

      出力例:

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

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

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

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

      警告

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

  6. 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
  7. 暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Container Storage ノードから削除された 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’

      以下は例になります。

      2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
    2. 手順 #1 で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、ストレージノードのホストに対して chroot を作成します。

        $ oc debug node/<node name>
        $ chroot /host
      2. 直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。

        sh-4.4# dmsetup ls| grep <pvc name>
        ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
      3. マップ済みデバイスを削除します。

        $ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
        注記

        権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。

        • CTRL+Z を押して上記のコマンドを終了します。
        • スタックしたプロセスの PID を検索します。

          $ ps -ef | grep crypt
        • kill コマンドを使用してプロセスを終了します。

          $ kill -9 <PID>
        • デバイス名が削除されていることを確認します。

          $ dmsetup ls
  8. コマンドで削除する必要のある永続ボリューム (PV) を検索します。

    $ 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
  9. 永続ボリュームを削除します。

    $ oc delete pv local-pv-d6bf175b
  10. 物理的に新規デバイスをノードに追加します。
  11. 以下のコマンドを使用して、deviceInclusionSpec に一致するデバイスの永続ボリュームのプロビジョニングを追跡します。永続ボリュームをプロビジョニングするのに数分かかる場合があります。

    $ oc -n openshift-local-storage describe localvolumeset localblock

    出力例:

    [...]
    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

    永続ボリュームがプロビジョニングされると、新しい OSD Pod がプロビジョニングボリューム用に自動作成されます。

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

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

    出力例:

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

データ暗号化で外部の鍵管理システム (KMS) を使用する場合は、古い OSD 暗号化キーは孤立したキーであるために Vault サーバーから削除できます。

検証手順

  1. 新しい OSD が実行されていることを確認します。

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

    出力例:

    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
    注記

    数分後に新規 OSD が Running と表示されない場合は、rook-ceph-operator Pod を再起動して強制的に調整を行います。

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

    出力例:

    pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
  2. 新規 PVC が作成されていることを確認します。

    $ oc get -n openshift-storage pvc | grep localblock

    出力例:

    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
  3. (オプション) クラスターでクラスター全体の暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。

    1. 新規 OSD Pod が実行しているノードを特定します。

      $ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>

      以下は例になります。

      oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
    2. 直前の手順で特定されたノードごとに、以下を実行します。

      1. デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。

        $ oc debug node/<node name>
        $ chroot /host
      2. 「lsblk」を実行し、ocs-deviceset 名の横にある「crypt」キーワードを確認します。

        $ lsblk
  4. OpenShift Web コンソールにログインし、ストレージダッシュボードで OSD のステータスを確認します。

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

    RHOCP storage dashboard showing the healthy OSD.
注記

データの完全復旧には、復元されるデータ量により、時間がかかる場合があります。

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

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

手順

  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 名の値です。

      出力例:

      pod "rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc" deleted
    5. 置き換える 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
  4. 先の手順で特定された、置き換えるデバイスに関連付けられた PV を削除します。この例では、PV 名は local-pv-8137c873 です。

    $ oc delete pv local-pv-8137c873

    出力例:

    persistentvolume "local-pv-8137c873" deleted
  5. 古いデバイスを置き換え、新規デバイスを使用して新規の 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
  6. 置き換えるデバイスで 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 モードが動作します。そのため、追加の検証は不要であり、次のステップに進むことができます。

  7. デバイスを新しいデバイスに置き換えます。
  8. 正しい 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 です。

  9. 新しい /dev/disk が利用可能になると、localvolumeset によって自動検出されます。
  10. 新規 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
  11. 新規デバイス用に新規 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 が再起動するまでに数分かかる場合があります。

  12. 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.

5.4. IBM Z または LinuxONE インフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え

IBM Z または LinuxONE インフラストラクチャーの動作するストレージデバイスまたは障害のあるストレージデバイスを、新規 SCSI ディスクに置き換えることができます。

IBM Z または LinuxONE は、外部ディスクストレージからの永続ストレージとして SCSI FCP ディスク論理ユニット (SCSI ディスク) に対応します。SCSI ディスクは、FCP デバイス番号、2 つのターゲットのワールドワイドポート名 (WWPN1 および WWPN2) と、論理ユニット番号 (LUN) を使用して識別できます。詳細は、次を参照してください。https://www.ibm.com/support/knowledgecenter/SSB27U_6.4.0/com.ibm.zvm.v640.hcpa5/scsiover.html

手順

  1. 以下のコマンドを使用してすべてのディスクを一覧表示します。

    $ lszdev

    出力例:

    TYPE         ID
    zfcp-host    0.0.8204                                        yes  yes
    zfcp-lun     0.0.8204:0x102107630b1b5060:0x4001402900000000 yes  no    sda sg0
    zfcp-lun     0.0.8204:0x500407630c0b50a4:0x3002b03000000000  yes  yes   sdb sg1
    qeth         0.0.bdd0:0.0.bdd1:0.0.bdd2                      yes  no    encbdd0
    generic-ccw  0.0.0009                                        yes  no

    SCSI ディスクは、ID セクションの <device-id>:<wwpn>:<lun-id> 構造で zfcp-lun として表されます。最初のディスクはオペレーティングシステムに使用されます。1 つのストレージデバイスに障害が発生した場合は、これを新しいディスクに置き換えることができます。

  2. ディスクを削除します。

    ディスクで以下のコマンドを実行し、scsi-id を、置き換えるディスクの SCSI ディスク識別子に置き換えます。

    $ chzdev -d scsi-id

    たとえば、以下のコマンドはデバイス ID 0.0.8204、WWPN 0x500507630a0b50a4、および LUN 0x4002403000000000 のディスクを 1 つ削除します。

    $ chzdev -d 0.0.8204:0x500407630c0b50a4:0x3002b03000000000
  3. 以下のコマンドを使用して新規 SCSI ディスクを追加します。

    $ chzdev -e 0.0.8204:0x500507630b1b50a4:0x4001302a00000000
    注記

    新規ディスクのデバイス ID は、置き換えるディスクと同じである必要があります。新規ディスクは、WWPN および LUN ID で識別されます。

  4. すべての FCP デバイスを一覧表示して、新規ディスクが設定されていることを確認します。

    $ 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