検索

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

download PDF

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 はアンインストールプロセスで削除されます。

手順

  1. 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=="ocs-storagecluster-ceph-rgw")]}{"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
  2. 以下の手順に従って、直前の手順に記載されている PVC および OBC が削除されていることを確認します。

    モニタリングスタック、クラスターロギング Operator、またはイメージレジストリーの設定の一部として PVC を作成した場合は、必要に応じて以下のセクションで説明されているクリーンアップ手順を実行する必要があります。

    • 「OpenShift Container Storage からのモニタリングスタックの削除」
    • 「OpenShift Container Storage からの OpenShift Container Platform レジストリーの削除」
    • 「OpenShift Container Storage からのクラスターロギング Operator の削除」

      残りの PVC または OBC のそれぞれに、以下の手順を実行します。

      1. PVC または OBC を使用する Pod を判別します。
      2. DeploymentStatefulSetDaemonSetJob、またはカスタムコントローラーなどの制御する側の API オブジェクトを特定します。

        各 API オブジェクトには、OwnerReference として知られるメタデータフィールドがあります。これは、関連付けられたオブジェクトの一覧です。controller フィールドが true に設定された OwnerReference は、ReplicaSetStatefulSetDaemonSet などの制御するオブジェクトを参照します。

      3. API オブジェクトが OpenShift Container Storage によって提供される PVC または OBC を使用していないことを確認します。オブジェクトを削除するか、ストレージを置き換える必要があります。プロジェクトオーナーに、オブジェクトを安全に削除または変更できることを確認するよう依頼します。

        注記

        noobaa Pod は無視できます。

      4. OBC を削除します。

        $ oc delete obc <obc name> -n <project name>
      5. 作成したカスタムバケットクラスを削除します。

        $ oc get bucketclass -A  | grep -v noobaa-default-bucket-class
        $ oc delete bucketclass <bucketclass name> -n <project-name>
      6. カスタム 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
      7. 手順 1 に記載されている残りの PVC を削除します。

        $ oc delete pvc <pvc name> -n <project-name>
  3. バッキングローカルボリュームオブジェクトを一覧表示し、これをメモします。結果がない場合は、手順 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

    出力例:

    StorageClass: localblock  LocalVolume: local-block
  4. StorageCluster オブジェクトを削除し、関連付けられたリソースが削除されるのを待機します。

    $ oc delete -n openshift-storage storagecluster --all --wait=true
  5. namespace を削除し、削除が完了するまで待機します。openshift-storage がアクティブなプロジェクトである場合、別のプロジェクトに切り替える必要があります。

    1. openshift-storage がアクティブな namespace の場合に別の namespace に切り替えます。

      以下は例になります。

      $ oc project default
    2. openshift-storage namespace を削除します。

      $ oc delete project openshift-storage --wait=true --timeout=5m
    3. 約 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 の終了をブロックしているオブジェクトを特定します。

  6. 各ノードでストレージ 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
  7. デプロイメント時に作成されたローカルボリュームを削除し、手順 3 に記載されている各ローカルボリュームについてこれを繰り返します。

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

    1. 変数 LV を LocalVolume の名前に設定し、変数 SC を手順 3 に一覧表示されている StorageClass の名前に設定します。

      以下に例を示します。

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

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

      出力例:

      /dev/disk/by-id/nvme-xxxxxx
      /dev/disk/by-id/nvme-yyyyyy
      /dev/disk/by-id/nvme-zzzzzz
    3. ローカルボリュームリソースを削除します。

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

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

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

    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. 手順 7(ii)で収集されたディスクパスを引用符内の DISKS 変数に保存します。

      sh-4.2# DISKS="/dev/disk/by-id/nvme-xxxxxx
      /dev/disk/by-id/nvme-yyyyyy /dev/disk/by-id/nvme-zzzzzz"
    4. すべてのディスクで sgdisk --zap-all を実行します。

      sh-4.4# for disk in $DISKS; do sgdisk --zap-all $disk;done

      出力例:

      Problem opening /dev/disk/by-id/nvme-xxxxxx 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-yyyyy 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.
      NOTE
      Ignore file-not-found warnings as they refer to disks that are on other machines.
    5. シェルを終了し、他のノードについて手順を繰り返します。

      sh-4.4# exit
      exit
      sh-4.2# exit
      exit
      
      Removing debug pod ...
  9. openshift-storage.noobaa.io ストレージクラスを削除します。

    $ oc delete storageclass  openshift-storage.noobaa.io --wait=true --timeout=5m
  10. ストレージノードのラベルを解除します。

    $ oc label nodes  --all cluster.ocs.openshift.io/openshift-storage-
    $ oc label nodes  --all topology.rook.io/rack-
    注記

    label <label> not found のようなラベルが解除されているノードについて表示される警告は無視できます。

  11. すべての PV が削除されていることを確認します。Released 状態のままの PV がある場合は、これを削除します。

    # oc get pv | egrep 'ocs-storagecluster-ceph-rbd|ocs-storagecluster-cephfs'
    # oc delete pv <pv name>
  12. 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
  13. OpenShift Container Platform Web コンソールで、OpenShift Container Storage が完全にアンインストールされていることを確認するには、以下を実行します。

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

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.