第18章 単一ノード OpenShift でのワークロードパーティション設定

単一ノードの OpenShift デプロイメントなどのリソースに制約のある環境では、CPU リソースのほとんどを独自のワークロード用に確保し、ホスト内の固定数の CPU で実行するように OpenShift Container Platform を設定すると有利です。これらの環境では、コントロールプレーンを含む管理ワークロードは、通常のクラスターでデフォルトよりも少ないリソースを使用するように設定する必要があります。OpenShift Container Platform サービス、クラスター管理ワークロード、およびインフラストラクチャー Pod を分離して、予約済みの CPU セットで実行できます。

ワークロードパーティショニングを使用する場合、クラスター管理のために OpenShift Container Platform によって使用される CPU リソースは、単一ノードクラスター上のパーティション化された CPU リソースのセットに分離されます。このパーティション設定により、クラスター管理機能が定義された数の CPU に分離されます。すべてのクラスター管理機能は、その cpuset 設定でのみ動作します。

単一ノードクラスターの管理パーティションに必要な予約済み CPU の最低限の数は、4 つの CPU ハイパースレッド (HT) です。ベースラインの OpenShift Container Platform インストールを設定する Pod のセットと一般的なアドオン Operator のセットには、管理ワークロードパーティションに含めるためのアノテーションが付けられています。これらの Pod は、最低限のサイズの cpuset 設定内で正常に動作します。受け入れ可能な管理 Pod のセット以外の Operator またはワークロードを含めるには、そのパーティションに CPU HT を追加する必要があります。

ワークロードパーティション設定は、Kubernetes の通常のスケジューリング機能を使用してユーザーワークロードをプラットフォームワークロードから分離し、それらのコアに配置できる Pod の数を管理し、クラスター管理ワークロードとユーザーワークロードの混在を回避します。

ワークロードパーティション設定を使用する場合は、Performance Addon Operator をインストールし、パフォーマンスプロファイルを適用する必要があります。

  • ワークロードパーティション設定は、OpenShift Container Platform インフラストラクチャー Pod を定義済みの cpuset 設定に固定します。
  • Performance Addon Operator のパフォーマンスプロファイルは、systemd サービスを定義済みの cpuset 設定に固定します。
  • この cpuset 設定は一致する必要があります。

ワークロードパーティション設定により、定義された CPU プールまたはワークロードタイプごとに <workload-type> .workload.openshift.io/cores の新しい拡張リソースが導入されます。Kubelet はこれらの新しいリソースをアドバタイズし、プールに確保された Pod による CPU 要求は、通常の cpu リソースではなく、対応するリソース内で考慮されます。ワークロードパーティション設定が有効になっている場合、<workload-type> .workload.openshift.io/cores リソースにより、デフォルトの CPU プールだけでなく、ホストの CPU 容量にアクセスできます。

18.1. ワークロードパーティション設定の有効化

シングルノード OpenShift インストールの一部として有効にする重要な機能は、ワークロードのパーティショニングです。これにより、プラットフォームサービスの実行が許可されるコアが制限され、アプリケーションペイロードの CPU コアが最大化されます。クラスターのインストール時にワークロードのパーティショニングを設定する必要があります。

注記

ワークロードパーティショニングを有効にできるのは、クラスターのインストール時のみです。インストール後にワークロードパーティショニングを無効にすることはできません。ただし、パフォーマンスプロファイルで定義した cpu の値と、MachineConfig カスタムリソース (CR) の関連する cpuset の値を更新して、ワークロードパーティショニングを再設定できます。

手順

  • 以下の base64 でエンコードされたコンテンツには、管理ワークロードが制限されている CPU セットが含まれています。このコンテンツは、performanceprofile プロファイルで指定されたセットに一致するように調整する必要があり、クラスター上のコアの数に対して正確である必要があります。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 02-master-workload-partitioning
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKW2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudC5yZXNvdXJjZXNdCmNwdXNoYXJlcyA9IDAKQ1BVcyA9ICIwLTEsIDUyLTUzIgo=
            mode: 420
            overwrite: true
            path: /etc/crio/crio.conf.d/01-workload-partitioning
            user:
              name: root
          - contents:
              source: data:text/plain;charset=utf-8;base64,ewogICJtYW5hZ2VtZW50IjogewogICAgImNwdXNldCI6ICIwLTEsNTItNTMiCiAgfQp9Cg==
            mode: 420
            overwrite: true
            path: /etc/kubernetes/openshift-workload-pinning
            user:
              name: root
  • /etc/crio/crio.conf.d/01-workload-partitioning の内容は次のようになります。

    [crio.runtime.workloads.management]
    activation_annotation = "target.workload.openshift.io/management"
    annotation_prefix = "resources.workload.openshift.io"
    [crio.runtime.workloads.management.resources]
    cpushares = 0
    cpuset = "0-1, 52-53" 1
    1
    cpuset の 値は、インストールによって異なります。

    ハイパースレッディングが有効になっている場合は、各コアの両方のスレッドを指定します。cpuset 値は、パフォーマンスプロファイルの spec.cpu.reserved フィールドで定義した予約済み CPU と一致する必要があります。

ハイパースレッディングが有効になっている場合は、各コアの両方のスレッドを指定します。CPUs の値は、パフォーマンスプロファイルで指定された予約済み CPU セットと一致する必要があります。

このコンテンツは base64 でエンコードされ、上記のマニフェストの 01-workload-partitioning-content で提供される必要があります。

  • /etc/kubernetes/openshift-workload-pinning の内容は次のようになります。

    {
      "management": {
        "cpuset": "0-1,52-53" 1
      }
    }
    1
    cpuset は/etc/crio/crio.conf.d/01-workload-partitioningcpuset 値と一致する必要があります。