Menu Close
第3章 OpenShift Container Platform のアンインストール
このセクションの手順を使用して、ユーザーインターフェースから Uninstall オプションを使用せずに OpenShift Container Storage をアンインストールします。
前提条件
- OpenShift Container Storage クラスターの状態が正常であることを確認します。一部の Pod がリソースまたはノードの不足により正常に終了しないと、削除に失敗する可能性があります。クラスターが状態が正常でない場合は、OpenShift Container Storage をアンインストールする前に Red Hat カスタマーサポートにお問い合わせください。
- OpenShift Container Storage ストレージクラスに基づいて Persistent Volume Claim(永続ボリューム要求、PVC)または Object Bucket Claim (オブジェクトバケット要求、OBC) を使用するアプリケーションを削除してから、OpenShift Container Storage ストレージクラスを使用している PVC および OBC を削除します。
手順
ストレージクラスを一覧表示し、以下のストレージクラスプロビジョナーのストレージクラスをメモします。
-
openshift-storage.rbd.csi.ceph.com
-
openshift-storage.cephfs.csi.ceph.com
openshift-storage.noobaa.io/obc
以下は例になります。
$ oc get storageclasses NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-premium (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true 113m ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate false 95m ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate false 95m openshift-storage.noobaa.io openshift-storage.noobaa.io/obc Delete Immediate false 90m
-
直前の手順に記載されているストレージクラスプロビジョナーを使用している 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/ )'
$ 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
注記openshift-storage
namespace の NooBaa PVC を無視します。以下の手順に従って、直前の手順に記載されている PVC が削除されていることを確認します。
- PVC を使用する Pod を判別します。
Deployment
、StatefulSet
、DeamonSet
、Job
、またはカスタムコントローラーなどの制御する側のオブジェクトを特定します。各オブジェクトには、
OwnerReference
として知られるメタデータフィールドがあります。これは、関連付けられたオブジェクトの一覧です。controller
フィールドがtrue
に設定されたOwnerReference
は、ReplicaSet
、StatefulSet
、DaemonSet
などの制御する側のオブジェクトをポイントします。- プロジェクトの所有者を確認してからこれを削除し、オブジェクトを安全に削除できるようにします。
PVC および OBC を削除します。
$ oc delete pvc <pvc name> -n <project-name> $ oc delete obc <obc name> -n <project name>
モニタリングスタック、クラスターロギング Operator、または prometheus レジストリーの設定の一部として PVC を作成した場合は、必要に応じて以下のセクションで説明されているクリーンアップ手順を実行する必要があります。
バッキングローカルボリュームオブジェクトを一覧表示し、これをメモします。結果が見つからない場合は、ステップ 8 および 9 を省略します。
$ 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
StorageClass: localblock LocalVolume: local-block
StorageCluster
オブジェクトを削除します。$ oc delete -n openshift-storage storagecluster --all --wait=true
namespace を削除し、削除が完了するまで待機します。
$ oc delete project openshift-storage --wait=true --timeout=5m
注記openshift-storage がアクティブなプロジェクトであった場合には、別のプロジェクトに切り替える必要があります。
以下は例になります。
$ oc project default
各ノードでストレージ 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
removed directory /var/lib/rook が出力に表示されることを確認します。
Starting pod/ip-10-0-134-65us-east-2computeinternal-debug ... To use host binaries, run `chroot /host` removed '/var/lib/rook/openshift-storage/log/ocs-deviceset-2-0-gk22s/ceph-volume.log' removed directory '/var/lib/rook/openshift-storage/log/ocs-deviceset-2-0-gk22s' removed '/var/lib/rook/openshift-storage/log/ceph-osd.2.log' removed '/var/lib/rook/openshift-storage/log/ceph-volume.log' removed directory '/var/lib/rook/openshift-storage/log' removed directory '/var/lib/rook/openshift-storage/crash/posted' removed directory '/var/lib/rook/openshift-storage/crash' removed '/var/lib/rook/openshift-storage/client.admin.keyring' removed '/var/lib/rook/openshift-storage/openshift-storage.config' removed directory '/var/lib/rook/openshift-storage' removed '/var/lib/rook/osd2/openshift-storage.config' removed directory '/var/lib/rook/osd2' removed directory '/var/lib/rook' Removing debug pod ... Starting pod/ip-10-0-155-149us-east-2computeinternal-debug ... . . removed directory '/var/lib/rook' Removing debug pod ... Starting pod/ip-10-0-162-89us-east-2computeinternal-debug ... . . removed directory '/var/lib/rook' Removing debug pod ...
デプロイメント時に作成されたローカルボリュームを削除し、手順 4 に記載されている各ローカルボリュームについてこれを実行します。
ローカルボリュームごとに、以下を実行します。
変数
LV
を LocalVolume の名前に設定し、変数SC
を StorageClass の名前に設定します。以下は例になります。
$ LV=local-block $ SC=localblock
後にクリーンアップするデバイスを一覧表示し、これをメモします。
$ oc get localvolume -n local-storage $LV -o jsonpath='{ .spec.storageClassDevices[*].devicePaths[*] }'
/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol078f5cdde09efc165 /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0defc1d5e2dd07f9e /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0c8e82a3beeb7b7e5
ローカルボリュームリソースを削除します。
$ oc delete localvolume -n 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/ip-10-0-141-2us-east-2computeinternal-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/ip-10-0-144-55us-east-2computeinternal-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/ip-10-0-175-34us-east-2computeinternal-debug ... To use host binaries, run `chroot /host` removed '/mnt/local-storage/localblock/nvme2n1' removed directory '/mnt/local-storage/localblock' Removing debug pod ...
手順 4 に一覧表示されている各ローカルボリュームのディスクを消去して、それらを再利用できるようにします。
ストレージノードを一覧表示します。
oc get nodes -l cluster.ocs.openshift.io/openshift-storage=
NAME STATUS ROLES AGE VERSION ip-10-0-134-65.us-east-2.compute.internal Ready worker 4h45m v1.17.1 ip-10-0-155-149.us-east-2.compute.internal Ready worker 4h46m v1.17.1 ip-10-0-162-89.us-east-2.compute.internal Ready worker 4h45m v1.17.1
プロンプトが表示されたらノードコンソールを取得し、
chroot /host
コマンドを実行します。$ oc debug node/ip-10-0-134-65.us-east-2.compute.internal Starting pod/ip-10-0-134-65us-east-2computeinternal-debug ... To use host binaries, run `chroot /host` Pod IP: 10.0.134.65 If you don't see a command prompt, try pressing enter. sh-4.2# chroot /host
手順 8 (ii) で収集されたディスクパスを引用符内の
DISKS
変数に保存します。sh-4.2# DISKS="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol078f5cdde09efc165 /dev/disk/by-id/nvme-Amazon_Elasti_Block_Store_vol0defc1d5e2dd07f9e /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0c8e82a3beeb7b7e5"
すべてのディスクで
sgdisk --zap-all
を実行します。sh-4.4# for disk in $DISKS; do sgdisk --zap-all $disk;done
Problem opening /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol078f5cdde09efc165 for reading! Error is 2. The specified file does not exist! Problem opening '' for writing! Program will now terminate. Warning! MBR not overwritten! Error is 2! Problem opening /dev/disk/by-id/nvme-Amazon_Elasti_Block_Store_vol0defc1d5e2dd07f9e for reading! Error is 2. The specified file does not exist! Problem opening '' for writing! Program will now terminate. Warning! MBR not overwritten! Error is 2! Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities.
注記他のマシンにあるディスクを参照していることから、「file-not-found」(ファイルが見つからない) という警告を無視します。
シェルを終了し、他のノードについて手順を繰り返します。
sh-4.4# exit exit sh-4.2# exit exit Removing debug pod ...
手順 1 で一覧表示されている
openshift-storage
プロビジョナーの設定されているストレージクラスを削除します。$ oc delete storageclass <storageclass-name> --wait=true --timeout=5m
以下は例になります。
$ oc delete storageclass ocs-storagecluster-ceph-rbd ocs-storagecluster-cephfs 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
のようなラベルが解除されているノードについて表示される警告は無視できます。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 --wait=true --timeout=5m
注記AWS で OpenShift Container Storage クラスターをアンインストールすると、ターゲットバケットに保存されているすべての OpenShift Container Storage データが削除されますが、ユーザーによって作成されたターゲットバケットや、OpenShift Container Storage のインストール時に自動的に作成されたターゲットバケットは削除されず、OpenShift Container Storage に属していないデータはこれらのターゲットバケットに残ります。
- OpenShift Container Storage がアンインストールされていることを確認するには、openshift-storage namespace がすでに存在しておらず、ストレージダッシュボードが UI に表示されないことを確認します。
OpenShift Container Storage のアンインストール時に、namespace が完全に削除されず、Terminating
状態のままである場合は、https://access.redhat.com/solutions/3881901 の記事を参照して namespace の終了をブロックしているオブジェクトを特定します。Cephcluster
、StorageCluster
、NooBaa
、および PVC
などの OpenShift オブジェクトにファイナライザーがある場合、それは namespace が Terminating
の状態であることが原因である可能性があります。PVC にファイナライザーがある場合、関連付けられた Pod を削除してファイナライザーを削除します。
3.1. OpenShift Container Storage からのモニタリングスタックの削除
このセクションでは、モニタリングスタックを OpenShift Container Storage からクリーンアップします。
モニタリングスタックの設定の一部として作成される PVC は openshift-monitoring
namespace に置かれます。
前提条件
PVC は OpenShift Container Platform モニタリングスタックを使用できるように設定されます。
詳細は、「モニタリングスタックの設定」を参照してください。
手順
openshift-monitoring
namespace で現在実行されている Pod および PVC を一覧表示します。$ oc get pod,pvc -n openshift-monitoring NAME READY STATUS RESTARTS AGE pod/alertmanager-main-0 3/3 Running 0 8d pod/alertmanager-main-1 3/3 Running 0 8d pod/alertmanager-main-2 3/3 Running 0 8d pod/cluster-monitoring- operator-84457656d-pkrxm 1/1 Running 0 8d pod/grafana-79ccf6689f-2ll28 2/2 Running 0 8d pod/kube-state-metrics- 7d86fb966-rvd9w 3/3 Running 0 8d pod/node-exporter-25894 2/2 Running 0 8d pod/node-exporter-4dsd7 2/2 Running 0 8d pod/node-exporter-6p4zc 2/2 Running 0 8d pod/node-exporter-jbjvg 2/2 Running 0 8d pod/node-exporter-jj4t5 2/2 Running 0 6d18h pod/node-exporter-k856s 2/2 Running 0 6d18h pod/node-exporter-rf8gn 2/2 Running 0 8d pod/node-exporter-rmb5m 2/2 Running 0 6d18h pod/node-exporter-zj7kx 2/2 Running 0 8d pod/openshift-state-metrics- 59dbd4f654-4clng 3/3 Running 0 8d pod/prometheus-adapter- 5df5865596-k8dzn 1/1 Running 0 7d23h pod/prometheus-adapter- 5df5865596-n2gj9 1/1 Running 0 7d23h pod/prometheus-k8s-0 6/6 Running 1 8d pod/prometheus-k8s-1 6/6 Running 1 8d pod/prometheus-operator- 55cfb858c9-c4zd9 1/1 Running 0 6d21h pod/telemeter-client- 78fc8fc97d-2rgfp 3/3 Running 0 8d NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-0 Bound pvc-0d519c4f-15a5-11ea-baa0-026d231574aa 40Gi RWO ocs-storagecluster-ceph-rbd 8d persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-1 Bound pvc-0d5a9825-15a5-11ea-baa0-026d231574aa 40Gi RWO ocs-storagecluster-ceph-rbd 8d persistentvolumeclaim/my-alertmanager-claim-alertmanager-main-2 Bound pvc-0d6413dc-15a5-11ea-baa0-026d231574aa 40Gi RWO ocs-storagecluster-ceph-rbd 8d persistentvolumeclaim/my-prometheus-claim-prometheus-k8s-0 Bound pvc-0b7c19b0-15a5-11ea-baa0-026d231574aa 40Gi RWO ocs-storagecluster-ceph-rbd 8d persistentvolumeclaim/my-prometheus-claim-prometheus-k8s-1 Bound pvc-0b8aed3f-15a5-11ea-baa0-026d231574aa 40Gi RWO ocs-storagecluster-ceph-rbd 8d
モニタリング
configmap
を編集します。$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
以下の例が示すように、OpenShift Container Storage ストレージクラスを参照する
config
セクションを削除し、これを保存します。Before editing
. . . apiVersion: v1 data: config.yaml: | alertmanagerMain: volumeClaimTemplate: metadata: name: my-alertmanager-claim spec: resources: requests: storage: 40Gi storageClassName: ocs-storagecluster-ceph-rbd prometheusK8s: volumeClaimTemplate: metadata: name: my-prometheus-claim spec: resources: requests: storage: 40Gi storageClassName: ocs-storagecluster-ceph-rbd kind: ConfigMap metadata: creationTimestamp: "2019-12-02T07:47:29Z" name: cluster-monitoring-config namespace: openshift-monitoring resourceVersion: "22110" selfLink: /api/v1/namespaces/openshift-monitoring/configmaps/cluster-monitoring-config uid: fd6d988b-14d7-11ea-84ff-066035b9efa8 . . .
After editing
. . . apiVersion: v1 data: config.yaml: | kind: ConfigMap metadata: creationTimestamp: "2019-11-21T13:07:05Z" name: cluster-monitoring-config namespace: openshift-monitoring resourceVersion: "404352" selfLink: /api/v1/namespaces/openshift-monitoring/configmaps/cluster-monitoring-config uid: d12c796a-0c5f-11ea-9832-063cd735b81c . . .
この例では、
alertmanagerMain
およびprometheusK8s
モニタリングコンポーネントは OpenShift Container Storage PVC を使用しています。PVC を使用する Pod を一覧表示します。
この例では、PVC を使用していた
alertmanagerMain
およびprometheusK8s
Pod はTerminating
状態にあります。これらの Pod が OpenShift Container Storage PVC を使用しなくなった後に PVC を削除できます。$ oc get pod,pvc -n openshift-monitoring NAME READY STATUS RESTARTS AGE pod/alertmanager-main-0 3/3 Terminating 0 10h pod/alertmanager-main-1 3/3 Terminating 0 10h pod/alertmanager-main-2 3/3 Terminating 0 10h pod/cluster-monitoring-operator-84cd9df668-zhjfn 1/1 Running 0 18h pod/grafana-5db6fd97f8-pmtbf 2/2 Running 0 10h pod/kube-state-metrics-895899678-z2r9q 3/3 Running 0 10h pod/node-exporter-4njxv 2/2 Running 0 18h pod/node-exporter-b8ckz 2/2 Running 0 11h pod/node-exporter-c2vp5 2/2 Running 0 18h pod/node-exporter-cq65n 2/2 Running 0 18h pod/node-exporter-f5sm7 2/2 Running 0 11h pod/node-exporter-f852c 2/2 Running 0 18h pod/node-exporter-l9zn7 2/2 Running 0 11h pod/node-exporter-ngbs8 2/2 Running 0 18h pod/node-exporter-rv4v9 2/2 Running 0 18h pod/openshift-state-metrics-77d5f699d8-69q5x 3/3 Running 0 10h pod/prometheus-adapter-765465b56-4tbxx 1/1 Running 0 10h pod/prometheus-adapter-765465b56-s2qg2 1/1 Running 0 10h pod/prometheus-k8s-0 6/6 Terminating 1 9m47s pod/prometheus-k8s-1 6/6 Terminating 1 9m47s pod/prometheus-operator-cbfd89f9-ldnwc 1/1 Running 0 43m pod/telemeter-client-7b5ddb4489-2xfpz 3/3 Running 0 10h NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-0 Bound pvc-2eb79797-1fed-11ea-93e1-0a88476a6a64 40Gi RWO ocs-storagecluster-ceph-rbd 19h persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-1 Bound pvc-2ebeee54-1fed-11ea-93e1-0a88476a6a64 40Gi RWO ocs-storagecluster-ceph-rbd 19h persistentvolumeclaim/ocs-alertmanager-claim-alertmanager-main-2 Bound pvc-2ec6a9cf-1fed-11ea-93e1-0a88476a6a64 40Gi RWO ocs-storagecluster-ceph-rbd 19h persistentvolumeclaim/ocs-prometheus-claim-prometheus-k8s-0 Bound pvc-3162a80c-1fed-11ea-93e1-0a88476a6a64 40Gi RWO ocs-storagecluster-ceph-rbd 19h persistentvolumeclaim/ocs-prometheus-claim-prometheus-k8s-1 Bound pvc-316e99e2-1fed-11ea-93e1-0a88476a6a64 40Gi RWO ocs-storagecluster-ceph-rbd 19h
関連する PVC を削除します。ストレージクラスを使用するすべての PVC を削除してください。
$ oc delete -n openshift-monitoring pvc <pvc-name> --wait=true --timeout=5m