6.2. IBM Power で動作するストレージデバイスまたは障害のあるストレージデバイスの置き換え
IBM Power でローカルストレージデバイスを使用してデプロイされた OpenShift Data Foundation のオブジェクトストレージデバイス (OSD) を置き換えることができます。
1 つ以上の基盤となるストレージデバイスを交換する必要がある場合があります。
前提条件
- Red Hat は、交換用デバイスを、交換するデバイスと同様のインフラストラクチャーおよびリソースで設定することを推奨しています。
データに耐久性があることを確認する。
-
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-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
は 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 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
新しい 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
です。PVC に関連付けられた 永続ボリューム (PV) を特定します。
$ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
ここで、
x
、y
、およびpvc-suffix
は、直前の手順で特定された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 Used
ここで、
x
、y
、およびpvc-suffix
は、直前の手順で特定されたDeviceSet
の値です。出力例:
Used 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
です。古い
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 が予想される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
-
削除する必要のある 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
PV を削除します。
$ oc delete pv <pv-name>
<pv-name>
- PV の名前です。
古いデバイスを置き換え、新規デバイスを使用して新規の 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
LocalVolume
CR の名前を見つけ、置き換えるデバイス/dev/disk
を削除またはコメントアウトします。$ oc get -n openshift-local-storage localvolume
出力例:
NAME AGE localblock 25h
# oc edit -n openshift-local-storage localvolume localblock
出力例:
[...] storageClassDevices: - devicePaths: # - /dev/vdc storageClassName: localblock volumeMode: Block [...]
CR の編集後に変更を保存するようにしてください。
置き換えるデバイスで 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 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
が使用可能になったら、Local Volume CR に新しいディスクエントリーを追加できます。LocalVolume CR を編集し、新規の
/dev/disk
を追加します。この例では、新しいデバイスは
/dev/vdd
です。# oc edit -n openshift-local-storage localvolume localblock
出力例:
[...] storageClassDevices: - devicePaths: # - /dev/vdc - /dev/vdd storageClassName: localblock volumeMode: Block [...]
CR の編集後に変更を保存するようにしてください。
新規 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 を作成します。
新しい OSD をデプロイします。Operator の調整を強制的に実行するには、
rook-ceph-operator
を再起動する必要があります。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-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-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
新規 PVC が作成されていることを確認します。
$ 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
(オプション) クラスターでクラスター全体の暗号化が有効な場合は、新規 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 コンソールにログインし、Storage セクションの OpenShift Data Foundation ダッシュボードでステータスカードをチェックします。
データの完全復旧には、復元されるデータ量により、時間がかかる場合があります。