11.3. SR-IOV ネットワークで LACP 状態モニタリング用の PF Status Relay Operator の設定


SR-IOV ネットワークとの Pod レベルのボンディングを使用して、PF Status Relay Operator を使用してワークロードのリンクアグリゲーション制御プロトコル(LACP)状態監視を有効にします。Operator は Physical Function (PF)の LACP 状態を監視し、アップストリームの障害の検出時に、接続されている仮想機能(VF)のリンク状態を変更します。このアプローチでは、PF に接続されている VF で障害を検出し、バックアップネットワークパスにタイムリーにフェイルオーバーし、ワークロードの高可用性を確保できます。

以下のシナリオは、SR-IOV ネットワークの LACP 状態監視を設定および検証する方法を示しています。

  • ワーカーノードでホストレベルの NIC ボンディングを作成し、LACP を設定します。
  • SR-IOV ネットワークポリシーを定義して、ボンディングされたインターフェイスに Virtual Function (VF)を作成します。
  • PF Status Relay Operator をデプロイして PF を監視し、LACP の状態を監視します。
  • これらの VF を使用する Pod がアップストリームスイッチに障害が発生した場合にバックアップネットワークパスに自動的にフェイルオーバーすることを確認します。

以下のシナリオは、SR-IOV ネットワークの LACP 状態監視を設定および検証する方法を示しています。このシナリオでは、各ノード(worker- 0 と worker -1 )に 2 つのポートを持つ SR-IOV ネットワークカードを使用し、両方のポートが共有スイッチに接続して LACP ボンディングをサポートします。

前提条件

  • ノードには SR-IOV をサポートする NIC が必要です。
  • SR-IOV Network Operator がインストールされている。
  • PF Status Relay Operator がインストールされている。
  • ワーカーノードに接続された物理スイッチポートが、高速ポーリングレートで LACP 用に設定されます。
  • 監視する SR-IOV VF の linkStateauto または disable に設定されます。Operator は、を 有効 化するように linkState が設定された VF を無視します。SR-IOV VF のデフォルト値は linkState: auto です。

手順

  1. 次の例のような namespace.yaml ファイルを作成して、プロジェクト namespace を作成します。

    namespace.yaml ファイルの例

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        kubernetes.io/metadata.name: sriov-operator-tests
        pod-security.kubernetes.io/audit: privileged
        pod-security.kubernetes.io/enforce: privileged
        pod-security.kubernetes.io/warn: privileged
        security.openshift.io/scc.podSecurityLabelSync: "false"
      name: sriov-operator-tests 
    1
    Copy to Clipboard Toggle word wrap

    1
    高可用性 Pod をデプロイする namespace。
  2. 以下のコマンドを実行して namespace を適用します。

    $ oc apply -f namespace.yaml
    Copy to Clipboard Toggle word wrap
  3. ホストレベルの LACP ボンディングを設定します。

    1. worker- 0 ノードで ens5f0 インターフェイスの NodeNetworkConfigurationPolicy リソースを定義する YAML ファイルを作成します。

      nncpBondF0Worker0.yaml ファイルの例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: example-bond-f0
      spec:
        nodeSelector:
          kubernetes.io/hostname: worker-0 
      1
      
        desiredState:
          interfaces:
            - name: example-bond-f0
              description: example-bond-f0
              type: bond
              state: up
              mtu: 9216
              link-aggregation:
                mode: 802.3ad 
      2
      
                options:
                  miimon: '100'
                  lacp_rate: 'fast' 
      3
      
                  min_links: '1'
                port:
                  - ens5f0 
      4
      
            - name: ens5f0
              type: ethernet
              state: up
              mtu: 9216
      Copy to Clipboard Toggle word wrap

      1
      ボンディングインターフェイスが作成されるノード。
      2
      ボンディングで LACP を有効にするには、LACP モードを 802.3ad に設定する必要があります。
      3
      インターフェイスおよびスイッチで LACP レートを 高速 に設定する必要があります。高速 レートは、LACP パケットを毎秒送信します。
      4
      ボンディングに追加する PF。
    2. worker-0 ノードで ens5f1 インターフェイスの NodeNetworkConfigurationPolicy リソースを定義する YAML ファイルを作成します。

      nncpBondF1Worker0.yaml ファイルの例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: example-bond-f1
      spec:
        nodeSelector:
          kubernetes.io/hostname: worker-0 
      1
      
        desiredState:
          interfaces:
            - name: example-bond-f1
              description: example-bond-f1
              type: bond
              state: up
              mtu: 9216
              link-aggregation:
                mode: 802.3ad 
      2
      
                options:
                  miimon: '100'
                  lacp_rate: 'fast' 
      3
      
                  min_links: '1'
                port:
                  - ens5f1 
      4
      
            - name: ens5f1
              type: ethernet
              state: up
              mtu: 9216
      Copy to Clipboard Toggle word wrap

      1
      ボンディングインターフェイスが作成されるノード。
      2
      ボンディングで LACP を有効にするには、LACP モードを 802.3ad に設定する必要があります。
      3
      インターフェイスおよびスイッチで LACP レートを 高速 に設定する必要があります。高速 レートは、LACP パケットを毎秒送信します。
      4
      ボンディングに追加する PF。
    3. 以下のコマンドを実行してリソースを適用します。

      $ oc apply -f nncpBondF0Worker0.yaml
      $ oc apply -f nncpBondF1Worker0.yaml
      Copy to Clipboard Toggle word wrap
  4. ボンディングされたインターフェイス用の SR-IOV ネットワーク VF を作成します。

    1. worker- 0 ノードで ens5f0 インターフェイスの SriovNetworkNodePolicy リソースを定義する YAML ファイルを作成します。

      sriovnetworkpolicy-port1.yaml ファイルの例

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: sriovnetpolicy-port-0
        namespace: openshift-sriov-network-operator
      spec:
        deviceType: netdevice
        nicSelector:
          pfNames:
            - ens5f0 
      1
      
        nodeSelector:
          kubernetes.io/hostname: worker-0 
      2
      
        numVfs: 10 
      3
      
        priority: 99
        resourceName: resourceport0 
      4
      Copy to Clipboard Toggle word wrap

      1
      VF の作成元となる PF。
      2
      VF が作成されるノード。
      3
      PF で作成する VF の数。
      4
      これらの VF を要求するために Pod が使用するリソース名。
    2. worker-0 ノードで ens5f1 インターフェイスの SriovNetworkNodePolicy リソースを定義する YAML ファイルを作成します。

      sriovnetworkpolicy-port2.yaml ファイルの例

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: sriovnetpolicy-port-1
        namespace: openshift-sriov-network-operator
      spec:
        deviceType: netdevice
        nicSelector:
          pfNames:
            - ens5f1 
      1
      
        nodeSelector:
          kubernetes.io/hostname: worker-0 
      2
      
        numVfs: 10 
      3
      
        priority: 99
        resourceName: resourceport1 
      4
      Copy to Clipboard Toggle word wrap

      1
      VF の作成元となる PF。
      2
      VF が作成されるノード。
      3
      PF で作成する VF の数。
      4
      これらの VF を要求するために Pod が使用するリソース名。
    3. 以下のコマンドを実行してリソースを適用します。

      $ oc apply -f sriovnetworkpolicy-port1.yaml
      $ oc apply -f sriovnetworkpolicy-port2.yaml
      Copy to Clipboard Toggle word wrap
  5. PF Status Relay Operator を設定します。

    1. PFLACPMonitor リソースを定義する YAML ファイルを作成します。このサンプルファイルは、worker- 0 ノード上の ens5f0 および ens5f1 ボンディングインターフェイスの LACP ステータスを監視するように Operator を設定します。

      pflacpmonitor.yaml ファイルの例

      apiVersion: pfstatusrelay.openshift.io/v1alpha1
      kind: PFLACPMonitor
      metadata:
        namespace: openshift-pf-status-relay-operator
        labels:
          app.kubernetes.io/name: pf-status-relay-operator
        name: pflacpmonitor-worker-0
      spec:
        interfaces:
          - ens5f0 
      1
      
          - ens5f1
        pollingInterval: 1000 
      2
      
        nodeSelector:
          kubernetes.io/hostname: worker-0 
      3
      Copy to Clipboard Toggle word wrap

      1
      監視する PF のリスト。
      2
      監視対象インターフェイスの LACP ステータスを確認するためのポーリング間隔(ミリ秒単位)。最小値は 1000 です。
      3
      ターゲットインターフェイスのノード。
      重要

      ノード上の各ネットワークインターフェイスを監視するには、1 つの PFLACPMonitor カスタムリソースのみを使用します。同じインターフェイスを対象とする複数のリソースを作成する場合、PF Status Relay Operator は競合する設定を処理しません。

    2. 以下のコマンドを実行して PFLACPMonitor リソースを適用します。

      $ oc apply -f pflacpmonitor.yaml
      Copy to Clipboard Toggle word wrap

検証

  1. PF Status Relay Operator のログをチェックして、LACP 状態を監視していることを確認します。

    $ oc logs -n openshift-pf-status-relay-operator <pf_status_relay_operator_pod_name>
    Copy to Clipboard Toggle word wrap

    出力例

    {"time":"2025-07-24T13:35:54.653201692Z","level":"INFO","msg":"lacp is up","interface":"ens5f0"}
    {"time":"2025-07-24T13:35:54.65347273Z","level":"INFO","msg":"vf link state was set","id":0,"state":"auto","interface":"ens5f0"}
    ...
    Copy to Clipboard Toggle word wrap

  2. SriovNetwork リソースを適用して、VF を sriov-operator-tests namespace 内で使用できるようにします。

    1. ens5f0 で作成された VF の SriovNetwork リソースを定義する YAML ファイルを作成します。

      sriovnetwork-port1.yaml ファイルの例

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: sriovnetwork-port0
        namespace: openshift-sriov-network-operator
      spec:
        capabilities: '{ "mac": true }'
        networkNamespace: sriov-operator-tests
        resourceName: resourceport0
      Copy to Clipboard Toggle word wrap

    2. ens5f1 で作成された VF の SriovNetwork リソースを定義する YAML ファイルを作成します。

      sriovnetwork-port2.yaml ファイルの例

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: sriovnetwork-port1
        namespace: openshift-sriov-network-operator
      spec:
        capabilities: '{ "mac": true }'
        networkNamespace: sriov-operator-tests
        resourceName: resourceport1
      Copy to Clipboard Toggle word wrap

    3. 以下のコマンドを実行してリソースを適用します。

      $ oc apply -f sriovnetwork-port1.yaml
      $ oc apply -f sriovnetwork-port2.yaml
      Copy to Clipboard Toggle word wrap
  3. SR-IOV VF を使用する高可用性 Pod を定義します。

    1. NetworkAttachmentDefinition リソースを適用し、2 つの SR -IOV ネットワークを使用してアクティブバックアップ ボンディングを作成します。

      nad-bond.yaml ファイルの例

      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: nad-bond-1
        namespace: sriov-operator-tests
      spec:
        config: |-
          {"type": "bond", "cniVersion": "0.3.1", "name": "bond-net1",
          "mode": "active-backup", "failOverMac": 1, "linksInContainer": true, "miimon": "100", "mtu": 1450,
          "links": [{"name": "net1"},{"name": "net2"}], "capabilities": {"ips": true}, "ipam": {"type": "static"}}
      Copy to Clipboard Toggle word wrap

      • linksInContainer: true は、Pod のネットワーク namespace 内にボンディングを作成します。
      • モード:active-backup は、active-backup モードを使用するようにボンディングを設定します。
      • リンク は、ボンディングに追加する Pod レベルのインターフェイスを指定します。

        重要

        PF Status Relay Operator は、mode: active-backup 設定のみで Pod レベルのボンディングについての LACP 状態モニタリングを提供します。

    2. 以下のコマンドを実行して NetworkAttachmentDefinition リソースを適用します。

      $ oc apply -f nad-bond.yaml
      Copy to Clipboard Toggle word wrap
    3. active-backup モードでボンディングされたインターフェイスからの VF を使用する Pod リソースを定義する YAML ファイルを作成します。

      client-bond.yaml ファイルの例

      apiVersion: v1
      kind: Pod
      metadata:
        name: client-bond
        namespace: sriov-operator-tests
        annotations:
          k8s.v1.cni.cncf.io/networks: |- 
      1
      
            [{
                "name": "sriovnetwork-port0",
                "interface": "net1",
                "mac": "<mac_address>"
              },{
                "name": "sriovnetwork-port1",
                "interface": "net2",
                "mac": "<mac_address>"
              },{
                "name": "nad-bond-1",
                "interface": "bond0",
                "ips": ["192.168.10.254/24","2001:100::254/64"],
                "mac": "<mac_address>"
            }]
      spec:
        nodeName: worker-0
        containers:
          - name: client-bond
            image: quay.io/nginx/nginx-unprivileged
            imagePullPolicy: IfNotPresent
            command: ["/bin/sh", "-c", "sleep 3650d"]
            securityContext:
              privileged: true
            command: ["/bin/sleep", "3650d"]
      Copy to Clipboard Toggle word wrap

      1
      アノテーションは、3 つのネットワークを要求します。net1 および net2 の 2 つの SR-IOV VF、およびそれらを使用する 1 つのボンディング bond0 です。
    4. 以下のコマンドを実行して Pod リソースを適用します。

      $ oc apply -f client-bond.yaml
      Copy to Clipboard Toggle word wrap
  4. フェイルオーバーメカニズムを確認します。

    1. 以下のコマンドを実行して client-bond Pod にログインします。

      $ oc rsh -n sriov-operator-tests client-bond
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、Pod レベルのボンディングの初期ステータスを確認します。

      sh-4.4# cat /proc/net/bonding/bond0
      Copy to Clipboard Toggle word wrap

      出力例

      [root@client-bond-tlb /]# cat /proc/net/bonding/bond0
      ...
      
      Bonding Mode: transmit load balancing
      Transmit Hash Policy: layer2 (0)
      Primary Slave: None
      Currently Active Slave: net1
      MII Status: up
      MII Polling Interval (ms): 100
      Up Delay (ms): 0
      Down Delay (ms): 0
      Peer Notification Delay (ms): 0
      
      Slave Interface: net1
      MII Status: up
      Speed: 25000 Mbps
      Duplex: full
      Link Failure Count: 0
      Permanent HW addr: AA:BB:CC:DD:EE:FF
      Slave queue ID: 0
      
      Slave Interface: net2
      MII Status: up
      Speed: 25000 Mbps
      Duplex: full
      Link Failure Count: 0
      Permanent HW addr: BB:CC:DD:EE:FF:GG
      Copy to Clipboard Toggle word wrap

      • net1 インターフェイスと net2 インターフェイスの両方が up になっています。
    3. Pod シェルを終了します。
    4. アップストリームの物理スイッチで LACP 障害をシミュレートします。このシナリオをシミュレートするには、障害をテストするスイッチポートで LACP トラフィックをフィルタリングします。これにより、LACP ポーリングが失敗しても、物理リンクが稼働したままになります。これを行うコマンドは、ベンダーによって異なります。
    5. client-bond Pod にログインし、再度ボンディングのステータスをチェックして、Pod 内のフェイルオーバーを確認します。

      sh-4.4# cat /proc/net/bonding/bond0
      Copy to Clipboard Toggle word wrap

      出力例

      ...
      
      Bonding Mode: transmit load balancing
      Transmit Hash Policy: layer2 (0)
      Primary Slave: None
      Currently Active Slave: net2
      MII Status: up
      MII Polling Interval (ms): 100
      Up Delay (ms): 0
      Down Delay (ms): 0
      Peer Notification Delay (ms): 0
      
      Slave Interface: net1
      MII Status: down
      Speed: Unknown
      Duplex: Unknown
      Link Failure Count: 1
      Permanent HW addr: AA:BB:CC:DD:EE:FF
      Slave queue ID: 0
      
      Slave Interface: net2
      MII Status: up
      Speed: 25000 Mbps
      Duplex: full
      Link Failure Count: 0
      Permanent HW addr: BB:CC:DD:EE:FF:GG
      Slave queue ID: 0
      Copy to Clipboard Toggle word wrap

      • net1 インターフェイスがダウンし、net2 インターフェイスがアクティブなインターフェイスになります。

        クライアントボンド Pod はリンク状態の変更を検出し、バックアップネットワークパスに切り替えます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat