デバイスの置き換え
障害のあるデバイスを安全に置き換える手順
概要
はじめに
デプロイメントのタイプに応じて、以下のいずれかの手順を選択してストレージノードを置き換えることができます。
AWS にデプロイされた動的に作成されたストレージクラスターについては、以下を参照してください。
- VMware にデプロイされた動的に作成されたストレージクラスターについては、「VMware のユーザーによってプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え」を参照してください。
- Microsoft Azure にデプロイされた動的に作成されたストレージクラスターについては、「Azure のインストーラーでプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え」を参照してください。
ローカルストレージデバイスを使用してデプロイされたストレージクラスターについては、以下を参照してください。
- 「Amazon EC2 インフラストラクチャーでの障害のあるストレージノードの置き換え」
- 「ユーザーインターフェースの使用による VMware およびベアメタルインフラストラクチャーの障害のあるストレージデバイスの置き換え」
- 「ローカルストレージデバイスがサポートするクラスターで動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え」
- 「IBM Power Systems で動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え」
- 「IBM Z または LinuxONE インフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え」
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) を削除するのに役立ちます。
手順
置き換える必要がある 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
になります。置き換えられる 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_remove
はrook-ceph-osd
プレフィックスの直後にくる Pod 名の整数です。この例では、デプロイメント名はrook-ceph-osd-0
です。出力例:
deployment.extensions/rook-ceph-osd-0 scaled
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
新規 OSD を追加できるようにクラスターから古い OSD を削除します。
古い
ocs-osd-removal
ジョブを削除します。$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
出力例:
job.batch "ocs-osd-removal-0" deleted
openshift-storage
プロジェクトを変更します。$ oc project openshift-storage
クラスターから以前の 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
の正しい値が指定されていることを確認します。
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
暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Container Storage ノードから削除された OSD デバイスから
dm-crypt
で管理されるdevice-mapper
マッピングを削除します。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"
手順 #1 で特定されたノードごとに、以下を実行します。
デバッグ
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。$ oc debug node/<node name> $ chroot /host
直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
マップ済みデバイスを削除します。
$ 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
-
ocs-osd-removal
ジョブを削除します。# oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
出力例:
job.batch "ocs-osd-removal-0" deleted
検証手順
新しい 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
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
(オプション) クラスターでデータの暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。
新規 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
直前の手順で特定されたノードごとに、以下を実行します。
デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。
$ oc debug node/<node name> $ chroot /host
「lsblk」を実行し、
ocs-deviceset
名の横にある「crypt」キーワードを確認します。$ lsblk
OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。
図2.1 デバイスの置き換え後の OpenShift Container Platform ストレージダッシュボードの 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 ダッシュボードの使用
Cluster または Persistent Storage ダッシュボードを開きます。
OpenShift Web コンソールの左側のナビゲーションバーで Home → Overview → Cluster をクリックします。
図4.1 アラートのあるクラスターダッシュボード
OpenShift Web コンソールの左側のナビゲーションバーから、Home → Overview → Persistent Storage をクリックします。
図4.2 アラートのある永続ストレージダッシュボード
Disk <disk1> not responding
またはDisk <disk1> not accessible
アラートで Troubleshoot をクリックします。注記ディスクの障害によりディスクが削除されている場合、リンクをクリックしても障害の発生したディスクが表示されない場合があります。このようなシナリオでは、「ローカルストレージデバイスがサポートするクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」で説明されているコマンドラインの手順を実行する必要があります。
図4.3 障害の発生したディスクの置き換えに使用する Disks ページ
Disks ページで、以下のいずれかを実行できます。
- Troubleshoot ポップオーバーダイアログで here リンクをクリックし、『OpenShift Container Storage のトラブルシューティング』ガイドの手順に従ってディスクに障害が実際に生じたことを確認します。
- 障害の発生したディスクの Action (⋮) メニューで、Start Disk Replacement をクリックします。
-
ディスクの
OpenShift Container Storage Status
フィールドはPreparingToReplace
に変更されます。OpenShift Container Storage Status
フィールドがReplacementReady
になるまで待ちます。 - 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
- ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
置き換えられたディスクの ocs-osd-removal ジョブを削除します。
- OpenShift Web コンソールで Workloads→Jobs に移動します。
- Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Project が openshift-storage であることを確認します。
- 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
- ジョブが削除されたことを確認します。
置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。
- OpenShift Web Console で、Storage → PersistentVolumes に移動します。
- Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
-
LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例:
localblock
)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
-
新たに追加されたディスクの
OpenShift Container Storage Status
がOnline
であることを確認します。
- インベントリー一覧の使用
OpenShift Web コンソールで Compute → Nodes をクリックします。
図4.4 Nodes ページのディスクインベントリー一覧
- Disks タブをクリックします。障害が発生したディスクの Action (:) メニューで、Start Disk Replacement をクリックします。
-
ディスクの
OpenShift Container Storage Status
フィールドはPreparingToReplace
に変更されます。OpenShift Container Storage Status
フィールドがReplacementReady
になるまで待ちます。 - 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
- ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
置き換えられたディスクの ocs-osd-removal ジョブを削除します。
- OpenShift Web コンソールで Workloads→Jobs に移動します。
- Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Project が openshift-storage であることを確認します。
- 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
- ジョブが削除されたことを確認します。
置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。
- OpenShift Web Console で、Storage → PersistentVolumes に移動します。
- Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
-
LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例:
localblock
)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
-
新たに追加されたディスクの
OpenShift Container Storage Status
がOnline
であることを確認します。
- Notifications の使用
- Home → Overview → Persistent Storage または Cluster ダッシュボード、または Compute → Nodes → Disks タブをクリックします。
Cluster または Persistent Storage ダッシュボードの Notifications または Nodes ページで、以下のアラートのいずれかを見つけます。
-
CephOSDDiskUnavailable
-
CephOSDDiskNotResponding
-
アラート通知で Troubleshoot をクリックします。
注記ディスクの障害によりディスクが削除されている場合、リンクをクリックしても障害の発生したディスクが表示されない場合があります。このようなシナリオでは、「ローカルストレージデバイスがサポートするクラスターで動作するデバイスまたは障害のあるストレージデバイスの置き換え」で説明されているコマンドラインの手順を実行する必要があります。
図4.5 ディスク障害の通知
Disks ページで、以下のいずれかを実行できます。
- Troubleshoot ポップオーバーダイアログで here リンクをクリックし、『OpenShift Container Storage のトラブルシューティング』ガイドの手順に従ってディスクに障害が実際に生じたことを確認します。
- 障害の発生したディスクの Action (⋮) メニューで、Start Disk Replacement をクリックします。
-
ディスクの
OpenShift Container Storage Status
がPreparingToReplace
に変更され、置き換える準備ができたら、ステータスがReplacementReady
に変わります。 - 通知ベルをクリックして、ディスクアラートが表示されなくなったことを確認します。
- ディスクを置き換え、これがインベントリー一覧に表示されるまで待機します。
置き換えられたディスクの ocs-osd-removal ジョブを削除します。
- OpenShift Web コンソールで Workloads→Jobs に移動します。
- Name フィルターで検索を使用して、ocs-osd-removal を検索します。選択された Project が openshift-storage であることを確認します。
- 一覧表示されているジョブで、Action (⋮) メニューをクリックし、Delete Job を選択します。
- ジョブが削除されたことを確認します。
置き換えられたディスクに関連付けられた PersistentVolume リソースを削除します。
- OpenShift Web Console で、Storage → PersistentVolumes に移動します。
- Name フィルターによる検索を使用して、Released ステータスの PersistentVolume を検索します。
-
LocalVolumeSet 作成の一部として作成されたストレージクラスからの PersistentVolume では (例:
localblock
)、Action (⋮) メニューをクリックし、Delete PersistentVolume を選択します。
-
新たに追加されたディスクの
OpenShift Container Storage Status
がOnline
であることを確認します。
4.3. ローカルストレージデバイスがサポートするクラスターで動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え
ベアメタルおよび VMware インフラストラクチャーでローカルストレージデバイスを使用してデプロイされた OpenShift Container Storage のオブジェクトストレージデバイス (OSD) を置き換えることができます。基盤のストレージデバイスを 1 つまたは複数置き換える必要がある場合は、この手順を使用します。
前提条件
- Red Hat では、交換前のノードと同様のインフラストラクチャーおよびリソースで、交換後のノードを設定することを推奨します。
-
以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って
LocalVolumeDiscovery
オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更について参照してください。 -
以前のバージョンから OpenShift Container Storage 4.6 にアップグレードした場合、アップグレード後の手順に従って
LocalVolumeSet
オブジェクトを作成していることを確認します。詳細は、更新後の設定の変更について参照してください。
手順
置き換える必要がある 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
になります。置き換えられる 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_remove
はrook-ceph-osd
プレフィックスの直後にくる Pod 名の整数です。この例では、デプロイメント名はrook-ceph-osd-0
です。出力例:
deployment.extensions/rook-ceph-osd-0 scaled
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
新規 OSD を追加できるようにクラスターから古い OSD を削除します。
古い
ocs-osd-removal
ジョブを削除します。$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
出力例:
job.batch "ocs-osd-removal-0" deleted
openshift-storage
プロジェクトを変更します。$ oc project openshift-storage
クラスターから以前の 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
の正しい値が指定されていることを確認します。
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
暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Container Storage ノードから削除された OSD デバイスから
dm-crypt
で管理されるdevice-mapper
マッピングを削除します。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"
手順 #1 で特定されたノードごとに、以下を実行します。
デバッグ
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。$ oc debug node/<node name> $ chroot /host
直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
マップ済みデバイスを削除します。
$ 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
-
コマンドで削除する必要のある永続ボリューム (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
永続ボリュームを削除します。
$ oc delete pv local-pv-d6bf175b
物理的に新規デバイスをノードに追加します。
以前デバイスを削除することもできます (オプション)。
以下のコマンドを使用して、
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 がプロビジョニングボリューム用に自動作成されます。
ocs-osd-removal
ジョブを削除します。$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
検証手順
新しい 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
新規 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
(オプション) クラスターでデータの暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。
新規 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
直前の手順で特定されたノードごとに、以下を実行します。
デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。
$ oc debug node/<node name> $ chroot /host
「lsblk」を実行し、
ocs-deviceset
名の横にある「crypt」キーワードを確認します。$ lsblk
OpenShift Web コンソールにログインし、ストレージダッシュボードで OSD のステータスを確認します。
図4.6 デバイスの置き換え後の OpenShift Container Platform ストレージダッシュボードの OSD ステータス
データの完全復旧には、復元されるデータ量により、時間がかかる場合があります。
4.4. IBM Power Systems で動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え
IBM Power Systems でローカルストレージデバイスを使用してデプロイされた OpenShift Container Storage のオブジェクトストレージデバイス (OSD) を置き換えることができます。基礎となるストレージデバイスを置き換える必要がある場合は、この手順を使用します。
手順
置き換える必要がある 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
になります。置き換えられる 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_remove
はrook-ceph-osd
プレフィックスの直後にくる Pod 名の整数です。この例では、デプロイメント名はrook-ceph-osd-0
です。出力例:
deployment.apps/rook-ceph-osd-0 scaled
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
新規 OSD を追加できるようにクラスターから古い OSD を削除します。
置き換える 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
です。クラスターから以前の 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
の正しい値が指定されていることを確認します。
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
置き換える OSD に関連付けられた Persistent Volume Claim (永続ボリューム要求、PVC) リソースを削除します。
PVC に関連付けられた PV を特定します。
# oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
ここで、
x
、y
、および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
です。置き換えるデバイスの名前を特定します。
# oc get pv local-pv-<pv-suffix> -o yaml | grep path
ここで、
pv-suffix
は、前のステップで特定された PV 名の値です。出力例:
path: /mnt/local-storage/localblock/vdc
この例では、デバイス名は
vdc
です。置き換える OSD に関連付けられた
prepare-pod
を特定します。# oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Mounted
ここで、
x
、y
、および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
です。関連付けられた PVC を削除する前に
osd-prepare
Pod を削除します。# oc delete -n openshift-storage pod rook-ceph-osd-prepare-ocs-deviceset-<x>-<y>-<pvc-suffix>-<pod-suffix>
ここで、
x
、y
、pvc-suffix
、およびpod-suffix
は、直前の手順で特定されたosd-prepare
Pod 名の値です。出力例:
pod "rook-ceph-osd-prepare-ocs-deviceset-localblock-0-data-0-64knzkc" deleted
置き換える OSD に関連付けられた PVC を削除します。
# oc delete -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
ここで、
x
、y
、およびpvc-suffix
は、直前の手順で特定されたDeviceSet
の値です。出力例:
persistentvolumeclaim "ocs-deviceset-localblock-0-data-0-64xjl" deleted
古いデバイスを置き換え、新規デバイスを使用して新規の OpenShift Container Platform PV を作成します。
置き換えるデバイスで 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
先に特定したデバイス名
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
LocalVolumeSet
CR の名前を見つけ、置き換えるデバイス/dev/disk
を削除またはコメントアウトします。# oc get -n openshift-local-storage localvolumeset NAME AGE localblock 25h
置き換えるデバイスで 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
置き換えるデバイス名の古い
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
symlink
を削除します。# rm /mnt/local-storage/localblock/vdc
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 モードが動作します。そのため、追加の検証は不要であり、次のステップに進むことができます。
先の手順で特定された、置き換えるデバイスに関連付けられた PV を削除します。この例では、PV 名は
local-pv-8137c873
です。# oc delete pv local-pv-8137c873
出力例:
persistentvolume "local-pv-8137c873" deleted
- デバイスを新しいデバイスに置き換えます。
正しい 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
です。-
新しい
/dev/disk
が利用可能になると、localvolumeset によって自動検出されます。 新規 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
新規デバイス用に新規 OSD を作成します。
rook-ceph-operator
を再起動して Operator の調整を強制的に実行して新規 OSD をデプロイします。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
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
です。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 が再起動するまでに数分かかる場合があります。
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 ステータス
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
手順
以下のコマンドを使用してすべてのディスクを一覧表示します。
$ 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 つのストレージデバイスに障害が発生した場合は、これを新しいディスクに置き換えることができます。ディスクを削除します。
ディスクで以下のコマンドを実行し、
scsi-id
を、置き換えるディスクの SCSI ディスク識別子に置き換えます。$ chzdev -d scsi-id
たとえば、以下のコマンドはデバイス ID
0.0.8204
、WWPN0x500507630a0b50a4
、および LUN0x4002403000000000
のディスクを 1 つ削除します。$ chzdev -d 0.0.8204:0x500407630c0b50a4:0x3002b03000000000
以下のコマンドを使用して新規 SCSI ディスクを追加します。
$ chzdev -e 0.0.8204:0x500507630b1b50a4:0x4001302a00000000
注記新規ディスクのデバイス ID は、置き換えるディスクと同じである必要があります。新規ディスクは、WWPN および LUN ID で識別されます。
すべての 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