OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
第14章 ストレージデバイスの置き換え
14.1. Red Hat OpenStack Platform のインストーラーでプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え
以下の手順を使用して、Red Hat OpenStack Platform にデプロイされた OpenShift Container Storage のストレージデバイスを置き換えます。この手順は、新規ボリュームで新規の Persistent Volume Claim(永続ボリューム要求、PVC) を作成し、古いオブジェクトストレージデバイス (OSD) を削除するのに役立ちます。
手順
置き換える必要がある OSD と、その OSD がスケジュールされている OpenShift Container Platform ノードを特定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 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 デプロイメントをスケールダウンします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow osd_id_to_remove=0 oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0
$ 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
です。出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deployment.extensions/rook-ceph-osd-0 scaled
deployment.extensions/rook-ceph-osd-0 scaled
rook-ceph-osd
Pod が停止していることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow No resources found.
No resources found.
注記rook-ceph-osd
Pod がterminating
状態にある場合は、force
オプションを使用して Pod を削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
$ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 に関連付けられた永続ボリュームが失敗する場合、失敗した永続ボリュームの詳細を取得し、以下のコマンドを使用してそれらを削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pv oc delete pv <failed-pv-name>
$ oc get pv $ oc delete pv <failed-pv-name>
新規 OSD を追加できるようにクラスターから古い OSD を削除します。
古い
ocs-osd-removal
ジョブを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow job.batch "ocs-osd-removal-0" deleted
job.batch "ocs-osd-removal-0" deleted
openshift-storage
プロジェクトを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc project openshift-storage
$ oc project openshift-storage
クラスターから以前の OSD を削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} |oc create -n openshift-storage -f -
$ 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
の正しい値が指定されていることを確認します。
ocs-osd-removal
Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。Completed
のステータスで、OSD の削除ジョブが正常に完了したことを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod -l job-name=ocs-osd-removal-${osd_id_to_remove} -n openshift-storage
$ oc get pod -l job-name=ocs-osd-removal-${osd_id_to_remove} -n openshift-storage
注記ocs-osd-removal
が失敗し、Pod が予想されるCompleted
の状態にない場合、追加のデバッグのために Pod ログを確認します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -l job-name=ocs-osd-removal-${osd_id_to_remove} -n openshift-storage --tail=-1
$ 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 名を取得します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
手順 #1 で特定されたノードごとに、以下を実行します。
デバッグ
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc debug node/<node name> chroot /host
$ oc debug node/<node name> $ chroot /host
直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dmsetup ls| grep <pvc name>
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
マップ済みデバイスを削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
注記権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。
-
CTRL+Z
を押して上記のコマンドを終了します。 スタックしたプロセスの PID を検索します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ps -ef | grep crypt
$ ps -ef | grep crypt
kill
コマンドを使用してプロセスを終了します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow kill -9 <PID>
$ kill -9 <PID>
デバイス名が削除されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dmsetup ls
$ dmsetup ls
-
ocs-osd-removal
ジョブを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow job.batch "ocs-osd-removal-0" deleted
job.batch "ocs-osd-removal-0" deleted
検証手順
新しい OSD が実行されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osd
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 が作成されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage pvc
$ oc get -n openshift-storage pvc
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE db-noobaa-db-0 Bound pvc-b44ebb5e-3c67-4000-998e-304752deb5a7 50Gi RWO ocs-storagecluster-ceph-rbd 6d ocs-deviceset-0-data-0-gwb5l Bound pvc-bea680cd-7278-463d-a4f6-3eb5d3d0defe 512Gi RWO standard 94s ocs-deviceset-1-data-0-w9pjm Bound pvc-01aded83-6ef1-42d1-a32e-6ca0964b96d4 512Gi RWO standard 6d ocs-deviceset-2-data-0-7bxcq Bound pvc-5d07cd6c-23cb-468c-89c1-72d07040e308 512Gi RWO standard 6d
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE db-noobaa-db-0 Bound pvc-b44ebb5e-3c67-4000-998e-304752deb5a7 50Gi RWO ocs-storagecluster-ceph-rbd 6d ocs-deviceset-0-data-0-gwb5l Bound pvc-bea680cd-7278-463d-a4f6-3eb5d3d0defe 512Gi RWO standard 94s ocs-deviceset-1-data-0-w9pjm Bound pvc-01aded83-6ef1-42d1-a32e-6ca0964b96d4 512Gi RWO standard 6d ocs-deviceset-2-data-0-7bxcq Bound pvc-5d07cd6c-23cb-468c-89c1-72d07040e308 512Gi RWO standard 6d
(オプション) クラスターでクラスター全体の暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。
新規 OSD Pod が実行しているノードを特定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
$ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
直前の手順で特定されたノードごとに、以下を実行します。
デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc debug node/<node name> chroot /host
$ oc debug node/<node name> $ chroot /host
lsblk を実行し、
ocs-deviceset
名の横にある crypt キーワードを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow lsblk
$ lsblk
OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。
図14.1 デバイスの置き換え後の OpenShift Container Platform ストレージダッシュボードの OSD ステータス