OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2.3.4. VMware のインストーラーでプロビジョニングされるインフラストラクチャーで障害のあるノードの置き換え
前提条件
- Red Hat では、交換前のノードと同様のインフラストラクチャー、リソースおよびディスクで、交換後のノードを設定することを推奨します。
- OpenShift Container Platform (RHOCP) クラスターにログインしている必要があります。
-
以前のバージョンから OpenShift Container Storage バージョン 4.8 にアップグレードし、
LocalVolumeDiscovery
およびLocalVolumeSet
オブジェクトを作成していない場合は、Post-update configuration changes for clusters backed by local storage に説明されている以下の手順に従って、これを実行します。
手順
-
OpenShift Web コンソールにログインし、 Compute
Nodes をクリックします。 - 置き換える必要のあるノードを特定します。その マシン名 をメモします。
置き換えるノードのラベルを取得します。
oc get nodes --show-labels | grep <node_name>
$ oc get nodes --show-labels | grep <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 置き換えるノードで実行されている
mon
(ある場合) および OSD を特定します。oc get pods -n openshift-storage -o wide | grep -i <node_name>
$ oc get pods -n openshift-storage -o wide | grep -i <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 先の手順で特定された Pod のデプロイメントをスケールダウンします。
以下に例を示します。
oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage
$ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードにスケジュール対象外 (unschedulable) のマークを付けます。
oc adm cordon <node_name>
$ oc adm cordon <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Terminating 状態の Pod を削除します。
oc get pods -A -o wide | grep -i <node_name> | awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2 " --grace-period=0 " " --force ")}'
$ oc get pods -A -o wide | grep -i <node_name> | awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2 " --grace-period=0 " " --force ")}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードをドレイン (解放) します。
oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
$ oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Compute
Machines をクリックします。必要なマシンを検索します。 -
必要なマシンの横にある Action menu (⋮)
Delete Machine をクリックします。 - Delete をクリックしてマシンの削除を確認します。新しいマシンが自動的に作成されます。
新規マシンが起動し、Running 状態に移行するまで待機します。
重要このアクティビティーには少なくとも 5-10 分以上かかる場合があります。
-
OpenShift Web コンソールで Compute
Nodes をクリックし、新規ノードが Ready 状態にあるかどうかを確認します。 - 物理的に新規デバイスをノードに追加します。
以下のいずれかを使用して、OpenShift Container Storage ラベルを新規ノードに適用します。
- ユーザーインターフェイスを使用する場合
-
新規ノードについて、Action Menu (⋮)
Edit Labels をクリックします。 -
cluster.ocs.openshift.io/openshift-storage
を追加し、Save をクリックします。
-
新規ノードについて、Action Menu (⋮)
- コマンドラインインターフェイスの使用
以下のコマンドを実行して、OpenS+hift Container Storage ラベルを新規ノードに適用します。
oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
$ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift ローカルストレージ Operator がインストールされている namespace を特定し、これを
local_storage_project
変数に割り当てます。local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
$ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
$ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local) echo $local_storage_project openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規ワーカーノードを
localVolumeDiscovery
およびlocalVolumeSet
に追加します。localVolumeDiscovery
定義を更新し、新規ノードを追加して失敗したノードを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow エディターを終了する前に必ず保存します。
上記の例では、
server3.example.com
が削除され、newnode.example.com
が新規ノードになります。編集する
localVolumeSet
を決定します。oc get -n $local_storage_project localvolumeset
# oc get -n $local_storage_project localvolumeset NAME AGE localblock 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow localVolumeSet
定義を更新して、新規ノードを追加し、障害が発生したノードを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow エディターを終了する前に必ず保存します。
上記の例では、
server3.example.com
が削除され、newnode.example.com
が新規ノードになります。
新規
localblock
PV が利用可能であることを確認します。$oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s
$oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-storage
プロジェクトを変更します。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 失敗した OSD をクラスターから削除します。必要に応じて、複数の障害のある OSD を指定することができます。
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ocs-osd-removal-job
Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。Completed
のステータスで、OSD の削除ジョブが正常に完了したことを確認します。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
# oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ocs-osd-removal-job
が失敗し、Pod が予想されるCompleted
の状態にない場合、追加のデバッグのために Pod ログを確認します。以下に例を示します。oc logs -l job-name=ocs-osd-removal-job -n openshift-storage
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PVC に関連付けられた 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 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Released
状態の PV がある場合は、これを削除します。oc delete pv <persistent-volume>
# oc delete pv <persistent-volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
#oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d9c5cbd6" deleted
#oc delete pv local-pv-d6bf175b persistentvolume "local-pv-d9c5cbd6" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow crashcollector
Pod デプロイメントを特定します。oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
$ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 既存の
crashcollector
Pod デプロイメントがある場合は、これを削除します。oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ocs-osd-removal-job
を削除します。oc delete -n openshift-storage job ocs-osd-removal-job
# oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証手順
以下のコマンドを実行して、出力で新規ノードが表示されていることを確認します。
oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
$ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Workloads
Pods をクリックし、新規ノード上の少なくとも以下の Pod が Running
状態にあることを確認します。-
csi-cephfsplugin-*
-
csi-rbdplugin-*
-
他の必要なすべての OpenShift Container Storage Pod が Running 状態にあることを確認します。
また、増分の
mon
が新規に作成されており、Running 状態にあることを確認します。oc get pod -n openshift-storage | grep mon
$ oc get pod -n openshift-storage | grep mon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD と Mon が
Running
状態になるまで数分かかる場合があります。新規 OSD Pod が交換後のノードで実行されていることを確認します。
oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
$ oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) クラスターでクラスター全体の暗号化が有効な場合には、新規 OSD デバイスが暗号化されていることを確認します。
直前の手順で特定された新規ノードごとに、以下を実行します。
デバッグ Pod を作成し、選択したホストの chroot 環境を開きます。
oc debug node/<node name> chroot /host
$ oc debug node/<node name> $ chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lsblk を実行し、
ocs-deviceset
名の横にある crypt キーワードを確認します。lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 検証手順が失敗した場合は、Red Hat サポートにお問い合わせください。