第7章 OpenShift Data Foundation のアンインストール
7.1. 内部接続デバイスモードの OpenShift Data Foundation のアンインストール
このセクションの手順に従って OpenShift Data Foundation をアンインストールします。
アノテーションのアンインストール
Storage Cluster のアノテーションは、アンインストールプロセスの動作を変更するために使用されます。アンインストールの動作を定義するために、ストレージクラスターに以下の 2 つのアノテーションが導入されました。
-
uninstall.ocs.openshift.io/cleanup-policy: delete
-
uninstall.ocs.openshift.io/mode: graceful
以下の表は、これらのアノテーションで使用できる各種値に関する情報を示しています。
アノテーション | 値 | デフォルト | 動作 |
---|---|---|---|
cleanup-policy | delete | はい |
Rook は物理ドライブおよび |
cleanup-policy | Retain | いいえ |
Rook は物理ドライブおよび |
mode | graceful | はい | Rook および NooBaa は、管理者/ユーザーが Persistent Volume Claim (PVC) および Object Bucket Claim (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
$ oc -n openshift-storage annotate storagecluster ocs-storagecluster uninstall.ocs.openshift.io/mode="forced" --overwrite
両方のコマンドで予期される出力:
storagecluster.ocs.openshift.io/ocs-storagecluster annotated
前提条件
- OpenShift Data Foundation クラスターの状態が正常である。リソースまたはノードの不足により一部の Pod が正常に終了されないと、アンインストールプロセスに失敗する可能性があります。クラスターの状態が正常でない場合は、OpenShift Data Foundation をアンインストールする前に Red Hat カスタマーサポートにお問い合わせください。
- アプリケーションが OpenShift Data Foundation によって提供されるストレージクラスを使用して永続ボリューム要求 (PVC) またはオブジェクトバケット要求 (OBC) を消費していない。
- カスタムリソース (カスタムストレージクラス、cephblockpools など) が管理者によって作成された場合、それらを消費したリソースを削除した後に管理者によって削除される必要があります。
手順
OpenShift Data Foundation を使用しているボリュームスナップショットを削除します。
すべての namespace からボリュームスナップショットをリスト表示します。
$ oc get volumesnapshot --all-namespaces
直前のコマンドの出力から、OpenShift Data Foundation を使用しているボリュームスナップショットを特定し、削除します。
$ oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
<VOLUME-SNAPSHOT-NAME>
- ボリュームスナップショットの名前です。
<NAMESPACE>
- プロジェクトの namespace です。
OpenShift Data Foundation を使用している PVC および OBC を削除します。
デフォルトのアンインストールモード (graceful) では、アンインストーラーは OpenShift Data Foundation を使用するすべての PVC および OBC が削除されるまで待機します。
PVC を削除せずに Storage Cluster を削除する場合は、アンインストールモードのアノテーションを
forced
に設定し、この手順を省略できます。これを行うと、孤立した PVC および OBC がシステムに作成されます。OpenShift Data Foundation を使用して、OpenShift Container Platform モニタリングスタック PVC を削除します。
OpenShift Data Foundation を使用して、OpenShift Container Platform レジストリー PVC を削除します。
OpenShift Data Foundation からの OpenShift Container Platform レジストリーの削除 を参照してください。
OpenShift Data Foundation を使用して、OpenShift Container Platform ロギング PVC を削除します。
OpenShift Data Foundation からのクラスターロギング Operator の削除 を参照してください。
OpenShift Data Foundation を使用してプロビジョニングした PVC および OBC を削除します。
以下に、OpenShift Data Foundation を使用してプロビジョニングされる PVC および OBC を特定するサンプルスクリプトを示します。このスクリプトは、OpenShift Data Foundation によって内部で使用される 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>
<obc-name>
- OBC の名前です。
<project-name>
- プロジェクトの名前です。
PVC を削除します。
$ oc delete pvc <pvc-name> -n <project-name>
<pvc-name>
- PVC の名前です。
<project-name>
プロジェクトの名前です。
注記クラスターに作成されているカスタムバッキングストア、バケットクラスなどを削除していることを確認します。
Storage System オブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。
$ oc delete -n openshift-storage storagesystem --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 Data Foundation ノードの OSD から
dm-crypt
で管理されるdevice-mapper
マッピングを削除します。debug
Pod を作成し、ストレージノードのホストに対してchroot
を作成します。$ oc debug node/<node-name>
$ chroot /host
<node-name>
- ノードの名前です。
デバイス名を取得し、OpenShift Data Foundation デバイスについてメモします。
$ dmsetup ls
出力例:
ocs-deviceset-0-data-0-57snx-block-dmcrypt (253:1)
マップ済みデバイスを削除します。
$ cryptsetup luksClose --debug --verbose ocs-deviceset-0-data-0-57snx-block-dmcrypt
重要権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。
-
CTRL+Z
を押して上記のコマンドを終了します。 スタックしたプロセスの PID を検索します。
$ ps -ef | grep crypt
kill
コマンドを使用してプロセスを終了します。$ kill -9 <PID>
<PID>
- プロセス ID です。
デバイス名が削除されていることを確認します。
$ dmsetup ls
-
namespace を削除し、削除が完了するまで待機します。
openshift-storage
がアクティブなプロジェクトである場合は、別のプロジェクトに切り替える必要があります。以下に例を示します。
$ oc project default
$ oc delete project openshift-storage --wait=true --timeout=5m
以下のコマンドが NotFound エラーを返すと、プロジェクトが削除されます。
$ oc get project openshift-storage
注記OpenShift Data Foundation のアンインストール時に、
namespace
が完全に削除されず、Terminating
状態のままである場合は、トラブルシューティングおよびアンインストール時の残りのリソースの削除 の記事に記載の手順を実行して namespace の終了をブロックしているオブジェクトを特定します。- ローカルストレージデバイスを使用して OpenShift Data Foundation をデプロイした場合は、ローカルストレージ Operator 設定を削除します。ローカルストレージ Operator の設定の削除 を参照してください。
ストレージノードのラベルを解除します。
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage-
$ oc label nodes --all topology.rook.io/rack-
ノードにテイントのマークが付けられている場合に OpenShift Data Foundation テイントを削除します。
$ oc adm taint nodes --all node.ocs.openshift.io/storage-
OpenShift Data Foundation を使用してプロビジョニングした永続ボリューム (PV) がすべて削除されていることを確認します。
Released
状態のままの PV がある場合は、これを削除します。$ oc get pv
$ oc delete pv <pv-name>
<pv-name>
- Pod の名前です。
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 storagesystems.odf.openshift.io --wait=true --timeout=5m
OpenShift Container Platform Web コンソールで、OpenShift Data Foundation が完全にアンインストールされていることを確認するには、以下を実行します。
- Storage をクリックします。
- OpenShift Data Foundation が Storage に表示されていないことを確認します。
7.1.1. ローカルストレージ Operator の設定の削除
ローカルストレージデバイスを使用して OpenShift Data Foundation をデプロイした場合にのみこのセクションの説明を使用します。
OpenShift Data Foundation デプロイメントで localvolume
リソースのみを使用する場合は、直接、手順 8 に移動します。
手順
LocalVolumeSet
および OpenShift Data Foundation で使用される対応するStorageClassName
を特定します。$ oc get localvolumesets.local.storage.openshift.io -n openshift-local-storage
LocalVolumeSet
を提供するStorageClass
に変数 SC を設定します。$ export SC="<StorageClassName>"
後にクリーンアップするデバイスをリスト表示し、これをメモします。ディスクのデバイス ID を一覧表示するには、ここで説明されている手順に従います。利用可能なストレージデバイスの検索 に ついて参照してください。
出力例:
/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3
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 Data Foundation バージョンで PV のプロビジョニングに使用した
LocalVolume
リソースを削除します。また、これらのリソースがクラスターの他のテナントで使用されていないことを確認します。ローカルボリュームごとに、以下を実行します。
LocalVolume
および OpenShift Data Foundation で使用される対応するStorageClassName
を特定します。$ oc get localvolume.local.storage.openshift.io -n openshift-local-storage
変数 LV を LocalVolume の名前に設定し、変数 SC を StorageClass の名前に設定します。
以下に例を示します。
$ LV=local-block $ SC=localblock
後にクリーンアップするデバイスをリスト表示し、これをメモします。
$ oc get localvolume -n openshift-local-storage $LV -o jsonpath='{ .spec.storageClassDevices[].devicePaths[] }{"\n"}'
出力例:
/dev/sdb /dev/sdc /dev/sdd /dev/sde
ローカルボリュームリソースを削除します。
$ 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/nvme2n1' 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/nvme2n1' 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/nvme2n1' removed directory '/mnt/local-storage/localblock' Removing debug pod ...
手順 1 から 8 にリスト表示されている各ローカルボリュームセットまたはローカルボリュームのディスクを消去して、それらを再利用できるようにします。
ストレージノードをリスト表示します。
oc get nodes -l cluster.ocs.openshift.io/openshift-storage=
出力例:
NAME STATUS ROLES AGE VERSION node-xxx Ready worker 4h45m v1.18.3+6c42de8 node-yyy Ready worker 4h46m v1.18.3+6c42de8 node-zzz Ready worker 4h45m v1.18.3+6c42de8
プロンプトが表示されたらノードコンソールを取得し、
chroot /host
コマンドを実行します。$ oc debug node/node-xxx Starting pod/node-xxx-debug … To use host binaries, run `chroot /host` Pod IP: w.x.y.z If you don't see a command prompt, try pressing enter. sh-4.2# chroot /host
ディスクパスを引用符内の DISKS 変数に保存します。ディスクパスのリストは、ローカルボリュームおよびローカルボリュームセットおよびボリュームのそれぞれについてステップ 3 およびステップ 8.c を参照してください。
出力例:
sh-4.4# DISKS="/dev/disk/by-id/scsi-360050763808104bc28000000000000eb /dev/disk/by-id/scsi-360050763808104bc28000000000000ef /dev/disk/by-id/scsi-360050763808104bc28000000000000f3 " or sh-4.2# DISKS="/dev/sdb /dev/sdc /dev/sdd /dev/sde ".
すべてのディスクで
sgdisk --zap-all
を実行します。sh-4.4# for disk in $DISKS; do sgdisk --zap-all $disk;done
出力例:
Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities.
シェルを終了し、他のノードについて手順を繰り返します。
sh-4.4# exit exit sh-4.2# exit exit 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