9.2. VMware への OpenShift Container Storage の動的プロビジョニング

9.2.1. VMware のユーザーによってプロビジョニングされるインフラストラクチャーで動作するストレージデバイスまたは失敗したストレージデバイスの置き換え

この手順は、VMware インフラストラクチャーに動的にデプロイされる OpenShift Container Storage で仮想マシンディスク(VMDK) を置き換える必要がある場合に使用します。この手順は、新規ボリュームで新規の Persistent Volume Claim(永続ボリューム要求、PVC)を作成し、古いオブジェクトストレージデバイス (OSD) を削除するのに役立ちます。

手順

  1. 置き換える必要のある OSC を特定します。

    # oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide

    出力例:

    rook-ceph-osd-0-6d77d6c7c6-m8xj6    0/1    CrashLoopBackOff    0    24h   10.129.0.16   compute-2   <none>           <none>
    rook-ceph-osd-1-85d99fb95f-2svc7    1/1    Running    0    24h   10.128.2.24   compute-0   <none>           <none>
    rook-ceph-osd-2-6c66cdb977-jp542    1/1    Running    0    24h   10.131.2.32   compute-1   <none>           <none>

    この例では、rook-ceph-osd-0-6d77d6c7c6-m8xj6 を置き換える必要があります。

    注記

    置き換える OSD が正常である場合、Pod のステータスは Running になります。

  2. 置き換えられる OSD のデプロイメントをスケールダウンします。

    # osd_id_to_remove=0
    # oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0

    ここで、osd_id_to_removerook-ceph-osd プレフィックスの直後にくる Pod 名の整数です。この例では、デプロイメント名は rook-ceph-osd-0 です。

    出力例:

    deployment.extensions/rook-ceph-osd-0 scaled
  3. rook-ceph-osd Pod が停止していることを確認します。

    # oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}

    出力例:

    No resources found.
    注記

    rook-ceph-osd Pod がの terminating 状態である場合、force オプションを使用して Pod を削除します。

    # oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0

    出力例:

    warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
      pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted
  4. 新規 OSD を追加できるようにクラスターから古い OSD を削除します。

    # oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_ID=${osd_id_to_remove} | oc create -f -
    警告

    この手順により、OSD はクラスターから完全に削除されます。osd_id_to_remove の正しい値が指定されていることを確認します。

  5. ocs-osd-removal Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。Completed のステータスで、OSD の削除ジョブが正常に完了したことを 確認します。

    # oc get pod -l job-name=ocs-osd-removal-${osd_id_to_remove} -n openshift-storage
    注記

    ocs-osd-removal が失敗し、Pod が予想される Completed 状態にない場合は、Pod ログで詳細なデバッグの有無を確認します。以下は例になります。

    # oc logs -l job-name=ocs-osd-removal-${osd_id_to_remove} -n openshift-storage --tail=-1
  6. 置き換える OSD に関連付けられた PVC リソースを削除します。

    1. 置き換える OSD に関連付けられた DeviceSet を特定します。

      # oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc

      出力例:

      ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68
          ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68

      この例では、PVC 名は ocs-deviceset-0-0-nvs68 です。

    2. PVC に関連付けられた PV を特定します。

      # oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>

      ここで xy、および pvc-suffix は直前の手順で特定される DeviceSet の値です。

      出力例:

      NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      ocs-deviceset-0-0-nvs68   Bound    pvc-0e621d45-7d18-4d35-a282-9700c3cc8524   512Gi      RWO            thin           24h

      この例では、PVC は直前の手順で特定される ocs-deviceset-0-0-nvs68 であり、関連付けられる PV は pvc-0e621d45-7d18-4d35-a282-9700c3cc8524 です。

    3. 置き換える OSD に関連付けられた prepare-pod を特定します。直前の手順で取得した PVC 名を使用します。

      # oc describe -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix> | grep Mounted

      ここで、xy、 および pvc-suffix は、先の手順で特定された DeviceSet の値です。

      出力例:

      Mounted By:    rook-ceph-osd-prepare-ocs-deviceset-0-0-nvs68-zblp7
    4. 関連付けられた PVC を削除する前に osd-prepare Pod を削除します。

      # oc delete -n openshift-storage pod rook-ceph-osd-prepare-ocs-deviceset-<x>-<y>-<pvc-suffix>-<pod-suffix>

      ここで、xy, pvc-suffix、および pod-suffix は、直前の手順で特定された osd-prepare Pod 名の値です。

      出力例:

      pod "rook-ceph-osd-prepare-ocs-deviceset-0-0-nvs68-zblp7" deleted
    5. デバイスに関連付けられた PVC を削除します。

      # oc delete -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>

      ここで、xy、 および pvc-suffix は、先の手順で特定された DeviceSet の値です。

      出力例:

      persistentvolumeclaim "ocs-deviceset-0-0-nvs68" deleted
  7. 新規デバイス用に新規 OSD を作成します。

    1. 置き換えられる OSD のデプロイメントを削除します。

      # oc delete -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove}

      出力例:

      deployment.extensions/rook-ceph-osd-0 deleted
    2. 先の手順で特定されたデバイスの PV が削除されていることを確認します。

      # oc get -n openshift-storage pv pvc-0e621d45-7d18-4d35-a282-9700c3cc8524

      出力例:

      Error from server (NotFound): persistentvolumes "pvc-0e621d45-7d18-4d35-a282-9700c3cc8524" not found

      この例では、PV 名は pvc-0e621d45-7d18-4d35-a282-9700c3cc8524 です。

      • PV がまだ存在する場合は、そのデバイスに関連付けられた PV を削除します。

        # oc delete pv pvc-0e621d45-7d18-4d35-a282-9700c3cc8524

        出力例:

        persistentvolume "pvc-0e621d45-7d18-4d35-a282-9700c3cc8524" deleted

        この例では、PV 名は pvc-0e621d45-7d18-4d35-a282-9700c3cc8524 です。

    3. rook-ceph-operator を再起動して Operator の調整を強制的に実行して新規 OSD をデプロイします。

      1. rook-ceph-operator の名前を特定します。

        # oc get -n openshift-storage pod -l app=rook-ceph-operator

        出力例:

        NAME                                  READY   STATUS    RESTARTS   AGE
        rook-ceph-operator-6f74fb5bff-2d982   1/1     Running   0          1d20h
      2. rook-ceph-operator を削除します。

        # oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982

        出力例:

        pod "rook-ceph-operator-6f74fb5bff-2d982" deleted

        この例では、rook-ceph-operator Pod 名は rook-ceph-operator-6f74fb5bff-2d982 です。

      3. rook-ceph-operator Pod が再起動していることを確認します。

        # oc get -n openshift-storage pod -l app=rook-ceph-operator

        出力例:

        NAME                                  READY   STATUS    RESTARTS   AGE
        rook-ceph-operator-6f74fb5bff-7mvrq   1/1     Running   0          66s

        新規 OSD の作成には、Operator が再起動するまでに数分かかる場合があります。

  8. ocs-osd-removal ジョブを削除します。

    # oc delete job ocs-osd-removal-${osd_id_to_remove}

    出力例:

    job.batch "ocs-osd-removal-0" deleted

検証手順

  • 新しい OSD が実行されており、新規 PVC が作成されていることを確認します。

    # oc get -n openshift-storage pods -l app=rook-ceph-osd

    出力例:

    rook-ceph-osd-0-5f7f4747d4-snshw                                  1/1     Running     0          4m47s
    rook-ceph-osd-1-85d99fb95f-2svc7                                  1/1     Running     0          1d20h
    rook-ceph-osd-2-6c66cdb977-jp542                                  1/1     Running     0          1d20h
    # oc get -n openshift-storage pvc

    出力例:

    NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
    ocs-deviceset-0-0-2s6w4   Bound    pvc-7c9bcaf7-de68-40e1-95f9-0b0d7c0ae2fc   512Gi      RWO            thin            5m
    ocs-deviceset-1-0-q8fwh   Bound    pvc-9e7e00cb-6b33-402e-9dc5-b8df4fd9010f   512Gi      RWO            thin            1d20h
    ocs-deviceset-2-0-9v8lq   Bound    pvc-38cdfcee-ea7e-42a5-a6e1-aaa6d4924291   512Gi      RWO            thin            1d20h
  • OpenShift Web コンソールにログインし、ストレージダッシュボードを表示します。

    図9.1 デバイスの置き換え後の OpenShift Container Platform ストレージダッシュボードの OSD ステータス

    正常な OSD を表示する OCP ストレージダッシュボード。