仮想化ワークロードに向けたODFのパフォーマンス調整

仮想プライベートクラウド 4.20 そしてその後 ベアメタルのワーカーノードのみ

適切なパフォーマンスプロファイルの選択、OSDポッドのリソース制限の調整、および一括データ操作の設定を行うことで、仮想化ワークロードにおける OpenShift Data Foundation(ODF)のストレージパフォーマンスを向上させることができます。 これらのオプションは、手動で展開された「 OpenShift Virtualization」および「 Red Hat OpenShift Virtualization Service」クラスターを含む、 Red Hat OpenShift on IBM Cloud クラスターに適用されます。

開始前に

  • クラスタへの cluster-admin アクセス権が必要です。
  • インストール または、 IBM Cloud CLI および oc CLI を更新してください。
  • リソース制限を調整したり、ストレージプールを設定したりする前に、ODFがインストールされており、正常な状態にある必要があります。 ODF の正常性を確認するには、 「Ceph クラスタの正常性の確認」 を参照してください。

ODFパフォーマンスプロファイルの選択

ODF には、ストレージコンポーネントの CPU およびメモリの割り当てを制御する 2 つのパフォーマンスプロファイルが用意されています。 ご自身の作業負荷に最も適したプロファイルを選択してください。

パフォーマンス
バランス 」プロファイルよりも多くのCPUとメモリを割り当てます。 このプロファイルは、データベースやトラフィックの多いアプリケーションなど、高いスループットと低レイテンシを必要とする VM のワークロードに使用してください。
バランスの取れた
CPUとメモリを適度に割り当てます。 このプロファイルは、汎用ワークロード、混合環境、またはコスト最適化された導入環境にご利用ください。

ODF をデプロイする際は、「 Backing storage 」の下にある「 Resource profile 」フィールドで「 Performance 」を選択してください。 仮想化サービスクラスタでは、デフォルトで「 パフォーマンス 」が選択されています。

プロファイルの設定は、コンソールまたはCLIから行うことができます。

  • コンソール - 標準の Red Hat OpenShift on IBM Cloud クラスタ :ODFアドオンをインストールする際は、「 Backing storage 」セクションで「 Performance 」を選択してください。
  • コンソール - 仮想化サービスクラスター :デフォルトでは「 パフォーマンス 」が選択されています。 変更するには、クラスタ作成時に「 仮想化統合 」セクションにある「 OpenShift Data Foundation 」カードで「 編集 」を選択してください。

このオプションは、標準の Red Hat OpenShift on IBM Cloud クラスタにのみ適用されます。 仮想化サービスクラスタの場合、プロファイルはクラスタの作成時に設定します。

CLI からアドオンを有効にする際は、 --param "resourceProfile=performance" を指定してください:

ibmcloud oc cluster addon enable openshift-data-foundation \
  -c <cluster-name> \
  --version <addon-version> \
  --param "odfDeploy=true" \
  --param "osdStorageClassName=localblock" \
  --param "autoDiscoverDevices=true" \
  --param "resourceProfile=performance" \
  --param "setDefaultStorageClassForVirtualization=true"

ODF アドオンのすべてのパラメータについては、『 OpenShift Data Foundation パラメータリファレンス 』を参照してください。

OSD ポッドのリソース制限の設定

Object Storage デーモン(OSD)ポッドはデータを格納し、データの配置およびレプリケーションに関与します。 I/O負荷の高い仮想化ワークロードの場合、OSDポッドのCPUおよびメモリの上限を引き上げることで、ボトルネックの軽減に役立てることができます。

現在のOSDリソース制限を確認する

リソース制限を変更する前に、OSDポッドの現在のCPUおよびメモリ設定を確認してください。 現在のリクエスト数と制限値をメモしておき、後で実際の使用状況や更新後の数値と比較できるようにしておきましょう。

oc get pods -n openshift-storage -l app=rook-ceph-osd \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'

出力結果を確認し、各OSDコンテナの現在のCPUおよびメモリの要求量と制限を特定してください。 次のコマンドで、これらの値を実際の使用状況と比較してください。 CPU やメモリの使用率が設定された上限に常に近づいている場合は、上限を引き上げることでボトルネックの解消につながる可能性があります。

実際のリソース使用状況を確認するには、次のコマンドを実行し、CPUおよびメモリの使用率を、あらかじめ記録しておいた上限値と比較してください:

oc adm top pods -n openshift-storage -l app=rook-ceph-osd

OSDのリソース制限を引き上げる

VM のワークロードに対して現在の制限が不十分な場合は、「 ocs-storagecluster 」リソースを編集して制限を更新してください。

また、 ocs-storagecluster の設定で、 monmgrrgw など、他の Rook-Cephポッドの制限値を変更することもできます。 詳細については、 Red Hat のソリューション 6959127 を参照してください。

  1. ストレージクラスタのリソースを開いて編集します。

    oc edit storagecluster ocs-storagecluster -n openshift-storage
    
  2. storageDeviceSets の該当するエントリで、「 resources 」フィールドを追加または更新してください。 以下の部分的な例では、上限をCPU 4個、メモリ24 Giに設定し、要求値をCPU 2個、メモリ24 Giとしています:

    storageDeviceSets:
      - name: ocs-deviceset
        resources:
          limits:
            cpu: "4"
            memory: "24Gi"
          requests:
            cpu: "2"
            memory: "24Gi"
    

    CPUおよびメモリの要求量は、制限値以下でなければなりません。

  3. エディターを保存して終了します。

    変更を保存すると、OSDポッドは自動的に再起動します。 ローリング再起動が完了するまで待ってから、他のストレージ操作を実行してください。

更新されたリソース制限を確認する

ローリング再起動が完了したら、更新された制限がすべてのOSDポッドに適用されていることを確認してください。

  1. ローリング再起動を監視し、すべてのOSDポッドが「 Running 」状態に戻ることを確認します。 すべてのOSDポッドのステータスが「 Running 」となり、「 Pending 」または「 Terminating 」となっているポッドがなくなれば、再起動は完了です。

    oc get pods -n openshift-storage | grep osd | grep -v prepare | grep -v rotation
    
  2. 新しいリソースの値が適用されていることを確認してください。

    oc get pods -n openshift-storage -l app=rook-ceph-osd \
      -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'
    

    CPU およびメモリの値が、設定した値と一致していることを確認してください。

大規模データ処理のためのバルクフラグの設定

VM への移行、一括インポート、データのアーカイブといった大規模なデータ操作を行う場合、Cephブロックプールで「bulk」フラグを有効にすることで、OSD間での初期データ分散を改善し、リバランスにかかるオーバーヘッドを削減できます。

「バルク」フラグは、一般的に次のような用途に使われます:

  • VM 数TB規模のデータを含むディスクの移行およびインポート。
  • バックアップおよび復元操作。
  • 新規アプリケーションの初期データ読み込み。
  • データアーカイブプール。

CephBlockPool リソースの「bulk」フラグを有効にするには、以下の手順を実行してください。

  1. CephBlockPool 」リソース定義を作成または更新し、「 parameters 」セクションに「 bulk: "true" 」が含まれるようにします。

    apiVersion: ceph.rook.io/v1
    kind: CephBlockPool
    metadata:
      name: <pool-name>
      namespace: openshift-storage
    spec:
      replicated:
        size: 3
      parameters:
        bulk: "true"
    
  2. 設定ファイルを適用します。

    oc apply -f <pool-config-file>.yaml
    

    設定を適用すると、Cephは最初から新しいデータをプール全体により均等に分散させることができます。 この動作により、プールが満杯になるにつれてリバランス回数を減らすことができます。

Cephクラスタの健全性の確認

Cephクラスタを定期的に監視し、パフォーマンス上の問題を特定するとともに、データの整合性を確保してください。 設定を変更する前と変更した後に、正常性チェックを実行してください。

基本的なヘルスチェックを実行する

Ceph の全体的な健全性概要を確認するには、次のコマンドを実行してください。 正常なクラスターでは、 HEALTH_OK が返されます。

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph status

現在発生している警告やエラーを確認するには、次のコマンドを実行してください:

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph health detail

クラスタの状態を理解する

ceph status の出力には、データの健全性を示す配置グループ(PG)の状態が含まれます。

アクティブ/クリーン
理想的な状態。 すべての配置グループがアクティブであり、すべてのデータがレプリケートされており、データの移動は発生していません。 アクションは不要です。
アクティブ+リマップ済み、アクティブ+バックフィリング中、アクティブ+復旧中
データの再配布が行われています。 OSDリソースの変更、ノードの交換、またはスケーリング操作の後、これらの状態は正常なものです。 クラスタが active/clean の状態に戻るまで待ってから、追加の変更を行ってください。

正常な出力の例:

HEALTH_OK

リバランス中の出力例:

HEALTH_WARN
  Degraded data redundancy: 123/456 objects degraded (26.974%)
  Recovery 50/456 objects degraded (10.965%)

配置グループとOSDの状態を確認する

データの分布やOSDの状態についてより詳細に把握するには、以下の確認作業を行ってください。

  1. 配置グループのステータスを確認し、「 active+clean 」状態ではないグループを特定します。

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph pg stat
    
  2. 個々のOSDの状態を確認し、OSDが「 up 」および「 in 」であることを確認してください。

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph osd status
    

次のステップ