第2章 VMware への OpenShift Data Foundation の動的プロビジョニング
2.1. VMware インフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え
VMware インフラストラクチャーに動的にデプロイされる OpenShift Data Foundation で 1 つ以上の仮想マシンディスク (VMDK) を交換する必要がある場合は、新しいボリュームに新しい永続ボリュームクレーム (PVC) を作成し、古いオブジェクトストレージデバイス (OSD) を削除します。
前提条件
データに耐久性があることを確認する。
-
OpenShift Web コンソールで、Storage
Data Foundation をクリックします。 -
Storage Systems タブをクリックし、
ocs-storagecluster-storagesystem
をクリックします。 - Block and File ダッシュボードの Status card の Overview タブで、Data Resiliency に緑色のチェックマークが付いていることを確認します。
-
OpenShift Web コンソールで、Storage
手順
置き換える必要がある 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 を置き換えるたびに、
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_remove
は Pod 名のrook-ceph-osd
接頭辞の直後にくる整数です。この例では、デプロイメント名は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-job
出力例:
job.batch "ocs-osd-removal-job" deleted
openshift-storage
プロジェクトに移動します。$ oc project openshift-storage
クラスターから以前の OSD を削除します。
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} FORCE_OSD_REMOVAL=false |oc create -n openshift-storage -f -
3 つの OSD しかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するのに十分なスペースがないクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。
警告この手順により、OSD はクラスターから完全に削除されます。
osd_id_to_remove
の正しい値が指定されていることを確認します。
ocs-osd-removal-job
Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。Completed
のステータスで、OSD の削除ジョブが正常に完了したことを確認します。$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
OSD の取り外しが完了したことを確認します。
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
出力例:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
重要ocs-osd-removal-job
Pod が失敗し、Pod が期待されるCompleted
状態にない場合は、さらにデバッグするために Pod ログを確認してください。以下に例を示します。
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
暗号化がインストール時に有効にされている場合は、それぞれの OpenShift Data Foundation ノードから削除された 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"
これまでに特定した各ノードに以下を実行します。
debug
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。$ oc debug node/<node name>
<node name>
これはノードの名前です。
$ chroot /host
直前の手順で特定された PVC 名に基づいて関連するデバイス名を検索します。
$ dmsetup ls| grep <pvc name>
<pvc name>
これは PVC の名前です。
出力例:
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>
<PID>
- これはプロセス ID です。
デバイス名が削除されていることを確認します。
$ dmsetup ls
-
ocs-osd-removal
ジョブを削除します。$ oc delete -n openshift-storage job ocs-osd-removal-job
出力例:
job.batch "ocs-osd-removal-job" deleted
データ暗号化で外部の鍵管理システム (KMS) を使用する場合は、古い OSD 暗号化キーは孤立したキーであるため、Vault サーバーから削除できます。
検証手順
新しい 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 -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/<OSD-pod-name>
<OSD-pod-name>
これは OSD Pod の名前です。
以下に例を示します。
$ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
出力例:
NODE compute-1
直前の手順で特定された各ノードに以下を実行します。
デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。
$ oc debug node/<node name>
<node name>
これはノードの名前です。
$ chroot /host
ocs-deviceset
名の横にあるcrypt
キーワードを確認します。$ lsblk
- OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。