OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
第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-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-pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pvc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-cephfs")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespaces$ oc get pvc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-cephfs")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get obc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-ceph-rgw")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespaces$ oc get obc -o=jsonpath='{range .items[?(@.spec.storageClassName=="ocs-storagecluster-ceph-rgw")]}{"Name: "}{@.metadata.name}{" Namespace: "}{@.metadata.namespace}{"\n"}{end}' --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get obc -o=jsonpath='{range .items[?(@.spec.storageClassName=="openshift-storage.noobaa.io")]}{"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-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の手順に従って、直前の手順に記載されている 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 を使用していないことを確認します。オブジェクトを削除するか、ストレージを置き換える必要があります。プロジェクトオーナーに、オブジェクトを安全に削除または変更できることを確認するよう依頼します。
注記noobaaPod は無視できます。OBC を削除します。
oc delete obc <obc name> -n <project name>
$ oc delete obc <obc name> -n <project name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成したカスタムバケットクラスを削除します。
oc get bucketclass -A | grep -v noobaa-default-bucket-class
$ oc get bucketclass -A | grep -v noobaa-default-bucket-classCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete bucketclass <bucketclass name> -n <project-name>
$ oc delete bucketclass <bucketclass name> -n <project-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタム 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/))"; donefor 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/))"; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の各バッキングストアを削除し、依存するリソースも削除されていることを確認します。
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
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; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上上記のバッキングストアのいずれかが pv-pool をベースとする場合、対応する Pod および PVC も削除してください。
oc get pods -n openshift-storage | grep noobaa-pod | grep -v noobaa-default-backing-store-noobaa-pod
$ oc get pods -n openshift-storage | grep noobaa-pod | grep -v noobaa-default-backing-store-noobaa-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pvc -n openshift-storage --no-headers | grep -v noobaa-db | grep noobaa-pvc | grep -v noobaa-default-backing-store-noobaa-pvc
$ oc get pvc -n openshift-storage --no-headers | grep -v noobaa-db | grep noobaa-pvc | grep -v noobaa-default-backing-store-noobaa-pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順 1 に記載されている残りの PVC を削除します。
oc delete pvc <pvc name> -n <project-name>
$ oc delete pvc <pvc name> -n <project-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
バッキングローカルボリュームオブジェクトを一覧表示し、これをメモします。結果がない場合は、手順 7 と 8 に進みます。
for sc in $(oc get storageclass|grep 'kubernetes.io/no-provisioner' |grep -E $(oc get storagecluster -n openshift-storage -o jsonpath='{ .items[*].spec.storageDeviceSets[*].dataPVCTemplate.spec.storageClassName}' | sed 's/ /|/g')| awk '{ print $1 }'); do echo -n "StorageClass: $sc "; oc get storageclass $sc -o jsonpath=" { 'LocalVolume: ' }{ .metadata.labels['local\.storage\.openshift\.io/owner-name'] } { '\n' }"; done$ for sc in $(oc get storageclass|grep 'kubernetes.io/no-provisioner' |grep -E $(oc get storagecluster -n openshift-storage -o jsonpath='{ .items[*].spec.storageDeviceSets[*].dataPVCTemplate.spec.storageClassName}' | sed 's/ /|/g')| awk '{ print $1 }'); do echo -n "StorageClass: $sc "; oc get storageclass $sc -o jsonpath=" { 'LocalVolume: ' }{ .metadata.labels['local\.storage\.openshift\.io/owner-name'] } { '\n' }"; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
StorageClass: localblock LocalVolume: local-block
StorageClass: localblock LocalVolume: local-blockCopy to Clipboard Copied! Toggle word wrap Toggle overflow StorageClusterオブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。oc delete -n openshift-storage storagecluster --all --wait=true
$ oc delete -n openshift-storage storagecluster --all --wait=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow namespace を削除し、削除が完了するまで待機します。openshift-storage がアクティブなプロジェクトである場合、別のプロジェクトに切り替える必要があります。
openshift-storage がアクティブな namespace の場合に別の namespace に切り替えます。
以下は例になります。
oc project default
$ oc project defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-storage namespace を削除します。
oc delete project openshift-storage --wait=true --timeout=5m
$ oc delete project openshift-storage --wait=true --timeout=5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 約 5 分間待機し、プロジェクトが正常に削除されたかどうかを確認します。
oc get project openshift-storage
$ oc get project openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力:
Error from server (NotFound): namespaces "openshift-storage" not found
Error from server (NotFound): namespaces "openshift-storage" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記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$ 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; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 削除されたディレクトリー
/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$ 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; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメント時に作成されたローカルボリュームを削除し、手順 3 に記載されている各ローカルボリュームについてこれを繰り返します。
ローカルボリュームごとに、以下を実行します。
変数
LVを LocalVolume の名前に設定し、変数SCを手順 3 に一覧表示されている StorageClass の名前に設定します。以下に例を示します。
LV=local-block
$ LV=local-blockCopy to Clipboard Copied! Toggle word wrap Toggle overflow SC=localblock
$ SC=localblockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 後にクリーンアップするデバイスを一覧表示し、これをメモします。
oc get localvolume -n local-storage $LV -o jsonpath='{ .spec.storageClassDevices[*].devicePaths[*] }'$ oc get localvolume -n local-storage $LV -o jsonpath='{ .spec.storageClassDevices[*].devicePaths[*] }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
/dev/disk/by-id/nvme-xxxxxx /dev/disk/by-id/nvme-yyyyyy /dev/disk/by-id/nvme-zzzzzz
/dev/disk/by-id/nvme-xxxxxx /dev/disk/by-id/nvme-yyyyyy /dev/disk/by-id/nvme-zzzzzzCopy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルボリュームリソースを削除します。
oc delete localvolume -n local-storage --wait=true $LV
$ oc delete localvolume -n local-storage --wait=true $LVCopy to Clipboard Copied! Toggle word wrap Toggle overflow 残りの PV および StorageClass が存在する場合はこれらを削除します。
oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5m$ oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete storageclass $SC --wait --timeout=5m
$ oc delete storageclass $SC --wait --timeout=5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow そのリソースのストレージノードからアーティファクトをクリーンアップします。
[[ ! -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$ [[ ! -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}/; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順 3 に一覧表示されている各ローカルボリュームのディスクを消去して、それらを再利用できるようにします。
ストレージノードを一覧表示します。
oc get nodes -l cluster.ocs.openshift.io/openshift-storage=
$ oc get nodes -l cluster.ocs.openshift.io/openshift-storage=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
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
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+6c42de8Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロンプトが表示されたらノードコンソールを取得し、
chroot /hostコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手順 7(ii)で収集されたディスクパスを引用符内の
DISKS変数に保存します。DISKS="/dev/disk/by-id/nvme-xxxxxx
sh-4.2# DISKS="/dev/disk/by-id/nvme-xxxxxx /dev/disk/by-id/nvme-yyyyyy /dev/disk/by-id/nvme-zzzzzz"Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのディスクで
sgdisk --zap-allを実行します。for disk in $DISKS; do sgdisk --zap-all $disk;done
sh-4.4# for disk in $DISKS; do sgdisk --zap-all $disk;doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルを終了し、他のノードについて手順を繰り返します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
openshift-storage.noobaa.ioストレージクラスを削除します。oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
$ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow ストレージノードのラベルを解除します。
oc label nodes --all cluster.ocs.openshift.io/openshift-storage-
$ oc label nodes --all cluster.ocs.openshift.io/openshift-storage-Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label nodes --all topology.rook.io/rack-
$ oc label nodes --all topology.rook.io/rack-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記label <label> not found のようなラベルが解除されているノードについて表示される警告は無視できます。
すべての PV が削除されていることを確認します。Released 状態のままの PV がある場合は、これを削除します。
oc get pv | egrep 'ocs-storagecluster-ceph-rbd|ocs-storagecluster-cephfs'
# oc get pv | egrep 'ocs-storagecluster-ceph-rbd|ocs-storagecluster-cephfs'Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pv <pv name>
# oc delete pv <pv name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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=5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform Web コンソールで、OpenShift Container Storage が完全にアンインストールされていることを確認するには、以下を実行します。
-
Home
Overview をクリックし、ダッシュボードにアクセスします。 - Persistent Storage および Object Service タブが Cluster タブの横に表示されないことを確認します。
-
Home