23.12. ハードウェアオフロードの設定


クラスター管理者は、互換性のあるノードでハードウェアオフロードを設定して、データ処理パフォーマンスを向上させ、ホスト CPU の負荷を軽減できます。

23.12.1. ハードウェアのオフロードについて

Open vSwitch ハードウェアオフロードは、ネットワークタスクを CPU から迂回させ、ネットワークインターフェイスコントローラー上の専用プロセッサーにオフロードすることにより、ネットワークタスクを処理する方法です。その結果、クラスターは、データ転送速度の高速化、CPU ワークロードの削減、およびコンピューティングコストの削減の恩恵を受けることができます。

この機能の重要な要素は、SmartNIC と呼ばれる最新クラスのネットワークインターフェイスコントローラーです。SmartNIC は、計算量の多いネットワーク処理タスクを処理できるネットワークインターフェイスコントローラーです。専用のグラフィックカードがグラフィックパフォーマンスを向上させるのと同じように、SmartNIC はネットワークパフォーマンスを向上させることができます。いずれの場合も、専用プロセッサーにより、特定のタイプの処理タスクのパフォーマンスが向上します。

OpenShift Container Platform では、互換性のある SmartNIC を持つベアメタルノードのハードウェアオフロードを設定できます。ハードウェアオフロードは、SR-IOV Network Operator によって設定および有効化されます。

ハードウェアのオフロードは、すべてのワークロードまたはアプリケーションタイプと互換性があるわけではありません。次の 2 つの通信タイプのみがサポートされています。

  • pod-to-pod
  • pod-to-service。サービスは通常の Pod に基づく ClusterIP サービスです。

すべての場合において、ハードウェアのオフロードは、それらの Pod とサービスが互換性のある SmartNIC を持つノードに割り当てられている場合にのみ行われます。たとえば、ハードウェアをオフロードしているノードの Pod が、通常のノードのサービスと通信しようとしているとします。通常のノードでは、すべての処理がカーネルで行われるため、Pod からサービスへの通信の全体的なパフォーマンスは、その通常のノードの最大パフォーマンスに制限されます。ハードウェアオフロードは、DPDK アプリケーションと互換性がありません。

ノードでのハードウェアのオフロードを有効にし、使用する Pod を設定しないと、Pod トラフィックのスループットパフォーマンスが低下する可能性があります。OpenShift Container Platform で管理される Pod のハードウェアオフロードを設定することはできません。

23.12.2. サポートされるデバイス

ハードウェアオフロードは、次のネットワークインターフェイスコントローラーでサポートされています。

表23.15 サポート対象のネットワークインターフェイスコントローラー
製造元モデルベンダー IDデバイス ID

Mellanox

MT27800 Family [ConnectX‑5]

15b3

1017

Mellanox

MT28880 Family [ConnectX‑5 Ex]

15b3

1019

Mellanox

MT2892 Family [ConnectX‑6 Dx]

15b3

101d

Mellanox

MT2894 ファミリー [ConnectX-6 Lx]

15b3

101f

Mellanox

ConnectX-6 NIC モードの MT42822 BlueField-2

15b3

a2d6

23.12.3. 前提条件

23.12.4. SR-IOV Network Operator の systemd モードへの設定

ハードウェアオフロードをサポートするには、まず SR-IOV Network Operator を systemd モードに設定する必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. すべての SR-IOV Operator コンポーネントをデプロイするには、SriovOperatorConfig カスタムリソース (CR) を作成します。

    1. 次の YAML を含む sriovOperatorConfig.yaml という名前のファイルを作成します。

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovOperatorConfig
      metadata:
        name: default 1
        namespace: openshift-sriov-network-operator
      spec:
        enableInjector: true
        enableOperatorWebhook: true
        configurationMode: "systemd" 2
        logLevel: 2
      1
      SriovOperatorConfig リソースの有効な名前は default のみであり、Operator がデプロイされている namespace 内にある必要があります。
      2
      SR-IOV Network Operator の systemd モードへの設定は、Open vSwitch ハードウェアオフロードのみが対象です。
    2. 次のコマンドを実行して、リソースを作成します。

      $ oc apply -f sriovOperatorConfig.yaml

23.12.5. ハードウェアオフロード用のマシン設定プールの設定

ハードウェアオフロードを有効にするには、専用のマシン設定プールを作成し、SR-IOV Network Operator と連携するように設定する必要があります。

前提条件

  1. SR-IOV Network Operator がインストールされ、systemd モードに設定されている。

手順

  1. ハードウェアオフロードを使用するマシンのマシン設定プールを作成します。

    1. 次の例のようなコンテンツを含む mcp-offloading.yaml などのファイルを作成します。

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfigPool
      metadata:
        name: mcp-offloading 1
      spec:
        machineConfigSelector:
          matchExpressions:
            - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,mcp-offloading]} 2
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/mcp-offloading: "" 3
      1 2
      ハードウェアオフロード用のマシン設定プールの名前。
      3
      このノードロールラベルは、マシン設定プールにノードを追加するために使用されます。
    2. マシン設定プールの設定を適用します。

      $ oc create -f mcp-offloading.yaml
  2. マシン設定プールにノードを追加します。プールのノードロールラベルで各ノードにラベルを付けます。

    $ oc label node worker-2 node-role.kubernetes.io/mcp-offloading=""
  3. オプション: 新しいプールが作成されたことを確認するには、次のコマンドを実行します。

    $ oc get nodes

    出力例

    NAME       STATUS   ROLES                   AGE   VERSION
    master-0   Ready    master                  2d    v1.27.3
    master-1   Ready    master                  2d    v1.27.3
    master-2   Ready    master                  2d    v1.27.3
    worker-0   Ready    worker                  2d    v1.27.3
    worker-1   Ready    worker                  2d    v1.27.3
    worker-2   Ready    mcp-offloading,worker   47h   v1.27.3
    worker-3   Ready    mcp-offloading,worker   47h   v1.27.3

  4. このマシン設定プールを SriovNetworkPoolConfig カスタムリソースに追加します。

    1. 次の例のようなコンテンツを含むファイル (sriov-pool-config.yamlなど) を作成します。

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkPoolConfig
      metadata:
        name: sriovnetworkpoolconfig-offload
        namespace: openshift-sriov-network-operator
      spec:
        ovsHardwareOffloadConfig:
          name: mcp-offloading 1
      1
      ハードウェアオフロード用のマシン設定プールの名前。
    2. 設定を適用します。

      $ oc create -f <SriovNetworkPoolConfig_name>.yaml
      注記

      SriovNetworkPoolConfig オブジェクトで指定された設定を適用すると、SR-IOV Operator は、マシン設定プール内のノードをドレインして再起動します。

      設定の変更が適用されるまでに数分かかる場合があります。

23.12.6. SR-IOV ネットワークノードポリシーの設定

SR-IOV ネットワークノードポリシーを作成することにより、ノードの SR-IOV ネットワークデバイス設定を作成できます。ハードウェアオフロードを有効にするには、値 "switchdev" を使用して .spec.eSwitchMode フィールドを定義する必要があります。

次の手順では、ハードウェアをオフロードするネットワークインターフェイスコントローラー用の SR-IOV インターフェイスを作成します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. 次の例のようなコンテンツを含むファイル (sriov-node-policy.yamlなど) を作成します。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: sriov-node-policy 1
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice 2
      eSwitchMode: "switchdev" 3
      nicSelector:
        deviceID: "1019"
        rootDevices:
        - 0000:d8:00.0
        vendor: "15b3"
        pfNames:
        - ens8f0
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true"
      numVfs: 6
      priority: 5
      resourceName: mlxnics
    1
    カスタムリソースオブジェクトの名前。
    2
    必須。ハードウェアのオフロードは、vfio-pci ではサポートされていません。
    3
    必須。
  2. ポリシーの設定を適用します。

    $ oc create -f sriov-node-policy.yaml
    注記

    SriovNetworkPoolConfig オブジェクトで指定された設定を適用すると、SR-IOV Operator は、マシン設定プール内のノードをドレインして再起動します。

    設定の変更が適用されるまでに数分かかる場合があります。

23.12.6.1. OpenStack の SR-IOV ネットワークノードポリシーの例

次の例は、Red Hat OpenStack Platform (RHOSP) でハードウェアオフロードを使用するネットワークインターフェイスコントローラー (NIC) の SR-IOV インターフェイスを示しています。

RHOSP でのハードウェアオフロードを備えた NIC の SR-IOV インターフェイス

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: ${name}
  namespace: openshift-sriov-network-operator
spec:
  deviceType: switchdev
  isRdma: true
  nicSelector:
    netFilter: openstack/NetworkID:${net_id}
  nodeSelector:
    feature.node.kubernetes.io/network-sriov.capable: 'true'
  numVfs: 1
  priority: 99
  resourceName: ${name}

23.12.7. Virtual Function を使用したネットワークトラフィックのパフォーマンスの向上

この手順に従って、OVN-Kubernetes 管理ポートに Virtual Function を割り当て、そのネットワークトラフィックパフォーマンスを向上させます。

この手順により 2 つのプールが作成されます。1 つ目には OVN-Kubernetes によって使用される Virtual Function があり、2 つ目は残りの Virtual Function で構成されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. 次のコマンドを実行して、SmartNIC が存在する各ワーカーノードに network.operator.openshift.io/smart-nic ラベルを追加します。

    $ oc label node <node-name> network.operator.openshift.io/smart-nic=

    oc get nodes コマンドを使用して、使用可能なノードのリストを取得します。

  2. 次の例のような内容を含む、管理ポート用の sriov-node-mgmt-vf-policy.yaml という名前のポリシーを作成します。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: sriov-node-mgmt-vf-policy
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      eSwitchMode: "switchdev"
      nicSelector:
        deviceID: "1019"
        rootDevices:
        - 0000:d8:00.0
        vendor: "15b3"
        pfNames:
        - ens8f0#0-0 1
      nodeSelector:
        network.operator.openshift.io/smart-nic: ""
      numVfs: 6 2
      priority: 5
      resourceName: mgmtvf
    1
    このデバイスは、ユースケースに適したネットワークデバイスに置き換えます。pfNames 値の #0-0 の部分は、OVN-Kubernetes によって使用される単一の Virtual Function を予約します。
    2
    ここで提供される値は例です。この値は、要件を満たす値に置き換えます。詳細は、関連情報 セクションの SR-IOV ネットワークノード設定オブジェクト を参照してください。
  3. 次の例のような内容を含む sriov-node-policy.yaml という名前のポリシーを作成します。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: sriov-node-policy
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      eSwitchMode: "switchdev"
      nicSelector:
        deviceID: "1019"
        rootDevices:
        - 0000:d8:00.0
        vendor: "15b3"
        pfNames:
        - ens8f0#1-5 1
      nodeSelector:
        network.operator.openshift.io/smart-nic: ""
      numVfs: 6 2
      priority: 5
      resourceName: mlxnics
    1
    このデバイスは、ユースケースに適したネットワークデバイスに置き換えます。
    2
    ここで提供される値は例です。この値は sriov-node-mgmt-vf-policy.yaml ファイルで指定された値に置き換えます。詳細は、関連情報 セクションの SR-IOV ネットワークノード設定オブジェクト を参照してください。
    注記

    sriov-node-mgmt-vf-policy.yaml ファイルには、pfNames キーと resourceName キーの値が sriov-node-policy.yaml ファイルとは異なります。

  4. 両方のポリシーの設定を適用します。

    $ oc create -f sriov-node-policy.yaml
    $ oc create -f sriov-node-mgmt-vf-policy.yaml
  5. 管理設定用にクラスター内に Cluster Network Operator (CNO) ConfigMap を作成します。

    1. 次の内容を含む hardware-offload-config.yaml という名前の ConfigMap を作成します。

      apiVersion: v1
      kind: ConfigMap
      metadata:
          name: hardware-offload-config
          namespace: openshift-network-operator
      data:
          mgmt-port-resource-name: openshift.io/mgmtvf
    2. ConfigMap の設定を適用します。

      $ oc create -f hardware-offload-config.yaml

23.12.8. ネットワーク接続定義の作成

マシン設定プールと SR-IOV ネットワークノードポリシーを定義した後、指定したネットワークインターフェイスカードのネットワーク接続定義を作成できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. 次の例のようなコンテンツを含むファイル (net-attach-def.yamlなど) を作成します。

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: net-attach-def 1
      namespace: net-attach-def 2
      annotations:
        k8s.v1.cni.cncf.io/resourceName: openshift.io/mlxnics 3
    spec:
      config: '{"cniVersion":"0.3.1","name":"ovn-kubernetes","type":"ovn-k8s-cni-overlay","ipam":{},"dns":{}}'
    1
    ネットワーク接続定義の名前。
    2
    ネットワーク接続定義の namespace。
    3
    これは、SriovNetworkNodePolicy オブジェクトで指定した spec.resourceName フィールドの値です。
  2. ネットワーク接続定義の設定を適用します。

    $ oc create -f net-attach-def.yaml

検証

  • 次のコマンドを実行して、新しい定義が存在するかどうかを確認します。

    $ oc get net-attach-def -A

    出力例

    NAMESPACE         NAME             AGE
    net-attach-def    net-attach-def   43h

23.12.9. ネットワーク接続定義を Pod へ追加

マシン設定プール、SriovNetworkPoolConfig および SriovNetworkNodePolicy カスタムリソース、およびネットワーク接続定義を作成した後、ネットワーク接続定義を Pod 仕様に追加することにより、これらの設定を Pod に適用できます。

手順

  • Pod 仕様で、.metadata.annotations.k8s.v1.cni.cncf.io/networks フィールドを追加し、ハードウェアオフロード用に作成したネットワーク接続定義を指定します。

    ....
    metadata:
      annotations:
        v1.multus-cni.io/default-network: net-attach-def/net-attach-def 1
    1
    値は、ハードウェアオフロード用に作成したネットワーク接続定義の名前と namespace である必要があります。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.