第4章 OpenShift Container Storage のアンインストール
4.1. 内部モードでの OpenShift Container Storage のアンインストール
このセクションの手順に従って OpenShift Container Storage をアンインストールします。
アノテーションのアンインストール
Storage Cluster のアノテーションは、アンインストールプロセスの動作を変更するために使用されます。アンインストールの動作を定義するために、ストレージクラスターに以下の 2 つのアノテーションが導入されました。
-
uninstall.ocs.openshift.io/cleanup-policy: delete
-
uninstall.ocs.openshift.io/mode: graceful
以下の表は、これらのアノテーションで使用できる各種値に関する情報を示しています。
Annotation | 値 | デフォルト | 動作 |
---|---|---|---|
cleanup-policy | delete | はい |
Rook は物理ドライブおよび |
cleanup-policy | Retain | いいえ |
Rook は物理ドライブおよび |
mode | graceful | はい | Rook および NooBaa は PVC および OBC が管理者/ユーザーによって削除されるまでアンインストールプロセスを一時停止します。 |
mode | forced | いいえ | Rook および NooBaa は、Rook および NooBaa を使用してプロビジョニングされた PVC/OBC がそれぞれ存在している場合でもアンインストールを続行します。 |
以下のコマンドを使用してアノテーションの値を編集し、クリーンアップポリシーまたはアンインストールモードを変更できます。
$ oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/cleanup-policy="retain" --overwrite storagecluster.ocs.openshift.io/ocs-storagecluster annotated
$ oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite storagecluster.ocs.openshift.io/ocs-storagecluster annotated
前提条件
- OpenShift Container Storage クラスターの状態が正常であることを確認します。リソースまたはノードの不足により一部の Pod が正常に終了されないと、アンインストールプロセスに失敗する可能性があります。クラスターが状態が正常でない場合は、OpenShift Container Storage をアンインストールする前に Red Hat カスタマーサポートにお問い合わせください。
- アプリケーションが OpenShift Container Storage によって提供されるストレージクラスを使用して永続ボリューム要求 (PVC) またはオブジェクトバケット要求 (OBC) を使用していないことを確認します。
- カスタムリソース (カスタムストレージクラス、cephblockpools など) が管理者によって作成された場合、それらを消費したリソースを削除した後に管理者によって削除される必要があります。
手順
OpenShift Container Storage を使用しているボリュームスナップショットを削除します。
すべての namespace からボリュームスナップショットを一覧表示します。
$ oc get volumesnapshot --all-namespaces
直前のコマンドの出力から、OpenShift Container Storage を使用しているボリュームスナップショットを特定し、削除します。
$ oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
OpenShift Container Storage を使用している PVC および OBC を削除します。
デフォルトのアンインストールモード (graceful) では、アンインストーラーは OpenShift Container Storage を使用するすべての PVC および OBC が削除されるまで待機します。
PVC を事前に削除せずに Storage Cluster を削除する場合は、アンインストールモードのアノテーションを forced に設定し、この手順を省略できます。これを実行すると、孤立した PVC および OBC がシステムに作成されます。
OpenShift Container Storage を使用して、OpenShift Container Platform モニターリングスタック PVC を削除します。
詳細は、OpenShift Container Storage からのモニターリングスタックの削除 を参照してください。
OpenShift Container Storage を使用して、OpenShift Container Platform レジストリー PVC を削除します。
詳細は、Removing OpenShift Container Platform registry from OpenShift Container Storage を参照してください。
OpenShift Container Storage を使用して、OpenShift Container Platform ロギング PVC を削除します。
詳細は、OpenShift Container Storage からのクラスターロギング Operator の削除 を参照してください。
OpenShift Container Storage を使用してプロビジョニングした PVC および OBC を削除します。
以下に、OpenShift Container Storage を使用してプロビジョニングされる PVC および OBC を特定するサンプルスクリプトを示します。このスクリプトは、OpenShift Container Storage によって内部で使用される PVC を無視します。
#!/bin/bash RBD_PROVISIONER="openshift-storage.rbd.csi.ceph.com" CEPHFS_PROVISIONER="openshift-storage.cephfs.csi.ceph.com" NOOBAA_PROVISIONER="openshift-storage.noobaa.io/obc" RGW_PROVISIONER="openshift-storage.ceph.rook.io/bucket" NOOBAA_DB_PVC="noobaa-db" NOOBAA_BACKINGSTORE_PVC="noobaa-default-backing-store-noobaa-pvc" # Find all the OCS StorageClasses OCS_STORAGECLASSES=$(oc get storageclasses | grep -e "$RBD_PROVISIONER" -e "$CEPHFS_PROVISIONER" -e "$NOOBAA_PROVISIONER" -e "$RGW_PROVISIONER" | awk '{print $1}') # List PVCs in each of the StorageClasses for SC in $OCS_STORAGECLASSES do echo "======================================================================" echo "$SC StorageClass PVCs and OBCs" echo "======================================================================" oc get pvc --all-namespaces --no-headers 2>/dev/null | grep $SC | grep -v -e "$NOOBAA_DB_PVC" -e "$NOOBAA_BACKINGSTORE_PVC" oc get obc --all-namespaces --no-headers 2>/dev/null | grep $SC echo done
注記クラウドプラットフォームの
RGW_PROVISIONER
を省略します。OBC を削除します。
$ oc delete obc <obc name> -n <project name>
PVC を削除します。
$ oc delete pvc <pvc name> -n <project-name>
注記クラスターに作成されているカスタムバッキングストア、バケットクラスなどを削除していることを確認します。
Storage Cluster オブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。
$ oc delete -n openshift-storage storagecluster --all --wait=true
uninstall.ocs.openshift.io/cleanup-policy
がdelete
(default) に設定されている場合にクリーンアップ Pod の有無を確認し、それらのステータスがCompleted
していることを確認します。$ oc get pods -n openshift-storage | grep -i cleanup NAME READY STATUS RESTARTS AGE cluster-cleanup-job-<xx> 0/1 Completed 0 8m35s cluster-cleanup-job-<yy> 0/1 Completed 0 8m35s cluster-cleanup-job-<zz> 0/1 Completed 0 8m35s
/var/lib/rook
ディレクトリーが空であることを確認します。このディレクトリーは空になるのは、uninstall.ocs.openshift.io/cleanup-policy
アノテーションがdelete
(デフォルト) に設定されている場合に限られます。$ for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host ls -l /var/lib/rook; done
暗号化がインストール時に有効にされている場合は、すべての OpenShift Container Storage ノードの OSD デバイスから
dm-crypt
で管理されるdevice-mapper
マッピングを削除します。デバッグ
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。$ oc debug node/<node name> $ chroot /host
デバイス名を取得し、OpenShift Container Storage デバイスについてメモします。
$ dmsetup ls ocs-deviceset-localblock-0-data-1x4r7g-block-dmcrypt (253:1)
マップ済みデバイスを削除します。
$ cryptsetup luksClose --debug --verbose ocs-deviceset-localblock-0-data-1x4r7g-block-dmcrypt
注記権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。
-
CTRL+Z
を押して上記のコマンドを終了します。 スタックしたプロセスの PID を検索します。
$ ps -ef | grep crypt
kill
コマンドを使用してプロセスを終了します。$ kill -9 <PID>
デバイス名が削除されていることを確認します。
$ dmsetup ls
-
namespace を削除し、削除が完了するまで待機します。
openshift-storage
がアクティブなプロジェクトである場合は、別のプロジェクトに切り替える必要があります。以下に例を示します。
$ oc project default $ oc delete project openshift-storage --wait=true --timeout=5m
以下のコマンドが
NotFound
エラーを返すと、プロジェクトが削除されます。$ oc get project openshift-storage
注記OpenShift Container Storage のアンインストール時に、
namespace
が完全に削除されず、Terminating
状態のままである場合は、Troubleshooting and deleting remaining resources during Uninstall の記事に記載の手順を実行して namespace の終了をブロックしているオブジェクトを特定します。- ローカルストレージデバイスを使用して OpenShift Container Storage をデプロイしている場合は、ローカルストレージ Operator 設定を削除します。ローカルストレージ Operator の設定の削除 を参照してください。
ストレージノードのラベルを解除します。
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage- $ oc label nodes --all topology.rook.io/rack-
ノードにテイントのマークが付けられている場合に OpenShift Container Storage テイントを削除します。
$ oc adm taint nodes --all node.ocs.openshift.io/storage-
OpenShift Container Storage を使用してプロビジョニングした PV がすべて削除されていることを確認します。
Released
状態のままの PV がある場合は、これを削除します。$ oc get pv $ oc delete pv <pv name>
Multicloud Object Gateway storageclass を削除します。
$ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
CustomResourceDefinitions
を削除します。$ oc delete crd backingstores.noobaa.io bucketclasses.noobaa.io cephblockpools.ceph.rook.io cephclusters.ceph.rook.io cephfilesystems.ceph.rook.io cephnfses.ceph.rook.io cephobjectstores.ceph.rook.io cephobjectstoreusers.ceph.rook.io noobaas.noobaa.io ocsinitializations.ocs.openshift.io storageclusters.ocs.openshift.io cephclients.ceph.rook.io cephobjectrealms.ceph.rook.io cephobjectzonegroups.ceph.rook.io cephobjectzones.ceph.rook.io cephrbdmirrors.ceph.rook.io --wait=true --timeout=5m
OpenShift Container Platform Web コンソールで、OpenShift Container Storage が完全にアンインストールされていることを確認するには、以下を実行します。
- ストレージ をクリックします。
- Overview が Storage に表示されていないことを確認します。
4.1.1. ローカルストレージ Operator の設定の削除
ローカルストレージデバイスを使用して OpenShift Container Storage をデプロイした場合にのみ、本セクションの手順を使用します。
OpenShift Container Storage デプロイメントで localvolume
リソースのみを使用する場合は、直接、手順 8 に移動します。
手順
-
LocalVolumeSet
および OpenShift Container Storage で使用される対応するStorageClassName
を特定します。 LocalVolumeSet
を提供するStorageClass
に変数 SC を設定します。$ export SC="<StorageClassName>"
LocalVolumeSet
を削除します。$ oc delete localvolumesets.local.storage.openshift.io <name-of-volumeset> -n openshift-local-storage
指定された
StorageClassName
のローカルストレージ PV を削除します。$ oc get pv | grep $SC | awk '{print $1}'| xargs oc delete pv
StorageClassName
を削除します。$ oc delete sc $SC
LocalVolumeSet
によって作成されるシンボリックリンクを削除します。[[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
LocalVolumeDiscovery
を削除します。$ oc delete localvolumediscovery.local.storage.openshift.io/auto-discover-devices -n openshift-local-storage
LocalVolume
リソースを削除します (ある場合)。以下の手順を使用して、現行または直前の OpenShift Container Storage バージョンで PV のプロビジョニングに使用した
LocalVolume
リソースを削除します。また、これらのリソースがクラスターの他のテナントで使用されていないことを確認します。ローカルボリュームごとに、以下を実行します。
-
LocalVolume
および OpenShift Container Storage で使用される対応するStorageClassName
を特定します。 変数 LV を LocalVolume の名前に設定し、変数 SC を StorageClass の名前に設定します。
以下に例を示します。
$ LV=localblock $ SC=localblock
ローカルボリュームリソースを削除します。
$ oc delete localvolume -n openshift-local-storage --wait=true $LV
残りの PV および StorageClass が存在する場合はこれらを削除します。
$ oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5m $ oc delete storageclass $SC --wait --timeout=5m
そのリソースのストレージノードからアーティファクトをクリーンアップします。
$ [[ ! -z $SC ]] && for i in $(oc get node -l cluster.ocs.openshift.io/openshift-storage= -o jsonpath='{ .items[*].metadata.name }'); do oc debug node/${i} -- chroot /host rm -rfv /mnt/local-storage/${SC}/; done
出力例:
Starting pod/node-xxx-debug ... To use host binaries, run `chroot /host` removed '/mnt/local-storage/localblock/sda' removed directory '/mnt/local-storage/localblock' Removing debug pod ... Starting pod/node-yyy-debug ... To use host binaries, run `chroot /host` removed '/mnt/local-storage/localblock/sda' removed directory '/mnt/local-storage/localblock' Removing debug pod ... Starting pod/node-zzz-debug ... To use host binaries, run `chroot /host` removed '/mnt/local-storage/localblock/sda' removed directory '/mnt/local-storage/localblock' Removing debug pod ...
-
openshift-local-storage
namespace を削除し、削除が完了するまで待機します。openshift-local-storage
namespace がアクティブなプロジェクトである場合、別のプロジェクトに切り換える必要があります。以下に例を示します。
$ oc project default $ oc delete project openshift-local-storage --wait=true --timeout=5m
以下のコマンドが NotFound エラーを返すと、プロジェクトが削除されます。
$ oc get project openshift-local-storage