第3章 OpenShift Container Storage のアンインストール

3.1. 内部接続デバイスモードの OpenShift Container Storage のアンインストール

このセクションの手順に従って OpenShift Container Storage をアンインストールします。

アノテーションのアンインストール

Storage Cluster のアノテーションは、アンインストールプロセスの動作を変更するために使用されます。アンインストールの動作を定義するために、ストレージクラスターに以下の 2 つのアノテーションが導入されました。

  • uninstall.ocs.openshift.io/cleanup-policy: delete
  • uninstall.ocs.openshift.io/mode: graceful

以下の表は、これらのアノテーションで使用できる各種値に関する情報を示しています。

表3.1 uninstall.ocs.openshift.io でアノテーションの説明をアンインストールする

Annotationデフォルト動作

cleanup-policy

delete

はい

Rook は物理ドライブおよび DataDirHostPath をクリーンアップします。

cleanup-policy

Retain

いいえ

Rook は物理ドライブおよび DataDirHostPath をクリーンアップ しません

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 など) が管理者によって作成された場合、それらを消費したリソースを削除した後に管理者によって削除される必要があります。

手順

  1. OpenShift Container Storage を使用しているボリュームスナップショットを削除します。

    1. すべての namespace からボリュームスナップショットを一覧表示します。

      $ oc get volumesnapshot --all-namespaces
    2. 直前のコマンドの出力から、OpenShift Container Storage を使用しているボリュームスナップショットを特定し、削除します。

      $ oc delete volumesnapshot <VOLUME-SNAPSHOT-NAME> -n <NAMESPACE>
  2. OpenShift Container Storage を使用している PVC および OBC を削除します。

    デフォルトのアンインストールモード (graceful) では、アンインストーラーは OpenShift Container Storage を使用するすべての PVC および OBC が削除されるまで待機します。

    PVC を事前に削除せずに Storage Cluster を削除する場合は、アンインストールモードのアノテーションを forced に設定し、この手順を省略できます。これを実行すると、孤立した PVC および OBC がシステムに作成されます。

    1. OpenShift Container Storage を使用して、OpenShift Container Platform モニターリングスタック PVC を削除します。

      「OpenShift Container Storage からのモニターリングスタックの削除」 を参照

    2. OpenShift Container Storage を使用して、OpenShift Container Platform レジストリー PVC を削除します。

      「OpenShift Container Storage からの OpenShift Container Platform レジストリーの削除」 を参照

    3. OpenShift Container Storage を使用して、OpenShift Container Platform ロギング PVC を削除します。

      「OpenShift Container Storage からのクラスターロギング Operator の削除」 を参照

  3. Storage Cluster オブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。

    $ oc delete -n openshift-storage storagecluster --all --wait=true
  4. uninstall.ocs.openshift.io/cleanup-policydelete (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
  5. /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
  6. 暗号化がインストール時に有効にされている場合は、すべての OpenShift Container Storage ノードの OSD デバイスから dm-crypt で管理される device-mapper マッピングを削除します。

    1. デバッグ Pod を作成し、ストレージノードのホストに対して chroot を作成します。

      $ oc debug node/<node name>
      $ chroot /host
    2. デバイス名を取得し、OpenShift Container Storage デバイスについてメモします。

      $ dmsetup ls
      ocs-deviceset-0-data-0-57snx-block-dmcrypt (253:1)
    3. マップ済みデバイスを削除します。

      $ cryptsetup luksClose --debug --verbose ocs-deviceset-0-data-0-57snx-block-dmcrypt
      注記

      権限が十分にないため、コマンドがスタックした場合には、以下のコマンドを実行します。

      • CTRL+Z を押して上記のコマンドを終了します。
      • スタックしたプロセスの PID を検索します。

        $ ps -ef | grep crypt
      • kill コマンドを使用してプロセスを終了します。

        $ kill -9 <PID>
      • デバイス名が削除されていることを確認します。

        $ dmsetup ls
  7. namespace を削除し、削除が完了するまで待機します。openshift-storage がアクティブなプロジェクトである場合は、別のプロジェクトに切り替える必要があります。

    以下に例を示します。

    $ oc project default
    $ oc delete project openshift-storage

    以下のコマンドが NotFound エラーを返すと、プロジェクトが削除されます。

    $ oc get project openshift-storage
    注記

    OpenShift Container Storage のアンインストール時に、namespace が完全に削除されず、Terminating 状態のままである場合は、トラブルシューティングおよびアンインストール時の残りのリソースの削除 の記事に記載の手順を実行して namespace の終了をブロックしているオブジェクトを特定します。

  8. ローカルストレージデバイスを使用して OpenShift Container Storage をデプロイした場合には、ローカルのストレージ Operator 設定を削除します。ローカルストレージ Operator の設定の削除 を参照してください。
  9. ストレージノードのラベルを解除します。

    $ oc label nodes  --all cluster.ocs.openshift.io/openshift-storage-
    $ oc label nodes  --all topology.rook.io/rack-
  10. ノードにテイントのマークが付けられている場合に OpenShift Container Storage テイントを削除します。

    $ oc adm taint nodes --all node.ocs.openshift.io/storage-
  11. OpenShift Container Storage を使用してプロビジョニングした PV がすべて削除されていることを確認します。Released 状態のままの PV がある場合は、これを削除します。

    $ oc get pv
    $ oc delete pv <pv name>
  12. Multicloud Object Gateway storageclass を削除します。

    $ oc delete storageclass openshift-storage.noobaa.io --wait=true --timeout=5m
  13. 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
  14. OpenShift Container Platform Web コンソールで、OpenShift Container Storage が完全にアンインストールされていることを確認するには、以下を実行します。

    1. Home → Overview をクリックし、ダッシュボードにアクセスします。
    2. Persistent Storage および Object Service タブが Cluster タブの横に表示されなくなることを確認します。

3.1.1. ローカルストレージ Operator の設定の削除

ローカルストレージデバイスを使用して OpenShift Container Storage をデプロイした場合にのみ、本セクションの手順を使用します。

注記

OpenShift Container Storage デプロイメントで localvolume リソースのみを使用する場合は、直接、手順 8 に移動します。

手順

  1. LocalVolumeSet および OpenShift Container Storage で使用される対応する StorageClassName を特定します。

    $ oc get localvolumesets.local.storage.openshift.io -n openshift-local-storage
  2. LocalVolumeSet を提供する StorageClass に変数 SC を設定します。

    $ export SC="<StorageClassName>"
  3. 後にクリーンアップするデバイスを一覧表示し、これをメモします。ディスクのデバイス ID を一覧表示するには、ここで説明されている手順に従います。利用可能なストレージデバイスの検索 について参照してください。

    出力例:

    /dev/disk/by-id/scsi-360050763808104bc28000000000000eb
    /dev/disk/by-id/scsi-360050763808104bc28000000000000ef
    /dev/disk/by-id/scsi-360050763808104bc28000000000000f3
  4. LocalVolumeSet を削除します。

    $ oc delete localvolumesets.local.storage.openshift.io <name-of-volumeset> -n openshift-local-storage
  5. 指定された StorageClassName のローカルストレージ PV を削除します。

    $ oc get pv | grep $SC | awk '{print $1}'| xargs oc delete pv
  6. StorageClassName を削除します。

    $ oc delete sc $SC
  7. 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
  8. LocalVolumeDiscovery を削除します。

    $ oc delete localvolumediscovery.local.storage.openshift.io/auto-discover-devices -n openshift-local-storage
  9. LocalVolume リソースを削除します (ある場合)。

    以下の手順を使用して、現行または直前の OpenShift Container Storage バージョンで PV のプロビジョニングに使用した LocalVolume リソースを削除します。また、これらのリソースがクラスターの他のテナントで使用されていないことを確認します。

    ローカルボリュームごとに、以下を実行します。

    1. LocalVolume および OpenShift Container Storage で使用される対応する StorageClassName を特定します。

      $ oc get localvolume.local.storage.openshift.io -n openshift-local-storage
    2. 変数 LV を LocalVolume の名前に設定し、変数 SC を StorageClass の名前に設定します。

      以下に例を示します。

      $ LV=local-block
      $ SC=localblock
    3. 後にクリーンアップするデバイスを一覧表示し、これをメモします。

      $ oc get localvolume -n openshift-local-storage $LV -o jsonpath='{ .spec.storageClassDevices[].devicePaths[] }{"\n"}'

      出力例:

      /dev/sdb
      /dev/sdc
      /dev/sdd
      /dev/sde
    4. ローカルボリュームリソースを削除します。

      $ oc delete localvolume -n openshift-local-storage --wait=true $LV
    5. 残りの PV および StorageClass が存在する場合はこれらを削除します。

      $ oc delete pv -l storage.openshift.com/local-volume-owner-name=${LV} --wait --timeout=5m
      $ oc delete storageclass $SC --wait --timeout=5m
    6. そのリソースのストレージノードからアーティファクトをクリーンアップします。

      $ [[ ! -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 ...
  10. 手順 1 から 8 に一覧表示されている各ローカルボリュームセットまたはローカルボリュームのディスクを消去して、それらを再利用できるようにします。

    1. ストレージノードを一覧表示します。

      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
    2. プロンプトが表示されたらノードコンソールを取得し、 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
    3. ディスクパスを引用符内の 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 ".
    4. すべてのディスクで 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.
    5. シェルを終了し、他のノードについて手順を繰り返します。

      sh-4.4# exit
      exit
      sh-4.2# exit
      exit
      Removing debug pod ...
  11. 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