デバイスの置き換え

Red Hat OpenShift Container Storage 4.6

障害のあるデバイスを安全に置き換える手順

概要

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

はじめに

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

注記

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_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-${osd_id_to_remove}

      出力例:

      job.batch "ocs-osd-removal-0" 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 はクラスターから完全に削除されます。osd_id_to_remove の正しい値が指定されていることを確認します。

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

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

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

    # oc logs -l job-name=ocs-osd-removal-${osd_id_to_remove} -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-${osd_id_to_remove}

    出力例:

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

検証手順

  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章 Microsoft Azure への OpenShift Container Storage の動的プロビジョニング

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

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

第4章 ローカルストレージデバイスを使用した OpenShift Container Storage のデプロイ

4.1. Amazon EC2 インフラストラクチャーでの障害のあるストレージノードの置き換え

Amazon EC2(ストレージ最適化 I3)インフラストラクチャーのストレージデバイスを置き換える必要がある場合は、ストレージノードを置き換える必要があります。ノードを置き換える方法については、「Amazon EC2 インフラストラクチャーでの障害のあるストレージノードの置き換え」を参照してください。

4.2. ユーザーインターフェースの使用による VMware およびベアメタルインフラストラクチャーの障害のあるストレージデバイスの置き換え

この手順に従って、I/O エラーが原因で障害が発生したストレージデバイスを置き換えます。障害のあるストレージデバイスの置き換えは、Cluster または Persistent Storage ダッシュボード、Nodes ページ、または Notifications から開始できます。

ただし、障害によりディスクが削除される場合、「ローカルストレージデバイスでサポートされたクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」セクションで説明されているようにコマンドラインの手順を使用してオブジェクトストレージデバイス (OSD) を置き換える必要があります。

注記

クラスターが暗号化されている場合には、障害のあるデバイスのユーザーインターフェースからの復元はサポートされていません。コマンドラインインターフェースからデバイスを置き換える場合は、「ローカルストレージデバイスがサポートするクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」セクションの手順に従います。

前提条件

  • Red Hat では、交換前のノードと同様のインフラストラクチャー、リソースおよびディスクで、交換後のノードを設定することを推奨します。
  • 以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合には、ストレージクラスターにアノテーションを追加して、ユーザーインターフェースから障害のあるデバイスを交換できるようにします。「アノテーションの追加」を参照してください。
  • 以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って LocalVolumeDiscovery オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更について参照してください。
  • 以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って LocalVolumeSet オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更 について参照してください。

手順

Cluster または Persistent Storage ダッシュボードの使用
  1. Cluster または Persistent Storage ダッシュボードを開きます。

    • OpenShift Web コンソールの左側のナビゲーションバーで HomeOverviewCluster をクリックします。

      図4.1 アラートのあるクラスターダッシュボード

      Screenshot of Cluster dashboard with the disk not responding alert
    • OpenShift Web コンソールの左側のナビゲーションバーから、HomeOverviewPersistent Storage をクリックします。

      図4.2 アラートのある永続ストレージダッシュボード

      Screenshot of Persistent Storage dashboard with the failed device alert.
  2. Disk <disk1> not responding または Disk <disk1> not accessible アラートで Troubleshoot をクリックします。

    注記

    ディスクの障害によりディスクが削除されている場合、リンクをクリックしても障害の発生したディスクが表示されない場合があります。このようなシナリオでは、「ローカルストレージデバイスがサポートするクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」で説明されているコマンドラインの手順を実行する必要があります。

    図4.3 障害の発生したディスクの置き換えに使用する Disks ページ

    Screenshot of disks page where you can start the process of disk replacement.
  3. Disks ページで、以下のいずれかを実行できます。

    • Troubleshoot ポップオーバーダイアログで here リンクをクリックし、『OpenShift Container Storage のトラブルシューティング』ガイドの手順に従ってディスクに障害が実際に生じたことを確認します。
    • 障害の発生したディスクの Action (⋮) メニューで、Start Disk Replacement をクリックします。
  4. ディスクの OpenShift Container Storage Status フィールドは PreparingToReplace に変更されます。OpenShift Container Storage Status フィールドが ReplacementReady になるまで待ちます。
  5. 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
  6. ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
  7. 置き換えられたディスクの ocs-osd-removal ジョブを削除します。

    1. OpenShift Web コンソールで Workloads→Jobs に移動します。
    2. Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Projectopenshift-storage であることを確認します。
    3. 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
    4. ジョブが削除されたことを確認します。
  8. 置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。

    1. OpenShift Web Console で、Storage → PersistentVolumes に移動します。
    2. Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
    3. LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例: localblock)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
  9. 新たに追加されたディスクの OpenShift Container Storage StatusOnline であることを確認します。
インベントリー一覧の使用
  1. OpenShift Web コンソールで ComputeNodes をクリックします。

    図4.4 Nodes ページのディスクインベントリー一覧

    Inventory list of the disks in the Nodes page.
  2. Disks タブをクリックします。障害が発生したディスクの Action (:) メニューで、Start Disk Replacement をクリックします。
  3. ディスクの OpenShift Container Storage Status フィールドは PreparingToReplace に変更されます。OpenShift Container Storage Status フィールドが ReplacementReady になるまで待ちます。
  4. 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
  5. ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
  6. 置き換えられたディスクの ocs-osd-removal ジョブを削除します。

    1. OpenShift Web コンソールで Workloads→Jobs に移動します。
    2. Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Projectopenshift-storage であることを確認します。
    3. 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
    4. ジョブが削除されたことを確認します。
  7. 置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。

    1. OpenShift Web Console で、Storage → PersistentVolumes に移動します。
    2. Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
    3. LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例: localblock)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
  8. 新たに追加されたディスクの OpenShift Container Storage StatusOnline であることを確認します。
Notifications の使用
  1. HomeOverviewPersistent Storage または Cluster ダッシュボード、または ComputeNodesDisks タブをクリックします。
  2. Cluster または Persistent Storage ダッシュボードの Notifications または Nodes ページで、以下のアラートのいずれかを見つけます。

    • CephOSDDiskUnavailable
    • CephOSDDiskNotResponding
  3. アラート通知で Troubleshoot をクリックします。

    注記

    ディスクの障害によりディスクが削除されている場合、リンクをクリックしても障害の発生したディスクが表示されない場合があります。このようなシナリオでは、「ローカルストレージデバイスがサポートするクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」で説明されているコマンドラインの手順を実行する必要があります。

    図4.5 ディスク障害の通知

    Notificaiton of disk failure.
  4. Disks ページで、以下のいずれかを実行できます。

    • Troubleshoot ポップオーバーダイアログで here リンクをクリックし、『OpenShift Container Storage のトラブルシューティング』ガイドの手順に従ってディスクに障害が実際に生じたことを確認します。
    • 障害の発生したディスクの Action (⋮) メニューで、Start Disk Replacement をクリックします。
  5. ディスクの OpenShift Container Storage StatusPreparingToReplace に変更され、置き換える準備ができたら、ステータスが ReplacementReady に変わります。
  6. 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
  7. ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
  8. 置き換えられたディスクの ocs-osd-removal ジョブを削除します。

    1. OpenShift Web コンソールで Workloads→Jobs に移動します。
    2. Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Projectopenshift-storage であることを確認します。
    3. 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
    4. ジョブが削除されたことを確認します。
  9. 置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。

    1. OpenShift Web Console で、Storage → PersistentVolumes に移動します。
    2. Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
    3. LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例: localblock)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
  10. 新たに追加されたディスクの OpenShift Container Storage StatusOnline であることを確認します。

4.3. ローカルストレージデバイスがサポートするクラスターで動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え

ベアメタルおよび VMware インフラストラクチャーでローカルストレージデバイスを使用してデプロイされた OpenShift Container Storage のオブジェクトストレージデバイス (OSD) を置き換えることができます。基盤のストレージデバイスを 1 つまたは複数置き換える必要がある場合は、この手順を使用します。

前提条件

  • Red Hat では、交換前のノードと同様のインフラストラクチャーおよびリソースで、交換後のノードを設定することを推奨します。
  • 以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って LocalVolumeDiscovery オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更について参照してください。
  • 以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って LocalVolumeSet オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更について参照してください。

手順

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

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

      $ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}

      出力例:

      job.batch "ocs-osd-removal-0" 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 はクラスターから完全に削除されます。osd_id_to_remove の正しい値が指定されていることを確認します。

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

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

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

    $ oc logs -l job-name=ocs-osd-removal-${osd_id_to_remove} -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. コマンドで削除する必要のある永続ボリューム (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
  8. 永続ボリュームを削除します。

    $ oc delete pv local-pv-d6bf175b
  9. 物理的に新規デバイスをノードに追加します。

    以前デバイスを削除することもできます (オプション)。

  10. 以下のコマンドを使用して、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 がプロビジョニングボリューム用に自動作成されます。

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

    $ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}

検証手順

  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 のステータスを確認します。

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

    RHOCP storage dashboard showing the healthy OSD.
注記

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

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

      出力例:

      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. クラスターから以前の OSD を削除します。

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

      出力例:

      job.batch/ocs-osd-removal-0 created
      警告

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

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

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

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

    # oc logs ${osd_id_to_remove} -n openshift-storage --tail=-1
  6. 置き換える 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
  7. 古いデバイスを置き換え、新規デバイスを使用して新規の 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
  8. 置き換えるデバイスで 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 モードが動作します。そのため、追加の検証は不要であり、次のステップに進むことができます。

  9. 先の手順で特定された、置き換えるデバイスに関連付けられた PV を削除します。この例では、PV 名は local-pv-8137c873 です。

    # oc delete pv local-pv-8137c873

    出力例:

    persistentvolume "local-pv-8137c873" deleted
  10. デバイスを新しいデバイスに置き換えます。
  11. 正しい 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 です。

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

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

    $ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}

検証手順

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

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

    RHOCP storage dashboard showing the healthy OSD.

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