11.3. SR-IOV 네트워크에서 LACP 상태 모니터링을 위한 PF Status Relay Operator 구성


SR-IOV 네트워크와 Pod 수준 본딩을 사용하여 워크로드에 대한 PF Status Relay Operator를 사용하여 LACP(Link Aggregation Control Protocol) 상태 모니터링을 활성화합니다. Operator는 물리적 기능(PF)에서 LACP 상태를 모니터링하고 업스트림 실패를 감지할 때 연결된 VF(가상 기능)의 링크 상태를 변경합니다. 이 방법을 사용하면 PF에 연결된 VF의 오류를 탐지하여 네트워크 경로를 적시에 백업하여 워크로드에 대한 고가용성을 보장할 수 있습니다.

다음 시나리오에서는 SR-IOV 네트워크에 대한 LACP 상태 모니터링을 구성하고 확인하는 방법을 보여줍니다.

  • 작업자 노드에서 호스트 수준 NIC 본딩을 생성하고 LACP를 구성합니다.
  • 결합된 인터페이스에서 VF(가상 기능)를 생성하도록 SR-IOV 네트워크 정책을 정의합니다.
  • PF Status Relay Operator를 배포하여 PF를 모니터링하고 LACP 상태를 모니터링합니다.
  • 이러한 VF를 사용하는 Pod가 업스트림 스위치에 실패하는 경우 백업 네트워크 경로로 자동으로 실패하는지 확인합니다.

다음 시나리오에서는 SR-IOV 네트워크에 대한 LACP 상태 모니터링을 구성하고 확인하는 방법을 보여줍니다. 이 시나리오는 각 노드에 두 개의 포트인 worker-0worker-1 과 함께 SR-IOV 네트워크 카드를 사용하며 LACP 본딩을 지원하기 위해 두 개의 포트가 모두 연결되어 있습니다.

사전 요구 사항

  • 노드에는 SR-IOV를 지원하는 NIC가 있어야 합니다.
  • SR-IOV Network Operator가 설치되어 있습니다.
  • PF Status Relay Operator가 설치되어 있습니다.
  • 작업자 노드에 연결된 물리적 스위치 포트는 빠른 폴링 속도로 LACP용으로 구성됩니다.
  • linkState 는 모니터링할 SR-IOV VF의 경우 auto 또는 disable 로 설정됩니다. Operator는 linkState활성화 되도록 설정된 VF를 무시합니다. SR-IOV VF의 기본값은 linkState: auto 입니다.

프로세스

  1. 다음 예와 같은 namespace.yaml 파일을 생성하여 프로젝트 네임스페이스를 생성합니다.

    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를 배포하는 네임스페이스입니다.
  2. 다음 명령을 실행하여 네임스페이스를 적용합니다.

    $ 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
      Pod에서 이러한 VF를 요청하는 데 사용하는 리소스 이름입니다.
    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
      Pod에서 이러한 VF를 요청하는 데 사용하는 리소스 이름입니다.
    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 파일을 생성합니다. 이 예제 파일은 작업자-0 노드에서 ens5f0ens5f1 본딩 인터페이스의 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
      대상 인터페이스의 노드입니다.
      중요

      하나의 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 리소스를 적용하여 sriov-operator-tests 네임스페이스 내에서 VF를 사용할 수 있도록 합니다.

    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. 두 SR-IOV 네트워크를 사용하여 active-backup 본딩을 생성하려면 NetworkAttachmentDefinition 리소스를 적용합니다.

      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의 네트워크 네임스페이스 내에 본딩을 생성합니다.
      • mode: active-backup 은 active-backup 모드를 사용하도록 본딩을 구성합니다.
      • links 는 본딩에 포함할 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
      이 주석은 두 개의 SR-IOV VF, net1net2 및 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

      • net1net2 인터페이스가 모두 up입니다.
    3. 포드 쉘을 종료합니다.
    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 인터페이스가 down이고 net2 인터페이스가 이제 활성 인터페이스입니다.

        client-bond Pod는 링크 상태 변경을 감지하고 백업 네트워크 경로로 전환합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat