2.4. VMWare インフラストラクチャーでのストレージノードの置き換え


前提条件

  • 置き換えるノードが、置き換えるノードと同様のインフラストラクチャー、リソース、およびディスクで設定されていることを確認する必要がある。
  • OpenShift Container Platform クラスターにログインしている必要がある。

手順

  1. ノードを特定し、置き換える必要のあるノードのラベルを取得します。

    $ oc get nodes --show-labels | grep <node_name>
    <node_name>
    置き換える必要のあるノードの名前を指定します。
  2. モニター Pod (存在する場合)、および置き換える必要のあるノードで実行されている OSD を特定します。

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
  3. 先の手順で特定された Pod のデプロイメントをスケールダウンします。

    以下に例を示します。

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name>  --replicas=0 -n openshift-storage
  4. ノードにスケジュール対象外 (unschedulable) のマークを付けます。

    $ oc adm cordon <node_name>
  5. ノードをドレイン (解放) します。

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
  6. ノードを削除します。

    $ oc delete node <node_name>
  7. VMware vSphere にログインし、特定した仮想マシン (VM) を終了します。
  8. 必要なインフラストラクチャーを使用して、VMware vSphere 上に新しい VM を作成します。インフラストラクチャーの要件 を参照します。
  9. 新規の仮想マシンを使用して新規 OpenShift Container Platform ワーカーノードを作成します。
  10. Pending 状態の OpenShift Container Platform に関連する証明書署名要求 (CSR) の有無を確認します。

    $ oc get csr
  11. 新規ノードに必要なすべての OpenShift Container Platform CSR を承認します。

    $ oc adm certificate approve <certificate_name>
    <certificate_name>
    CSR の名前を指定します。
  12. OpenShift Web コンソールで Compute Nodes をクリックします。新しいノードが Ready 状態にあることを確認します。
  13. 以下のいずれかを使用して、OpenShift Data Foundation ラベルを新規ノードに適用します。

    ユーザーインターフェイスから
    1. 新規ノードについて、Action Menu (⋮) Edit Labels をクリックします。
    2. cluster.ocs.openshift.io/openshift-storage を追加し、Save をクリックします。
    コマンドラインインターフェイスの使用
    • OpenShift Data Foundation ラベルを新規ノードに適用します。
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    <new_node_name>
    新しいノードの名前を指定します。
  14. OpenShift ローカルストレージ Operator がインストールされている namespace を特定し、これを local_storage_project 変数に割り当てます。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)

    以下に例を示します。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    echo $local_storage_project

    出力例:

    openshift-local-storage
  15. 新規ワーカーノードを localVolumeDiscovery および localVolumeSet に追加します。

    1. localVolumeDiscovery 定義を更新し、新規ノードを追加して失敗したノードを削除します。

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

    2. 編集する localVolumeSet を決定します。

      # oc get -n $local_storage_project localvolumeset

      出力例:

      NAME          AGE
      localblock   25h
    3. localVolumeSet 定義を更新して、新規ノードを追加し、障害が発生したノードを削除します。

      # oc edit -n $local_storage_project localvolumeset localblock

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

  16. 新しい localblock 永続ボリューム (PV) が使用可能であることを確認します。

    $oc get pv | grep localblock | grep Available

    出力例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
  17. openshift-storage プロジェクトに移動します。

    $ oc project openshift-storage
  18. 失敗した OSD をクラスターから削除します。必要に応じて、複数の障害のある OSD を指定することができます。

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> | oc create -f -
    <failed_osd_id>

    rook-ceph-osd 接頭辞の直後の Pod 名の整数です。

    コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます (例: FAILED_OSD_IDS=0,1,2)

    OSD が 3 つしかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するにはスペースが不十分なクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。

  19. ocs-osd-removal-job Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。

    Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    # oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
  20. OSD の取り外しが完了したことを確認します。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'

    出力例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    重要

    ocs-osd-removal-job が失敗し、Pod が予想される Completed の状態にない場合、追加のデバッグのために Pod ログを確認します。

    以下に例を示します。

    # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
  21. Persistent Volume Claim (PVC) に関連付けられた Persistent Volume (PV) を特定します。

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released

    出力例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1

    Released 状態の PV がある場合は、これを削除します。

    # oc delete pv <persistent_volume>

    以下に例を示します。

    # oc delete pv local-pv-d6bf175b

    出力例:

    persistentvolume "local-pv-d9c5cbd6" deleted
  22. crashcollector Pod デプロイメントを特定します。

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage

    既存の crashcollector Pod デプロイメントがある場合は、これを削除します。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
  23. ocs-osd-removal-job を削除します。

    # oc delete -n openshift-storage job ocs-osd-removal-job

    出力例:

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

検証手順

  1. 新しいノードが出力に存在することを確認します。

    $ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
  2. Workloads Pods をクリックします。新しいノードの少なくとも次の Pod が Running 状態になっていることを確認します。

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 他の必要なすべての OpenShift Data Foundation Pod が Running 状態にあることを確認します。

    また、増分の mon が新規に作成されており、Running 状態にあることを確認します。

    $ oc get pod -n openshift-storage | grep mon

    出力例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s

    OSD とモニター Pod が Running 状態になるまでに数分かかる場合があります。

  4. 新規 OSD Pod が交換後のノードで実行されていることを確認します。

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. (オプション) クラスターでクラスター全体の暗号化が有効な場合は、新規 OSD デバイスが暗号化されていることを確認します。

    直前の手順で特定された新しい各ノードに以下を実行します。

    1. デバッグ Pod を作成し、選択した 1 つ以上のホストの chroot 環境を開きます。

      $ oc debug node/<node_name>
      $ chroot /host
    2. 使用可能なブロックデバイスのリストを表示します。

      $ lsblk

      1 つ以上の ocs-deviceset 名の横にある crypt キーワードを確認します。

  6. 検証手順が失敗した場合は、Red Hat サポートにお問い合わせください

前提条件

  • 置き換えるノードが、置き換えるノードと同様のインフラストラクチャー、リソース、およびディスクで設定されていることを確認する必要がある。
  • OpenShift Container Platform クラスターにログインしている必要がある。

手順

  1. OpenShift Web コンソールにログインし、Compute Nodes をクリックします。
  2. 置き換える必要のあるノードを特定します。その マシン名 をメモします。
  3. ノードのラベルを取得します。

    $ oc get nodes --show-labels | grep <node_name>
    <node_name>
    置き換える必要のあるノードの名前を指定します。
  4. ノードで実行されている mon (存在する場合) と Object Storage Devices (OSD) を特定します。

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
  5. 前の手順で特定した Pod のデプロイメントをスケールダウンします。

    以下に例を示します。

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name>  --replicas=0 -n openshift-storage
  6. ノードにスケジュール対象外 (unschedulable) のマークを付けます。

    $ oc adm cordon <node_name>
  7. ノードをドレイン (解放) します。

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
  8. Compute Machines をクリックします。必要なマシンを検索します。
  9. 必要なマシンの横にある Action menu (⋮) Delete Machine をクリックします。
  10. Delete をクリックしてマシンの削除を確認します。新しいマシンが自動的に作成されます。
  11. 新規マシンが起動し、Running 状態に移行するまで待機します。

    重要

    このアクティビティーには、少なくとも 5〜10 分以上かかる場合があります。

  12. OpenShift Web コンソールで Compute Nodes をクリックします。新しいノードが Ready 状態にあることを確認します。
  13. 物理的に新規デバイスをノードに追加します。
  14. 以下のいずれかを使用して、OpenShift Data Foundation ラベルを新規ノードに適用します。

    ユーザーインターフェイスから
    1. 新規ノードについて、Action Menu (⋮) Edit Labels をクリックします。
    2. cluster.ocs.openshift.io/openshift-storage を追加し、Save をクリックします。
    コマンドラインインターフェイスの使用
    • OpenShift Data Foundation ラベルを新規ノードに適用します。
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    <new_node_name>
    新しいノードの名前を指定します。
  15. OpenShift ローカルストレージ Operator がインストールされている namespace を特定し、これを local_storage_project 変数に割り当てます。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)

    以下に例を示します。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    echo $local_storage_project

    出力例:

    openshift-local-storage
  16. 新規ワーカーノードを localVolumeDiscovery および localVolumeSet に追加します。

    1. localVolumeDiscovery 定義を更新し、新規ノードを追加して失敗したノードを削除します。

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

    2. 編集する必要がある localVolumeSet を決定します。

      # oc get -n $local_storage_project localvolumeset

      出力例:

      NAME          AGE
      localblock   25h
    3. localVolumeSet 定義を更新して、新規ノードを追加し、障害が発生したノードを削除します。

      # oc edit -n $local_storage_project localvolumeset localblock

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

  17. 新しい localblock 永続ボリューム (PV) が使用可能であることを確認します。

    $ oc get pv | grep localblock | grep Available

    出力例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
  18. openshift-storage プロジェクトに移動します。

    $ oc project openshift-storage
  19. 失敗した OSD をクラスターから削除します。必要に応じて、複数の障害のある OSD を指定することができます。

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> | oc create -f -
    <failed_osd_id>

    rook-ceph-osd 接頭辞の直後の Pod 名の整数です。

    コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます (例: FAILED_OSD_IDS=0,1,2)

    OSD が 3 つしかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するにはスペースが不十分なクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。

  20. ocs-osd-removal-job Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。

    Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    # oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
  21. OSD の取り外しが完了したことを確認します。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'

    出力例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    重要

    ocs-osd-removal-job が失敗し、Pod が予想される Completed の状態にない場合、追加のデバッグのために Pod ログを確認します。

    以下に例を示します。

    # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
  22. 永続ボリュームクレーム (PVC) に関連付けられている PV を特定します。

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released

    出力例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1

    Released 状態の PV がある場合は、これを削除します。

    # oc delete pv <persistent_volume>

    以下に例を示します。

    # oc delete pv local-pv-d6bf175b

    出力例:

    persistentvolume "local-pv-d9c5cbd6" deleted
  23. crashcollector Pod デプロイメントを特定します。

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage

    既存の crashcollector Pod デプロイメントがある場合は、これを削除します。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
  24. ocs-osd-removal-job を削除します。

    # oc delete -n openshift-storage job ocs-osd-removal-job

    出力例:

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

検証手順

  1. 新しいノードが出力に存在することを確認します。

    $ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
  2. Workloads Pods をクリックします。新しいノードの少なくとも次の Pod が Running 状態になっていることを確認します。

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 他の必要なすべての OpenShift Data Foundation Pod が Running 状態にあることを確認します。

    また、増分の mon が新規に作成されており、Running 状態にあることを確認します。

    $ oc get pod -n openshift-storage | grep mon

    出力例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s

    OSD とモニター Pod が Running 状態になるまでに数分かかる場合があります。

  4. 新規 OSD Pod が交換後のノードで実行されていることを確認します。

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. (オプション) クラスターでクラスター全体の暗号化が有効な場合は、新規 OSD デバイスが暗号化されていることを確認します。

    直前の手順で特定された新しい各ノードに以下を実行します。

    1. デバッグ Pod を作成し、選択した 1 つ以上のホストの chroot 環境を開きます。

      $ oc debug node/<node_name>
      $ chroot /host
    2. 使用可能なブロックデバイスのリストを表示します。

      $ lsblk

      1 つ以上の ocs-deviceset 名の横にある crypt キーワードを確認します。

  6. 検証手順が失敗した場合は、Red Hat サポートにお問い合わせください

前提条件

  • 置き換えるノードが、置き換えるノードと同様のインフラストラクチャー、リソース、およびディスクで設定されていることを確認する必要がある。
  • OpenShift Container Platform クラスターにログインしている必要がある。

手順

  1. ノードを特定し、置き換える必要のあるノードのラベルを取得します。

    $ oc get nodes --show-labels | grep <node_name>
    <node_name>
    置き換える必要のあるノードの名前を指定します。
  2. モニター Pod (存在する場合)、および置き換える必要のあるノードで実行されている OSD を特定します。

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
  3. 先の手順で特定された Pod のデプロイメントをスケールダウンします。

    以下に例を示します。

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name>  --replicas=0 -n openshift-storage
  4. ノードにスケジュール対象外 (unschedulable) のマークを付けます。

    $ oc adm cordon <node_name>
  5. Terminating 状態の Pod を削除します。

    $ oc get pods -A -o wide | grep -i <node_name> |  awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2  " --grace-period=0 " " --force ")}'
  6. ノードをドレイン (解放) します。

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
  7. ノードを削除します。

    $ oc delete node <node_name>
  8. VMware vSphere にログインし、特定した仮想マシン (VM) を終了します。
  9. 必要なインフラストラクチャーを使用して、VMware vSphere 上に新しい VM を作成します。インフラストラクチャーの要件 を参照します。
  10. 新規の仮想マシンを使用して新規 OpenShift Container Platform ワーカーノードを作成します。
  11. Pending 状態の OpenShift Container Platform に関連する証明書署名要求 (CSR) の有無を確認します。

    $ oc get csr
  12. 新規ノードに必要なすべての OpenShift Container Platform CSR を承認します。

    $ oc adm certificate approve <certificate_name>
    <certificate_name>
    CSR の名前を指定します。
  13. OpenShift Web コンソールで Compute Nodes をクリックします。新しいノードが Ready 状態にあることを確認します。
  14. 以下のいずれかを使用して、OpenShift Data Foundation ラベルを新規ノードに適用します。

    ユーザーインターフェイスから
    1. 新規ノードについて、Action Menu (⋮) Edit Labels をクリックします。
    2. cluster.ocs.openshift.io/openshift-storage を追加し、Save をクリックします。
    コマンドラインインターフェイスの使用
    • OpenShift Data Foundation ラベルを新規ノードに適用します。
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    <new_node_name>
    新しいノードの名前を指定します。
  15. OpenShift ローカルストレージ Operator がインストールされている namespace を特定し、これを local_storage_project 変数に割り当てます。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)

    以下に例を示します。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    echo $local_storage_project

    出力例:

    openshift-local-storage
  16. 新規ワーカーノードを localVolumeDiscovery および localVolumeSet に追加します。

    1. localVolumeDiscovery 定義を更新し、新規ノードを追加して失敗したノードを削除します。

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

    2. 編集する localVolumeSet を決定します。

      # oc get -n $local_storage_project localvolumeset

      出力例:

      NAME          AGE
      localblock   25h
    3. localVolumeSet 定義を更新して、新規ノードを追加し、障害が発生したノードを削除します。

      # oc edit -n $local_storage_project localvolumeset localblock

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

  17. 新しい localblock 永続ボリューム (PV) が使用可能であることを確認します。

    $oc get pv | grep localblock | grep Available

    出力例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
  18. openshift-storage プロジェクトに移動します。

    $ oc project openshift-storage
  19. 失敗した OSD をクラスターから削除します。必要に応じて、複数の障害のある OSD を指定することができます。

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> | oc create -f -
    <failed_osd_id>

    rook-ceph-osd 接頭辞の直後の Pod 名の整数です。

    コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます (例: FAILED_OSD_IDS=0,1,2)

    OSD が 3 つしかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するにはスペースが不十分なクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。

  20. ocs-osd-removal-job Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。

    Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    # oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
  21. OSD の取り外しが完了したことを確認します。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'

    出力例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    重要

    ocs-osd-removal-job が失敗し、Pod が予想される Completed の状態にない場合、追加のデバッグのために Pod ログを確認します。

    以下に例を示します。

    # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
  22. Persistent Volume Claim (PVC) に関連付けられた Persistent Volume (PV) を特定します。

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released

    出力例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1

    Released 状態の PV がある場合は、これを削除します。

    # oc delete pv <persistent_volume>

    以下に例を示します。

    # oc delete pv local-pv-d6bf175b

    出力例:

    persistentvolume "local-pv-d9c5cbd6" deleted
  23. crashcollector Pod デプロイメントを特定します。

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage

    既存の crashcollector Pod デプロイメントがある場合は、これを削除します。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
  24. ocs-osd-removal-job を削除します。

    # oc delete -n openshift-storage job ocs-osd-removal-job

    出力例:

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

検証手順

  1. 新しいノードが出力に存在することを確認します。

    $ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
  2. Workloads Pods をクリックします。新しいノードの少なくとも次の Pod が Running 状態になっていることを確認します。

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 他の必要なすべての OpenShift Data Foundation Pod が Running 状態にあることを確認します。

    また、増分の mon が新規に作成されており、Running 状態にあることを確認します。

    $ oc get pod -n openshift-storage | grep mon

    出力例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s

    OSD とモニター Pod が Running 状態になるまでに数分かかる場合があります。

  4. 新規 OSD Pod が交換後のノードで実行されていることを確認します。

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. (オプション) クラスターでクラスター全体の暗号化が有効な場合は、新規 OSD デバイスが暗号化されていることを確認します。

    直前の手順で特定された新しい各ノードに以下を実行します。

    1. デバッグ Pod を作成し、選択した 1 つ以上のホストの chroot 環境を開きます。

      $ oc debug node/<node_name>
      $ chroot /host
    2. 使用可能なブロックデバイスのリストを表示します。

      $ lsblk

      1 つ以上の ocs-deviceset 名の横にある crypt キーワードを確認します。

  6. 検証手順が失敗した場合は、Red Hat サポートにお問い合わせください

前提条件

  • 置き換えるノードが、置き換えるノードと同様のインフラストラクチャー、リソース、およびディスクで設定されていることを確認する必要がある。
  • OpenShift Container Platform クラスターにログインしている必要がある。

手順

  1. OpenShift Web コンソールにログインし、Compute Nodes をクリックします。
  2. 置き換える必要のあるノードを特定します。その マシン名 をメモします。
  3. ノードのラベルを取得します。

    $ oc get nodes --show-labels | grep _<node_name>_
    <node_name>
    置き換える必要のあるノードの名前を指定します。
  4. ノードで実行されている mon (存在する場合) と Object Storage Devices (OSD) を特定します。

    $ oc get pods -n openshift-storage -o wide | grep -i _<node_name>_
  5. 先の手順で特定された Pod のデプロイメントをスケールダウンします。

    以下に例を示します。

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name>  --replicas=0 -n openshift-storage
  6. ノードにスケジュール対象外 (unschedulable) のマークを付けます。

    $ oc adm cordon _<node_name>_
  7. Terminating 状態の Pod を削除します。

    $ oc get pods -A -o wide | grep -i _<node_name>_ |  awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2  " --grace-period=0 " " --force ")}'
  8. ノードをドレイン (解放) します。

    $ oc adm drain _<node_name>_ --force --delete-emptydir-data=true --ignore-daemonsets
  9. Compute Machines をクリックします。必要なマシンを検索します。
  10. 必要なマシンの横にある Action menu (⋮) Delete Machine をクリックします。
  11. Delete をクリックして、マシンが削除されたことを確認します。新しいマシンが自動的に作成されます。
  12. 新規マシンが起動し、Running 状態に移行するまで待機します。

    重要

    このアクティビティーには、少なくとも 5〜10 分以上かかる場合があります。

  13. OpenShift Web コンソールで Compute Nodes をクリックします。新しいノードが Ready 状態にあることを確認します。
  14. 物理的に新規デバイスをノードに追加します。
  15. 以下のいずれかを使用して、OpenShift Data Foundation ラベルを新規ノードに適用します。

    ユーザーインターフェイスから
    1. 新規ノードについて、Action Menu (⋮) Edit Labels をクリックします。
    2. cluster.ocs.openshift.io/openshift-storage を追加し、Save をクリックします。
    コマンドラインインターフェイスの使用
    • OpenShift Data Foundation ラベルを新規ノードに適用します。
    $ oc label node _<new_node_name>_ cluster.ocs.openshift.io/openshift-storage=""
    <new_node_name>
    新しいノードの名前を指定します。
  16. OpenShift ローカルストレージ Operator がインストールされている namespace を特定し、これを local_storage_project 変数に割り当てます。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)

    以下に例を示します。

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    echo $local_storage_project

    出力例:

    openshift-local-storage
  17. 新規ワーカーノードを localVolumeDiscovery および localVolumeSet に追加します。

    1. localVolumeDiscovery 定義を更新し、新規ノードを追加して失敗したノードを削除します。

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - **newnode.example.com**
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

    2. 編集する必要がある localVolumeSet を決定します。

      # oc get -n $local_storage_project localvolumeset

      出力例:

      NAME          AGE
      localblock   25h
    3. localVolumeSet 定義を更新して、新規ノードを追加し、障害が発生したノードを削除します。

      # oc edit -n $local_storage_project localvolumeset localblock

      出力例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - **newnode.example.com**
      [...]

      エディターを終了する前に必ず保存します。

      この例では、server3.example.com が削除され、newnode.example.com が新しいノードになります。

  18. 新規 localblock PV が利用可能であることを確認します。

    $ oc get pv | grep localblock | grep Available

    出力例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
  19. openshift-storage プロジェクトに移動します。

    $ oc project openshift-storage
  20. 失敗した OSD をクラスターから削除します。必要に応じて、複数の障害のある OSD を指定することができます。

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> | oc create -f -
    <failed_osd_id>

    rook-ceph-osd 接頭辞の直後の Pod 名の整数です。

    コマンドにコンマ区切りの OSD ID を追加して、複数の OSD を削除できます (例: FAILED_OSD_IDS=0,1,2)

    OSD が 3 つしかないクラスター、または OSD が削除された後にデータの 3 つのレプリカすべてを復元するにはスペースが不十分なクラスターでは、FORCE_OSD_REMOVAL 値を true に変更する必要があります。

  21. ocs-osd-removal-job Pod のステータスをチェックして、OSD が正常に削除されたことを確認します。

    Completed のステータスで、OSD の削除ジョブが正常に完了したことを確認します。

    # oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
  22. OSD の取り外しが完了したことを確認します。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'

    出力例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    重要

    ocs-osd-removal-job が失敗し、Pod が予想される Completed の状態にない場合、追加のデバッグのために Pod ログを確認します。

    以下に例を示します。

    # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
  23. 永続ボリュームクレーム (PVC) に関連付けられている PV を特定します。

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released

    出力例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1

    Released 状態の PV がある場合は、これを削除します。

    # oc delete pv _<persistent_volume>_

    以下に例を示します。

    # oc delete pv local-pv-d6bf175b

    出力例:

    persistentvolume "local-pv-d9c5cbd6" deleted
  24. crashcollector Pod デプロイメントを特定します。

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=_<failed_node_name>_ -n openshift-storage

    既存の crashcollector Pod デプロイメントがある場合は、これを削除します。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=_<failed_node_name>_ -n openshift-storage
  25. ocs-osd-removal-job を削除します。

    # oc delete -n openshift-storage job ocs-osd-removal-job

    出力例:

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

検証手順

  1. 新しいノードが出力に存在することを確認します。

    $ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
  2. Workloads Pods をクリックします。新しいノードの少なくとも次の Pod が Running 状態になっていることを確認します。

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 他の必要なすべての OpenShift Data Foundation Pod が Running 状態にあることを確認します。

    また、増分の mon が新規に作成されており、Running 状態にあることを確認します。

    $ oc get pod -n openshift-storage | grep mon

    出力例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s

    OSD とモニター Pod が Running 状態になるまでに数分かかる場合があります。

  4. 新規 OSD Pod が交換後のノードで実行されていることを確認します。

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. (オプション) クラスターでクラスター全体の暗号化が有効な場合は、新規 OSD デバイスが暗号化されていることを確認します。

    直前の手順で特定された新しい各ノードに以下を実行します。

    1. デバッグ Pod を作成し、選択した 1 つ以上のホストの chroot 環境を開きます。

      $ oc debug node/<node_name>
      $ chroot /host
    2. 使用可能なブロックデバイスのリストを表示します。

      $ lsblk

      1 つ以上の ocs-deviceset 名の横にある crypt キーワードを確認します。

  6. 検証手順が失敗した場合は、Red Hat サポートにお問い合わせください
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る