11.3. SR-IOV ネットワークにおける LACP 状態監視用の PF Status Relay Operator を設定する
PF Status Relay Operator を使用して、SR-IOV ネットワークによる Pod レベルのボンディングを使用するワークロードの Link Aggregation Control Protocol (LACP) 状態監視を有効にします。この Operator は、Physical Function (PF) 上の LACP 状態を監視し、アップストリーム障害を検出すると、アタッチされている Virtual Function (VF) のリンク状態を変更します。このアプローチにより、PF にアタッチされた VF の障害を検出し、バックアップネットワークパスへのタイムリーなフェイルオーバーを確実に実行して、ワークロードの高可用性を確保できます。
次のシナリオは、SR-IOV ネットワークの LACP 状態監視を設定および検証する方法を示しています。
- ワーカーノードにホストレベルの NIC ボンディングを作成し、LACP を設定します。
- 結合されたインターフェイス上に Virtual Function (VF) を作成するための SR-IOV ネットワークポリシーを定義します。
- PF Status Relay Operator をデプロイして、PF と LACP 状態を監視します。
- アップストリームスイッチに障害が発生した場合に、これらの VF を使用する Pod がバックアップネットワークパスに自動的にフェイルオーバーすることを確認します。
次のシナリオは、SR-IOV ネットワークの LACP 状態監視を設定および検証する方法を示しています。このシナリオでは、各ノードに 2 つのポート (worker-0 と worker-1) を持つ SR-IOV ネットワークカードを使用します。両方のポートは共有スイッチにアタッチされており、LACP ボンディングをサポートします。
前提条件
- ノードには SR-IOV をサポートする NIC がある。
- SR-IOV Network Operator がインストールされている。
- PF Status Relay Operator がインストールされている。
- ワーカーノードに接続された物理スイッチポートは、高速ポーリングレートの LACP 用に設定されています。
-
監視する SR-IOV VF の
linkStateは、autoまたはdisableに設定されます。Operator は、linkStateがenableに設定された VF を無視します。SR-IOV VF のデフォルト値はlinkState: autoです。
手順
次の例のような
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-tests1 - 1
- 高可用性 Pod をデプロイする namespace。
以下のコマンドを実行して namespace を適用します。
$ oc apply -f namespace.yamlホストレベルの LACP ボンディングを設定します。
worker-0ノードのens5f0インターフェイスのNodeNetworkConfigurationPolicyリソースを定義する YAML ファイルを作成します。nncpBondF0Worker0.yamlファイルの例apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: example-bond-f0 spec: nodeSelector: kubernetes.io/hostname: worker-01 desiredState: interfaces: - name: example-bond-f0 description: example-bond-f0 type: bond state: up mtu: 9216 link-aggregation: mode: 802.3ad2 options: miimon: '100' lacp_rate: 'fast'3 min_links: '1' port: - ens5f04 - name: ens5f0 type: ethernet state: up mtu: 9216worker-0ノードのens5f1インターフェイスのNodeNetworkConfigurationPolicyリソースを定義する YAML ファイルを作成します。nncpBondF1Worker0.yamlファイルの例apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: example-bond-f1 spec: nodeSelector: kubernetes.io/hostname: worker-01 desiredState: interfaces: - name: example-bond-f1 description: example-bond-f1 type: bond state: up mtu: 9216 link-aggregation: mode: 802.3ad2 options: miimon: '100' lacp_rate: 'fast'3 min_links: '1' port: - ens5f14 - name: ens5f1 type: ethernet state: up mtu: 9216次のコマンドを実行してリソースを適用します。
$ oc apply -f nncpBondF0Worker0.yaml $ oc apply -f nncpBondF1Worker0.yaml
ボンディングされたインターフェイスの SR-IOV ネットワーク VF を作成します。
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: - ens5f01 nodeSelector: kubernetes.io/hostname: worker-02 numVfs: 103 priority: 99 resourceName: resourceport04 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: - ens5f11 nodeSelector: kubernetes.io/hostname: worker-02 numVfs: 103 priority: 99 resourceName: resourceport14 次のコマンドを実行してリソースを適用します。
$ oc apply -f sriovnetworkpolicy-port1.yaml $ oc apply -f sriovnetworkpolicy-port2.yaml
PF Status Relay Operator を設定します。
PFLACPMonitorリソースを定義する YAML ファイルを作成します。このサンプルファイルでは、Operator がworker-0ノード上のボンディングされたインターフェイスであるens5f0およびens5f1の LACP ステータスを監視するように設定します。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: - ens5f01 - ens5f1 pollingInterval: 10002 nodeSelector: kubernetes.io/hostname: worker-03 次のコマンドを実行して、
PFLACPMonitorリソースを適用します。$ oc apply -f pflacpmonitor.yaml
検証
PF Status Relay Operator のログを確認して、LACP 状態を関ししているか検証します。
$ oc logs -n openshift-pf-status-relay-operator <pf_status_relay_operator_pod_name>出力例
{"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"} ...SriovNetworkリソースを適用して、sriov-operator-testsnamespace 内で VF を使用できるようにします。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: resourceport0ens5f1上で作成された 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次のコマンドを実行してリソースを適用します。
$ oc apply -f sriovnetwork-port1.yaml $ oc apply -f sriovnetwork-port2.yaml
SR-IOV VF を使用する高可用性 Pod を定義します。
NetworkAttachmentDefinitionリソースを適用し、2 つの SR-IOV ネットワークを使用してactive-backupボンディングを作成します。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"}}-
linksInContainer: trueは、Pod のネットワーク namespace 内にボンディングを作成します。 -
mode: active-backupは、active-backup モードを使用するようにボンディングを設定します。 linksは、ボンディングに含める Pod レベルのインターフェイスを指定します。重要PF Status Relay Operator は、
mode: active-backup設定のみに、Pod レベルのボンディングの LACP 状態監視を提供します。
-
次のコマンドを実行して、
NetworkAttachmentDefinitionリソースを適用します。$ oc apply -f nad-bond.yamlactive-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"]- 1
- アノテーションは、2 つの SR-IOV VF (
net1とnet2) と、それらを使用する 1 つのボンディングbond0、合計 3 つのネットワークを要求します。
次のコマンドを実行して、
Podリソースを適用します。$ oc apply -f client-bond.yaml
フェイルオーバーメカニズムを確認します。
次のコマンドを実行して、
client-bondPod にログインします。$ oc rsh -n sriov-operator-tests client-bond次のコマンドを実行して、Pod レベルのボンディングの初期ステータスを確認します。
sh-4.4# cat /proc/net/bonding/bond0出力例
[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-
net1とnet2の両方のインターフェイスが稼働しています。
-
- Pod シェルを終了します。
- アップストリーム物理スイッチで LACP 障害をシミュレートします。このシナリオをシミュレートするには、障害をテストするスイッチポートで LACP トラフィックをフィルタリングできます。これにより、LACP ポーリングが失敗しても物理リンクは稼働状態で維持されます。そのために使用するコマンドは、ベンダーによって異なります。
client-bondPod に再度ログインし、ボンディングステータスを再度確認して、Pod 内のフェイルオーバーを確認します。sh-4.4# cat /proc/net/bonding/bond0出力例
... 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: 0net1インターフェイスはダウンしており、net2インターフェイスがアクティブインターフェイスになっています。client-bond Pod はリンク状態の変化を検出し、バックアップネットワークパスに切り替えます。