第3章 OpenShift Container Storage のアンインストール
3.1. 内部モードでの OpenShift Container Storage のアンインストール
このセクションの手順を使用して、ユーザーインターフェースから Uninstall オプションを使用せずに OpenShift Container Storage をアンインストールします。
前提条件
- OpenShift Container Storage クラスターの状態が正常であることを確認します。一部の Pod がリソースまたはノードの不足により正常に終了しないと、削除に失敗する可能性があります。クラスターが状態が正常でない場合は、OpenShift Container Storage をアンインストールする前に Red Hat カスタマーサポートにお問い合わせください。
- アプリケーションが OpenShift Container Storage によって提供されるストレージクラスを使用して Persistent Volume Claim(永続ボリューム要求、PVC)または Object Bucket Claim(オブジェクトバケット要求)を使用していないことを確認します。PVC および OBC はアンインストールプロセスで削除されます。
手順
OpenShift Container Storage ベースのストレージクラスプロビジョナーを使用する PVC および OBC をクエリーします。
以下は例になります。
$ oc get pvc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-ceph-rbd")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{" Labels: "}{@.metadata.labels}{"\n"}{end}' --all-namespaces|awk '! ( /Namespace: openshift-storage/ && /app:noobaa/ )' | grep -v noobaa-default-backing-store-noobaa-pvc
$ oc get pvc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-cephfs")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespaces
$ oc get obc -o=jsonpath='{range .items[?(@.spec.storageClassName=="openshift-storage.noobaa.io")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespaces
以下の手順に従って、直前の手順に記載されている PVC および OBC が削除されていることを確認します。
モニタリングスタック、クラスターロギング Operator、またはイメージレジストリーの設定の一部として PVC を作成した場合は、必要に応じて以下のセクションで説明されているクリーンアップ手順を実行する必要があります。
- 「OpenShift Container Storage からのモニタリングスタックの削除」
- 「OpenShift Container Storage からの OpenShift Container Platform レジストリーの削除」
「OpenShift Container Storage からのクラスターロギング Operator の削除」
残りの PVC または OBC のそれぞれに、以下の手順を実行します。
- PVC または OBC を使用する Pod を判別します。
Deployment
、StatefulSet
、DaemonSet
、Job
、またはカスタムコントローラーなどの制御する側の API オブジェクトを特定します。各 API オブジェクトには、
OwnerReference
として知られるメタデータフィールドがあります。これは、関連付けられたオブジェクトの一覧です。controller
フィールドが true に設定されたOwnerReference
は、ReplicaSet
、StatefulSet
、DaemonSet
などの制御するオブジェクトを参照します。API オブジェクトが OpenShift Container Storage によって提供される PVC または OBC を使用していないことを確認します。オブジェクトを削除するか、ストレージを置き換える必要があります。プロジェクトオーナーに、オブジェクトを安全に削除または変更できることを確認するよう依頼します。
注記noobaa
Pod は無視できます。OBC を削除します。
$ oc delete obc <obc name> -n <project name>
作成したカスタムバケットクラスを削除します。
$ oc get bucketclass -A | grep -v noobaa-default-bucket-class
$ oc delete bucketclass <bucketclass name> -n <project-name>
カスタム Multi Cloud Gateway バッキングストアを作成している場合は、それらを削除します。
バッキングストアの一覧を表示し、これらをメモします。
for bs in $(oc get backingstore -o name -n openshift-storage | grep -v noobaa-default-backing-store); do echo "Found backingstore $bs"; echo "Its has the following pods running :"; echo "$(oc get pods -o name -n openshift-storage | grep $(echo ${bs} | cut -f2 -d/))"; done
上記の各バッキングストアを削除し、依存するリソースも削除されていることを確認します。
for bs in $(oc get backingstore -o name -n openshift-storage | grep -v noobaa-default-backing-store); do echo "Deleting Backingstore $bs"; oc delete -n openshift-storage $bs; done
上上記のバッキングストアのいずれかが pv-pool をベースとする場合、対応する Pod および PVC も削除してください。
$ oc get pods -n openshift-storage | grep noobaa-pod | grep -v noobaa-default-backing-store-noobaa-pod
$ oc get pvc -n openshift-storage --no-headers | grep -v noobaa-db | grep noobaa-pvc | grep -v noobaa-default-backing-store-noobaa-pvc
手順 1 に記載されている残りの PVC を削除します。
$ oc delete pvc <pvc name> -n <project-name>
StorageCluster
オブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。$ oc delete -n openshift-storage storagecluster --all --wait=true
namespace を削除し、削除が完了するまで待機します。openshift-storage がアクティブなプロジェクトである場合、別のプロジェクトに切り替える必要があります。
openshift-storage がアクティブな namespace の場合に別の namespace に切り替えます。
以下は例になります。
$ oc project default
openshift-storage namespace を削除します。
$ oc delete project openshift-storage --wait=true --timeout=5m
約 5 分間待機し、プロジェクトが正常に削除されたかどうかを確認します。
$ oc get project openshift-storage
出力:
Error from server (NotFound): namespaces "openshift-storage" not found
注記OpenShift Container Storage のアンインストール時に、namespace が完全に削除されず、Terminating 状態のままである場合は、Troubleshooting and deleting remaining resources during Uninstall の記事に記載の手順を実行して namespace の終了をブロックしているオブジェクトを特定します。
各ノードでストレージ Operator アーティファクトをクリーンアップします。
$ 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 /var/lib/rook; done
削除されたディレクトリー
/var/lib/rook
が出力に表示されることを確認します。ディレクトリーが存在しないことを確認します。
$ 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-storage.noobaa.io
ストレージクラスを削除します。$ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
ストレージノードのラベルを解除します。
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage-
$ oc label nodes --all topology.rook.io/rack-
注記label <label> not found のようなラベルが解除されているノードについて表示される警告は無視できます。
すべての PV が削除されていることを確認します。Released 状態のままの PV がある場合は、これを削除します。
# oc get pv | egrep 'ocs-storagecluster-ceph-rbd|ocs-storagecluster-cephfs'
# oc delete pv <pv name>
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 storageclusterinitializations.ocs.openshift.io storageclusters.ocs.openshift.io cephclients.ceph.rook.io --wait=true --timeout=5m
注記Microsoft Azure で OpenShift Container Storage クラスターをアンインストールすると、ターゲットバケットに保存されているすべての OpenShift Container Storage データが削除されますが、ユーザーによって作成されたターゲットバケットや、OpenShift Container Storage のインストール時に自動的に作成されたターゲットバケットは削除されず、OpenShift Container Storage に属していないデータはこれらのターゲットバケットに残ります。
OpenShift Container Platform Web コンソールで、OpenShift Container Storage が完全にアンインストールされていることを確認するには、以下を実行します。
- Home → Overview をクリックし、ダッシュボードにアクセスします。
- Persistent Storage および Object Service タブが Cluster タブの横に表示されないことを確認します。