17.10. Pod 수준 본딩 사용

Pod 수준의 본딩은 고가용성과 처리량이 필요한 Pod 내부의 워크로드를 활성화하는 데 중요합니다. Pod 수준 본딩을 사용하면 커널 모드 인터페이스에서 여러 개의 SR-IOV(root I/O Virtualization) 가상 기능 인터페이스에서 본딩 인터페이스를 생성할 수 있습니다. SR-IOV 가상 기능은 Pod에 전달되고 커널 드라이버에 연결됩니다.

Pod 수준 본딩이 필요한 시나리오 중 하나는 다른 물리적 기능의 여러 SR-IOV 가상 함수에서 본딩 인터페이스를 생성하는 것입니다. 호스트에서 두 가지 물리적 함수에서 본딩 인터페이스를 생성하여 Pod 수준에서 고가용성 및 처리량을 달성하는 데 사용할 수 있습니다.

SR-IOV 네트워크, 네트워크 정책, 네트워크 연결 정의 및 Pod 생성과 같은 작업에 대한 지침은 SR-IOV 네트워크 장치 구성을 참조하십시오.

17.10.1. 두 개의 SR-IOV 인터페이스에서 본딩 인터페이스 구성

본딩을 사용하면 여러 네트워크 인터페이스를 단일 논리 "보딩" 인터페이스로 집계할 수 있습니다. 본딩 컨테이너 네트워크 인터페이스(Bond-CNI)는 본딩 기능을 컨테이너에 제공합니다.

본딩-CNI는 SR-IOV(Single Root I/O Virtualization) 가상 기능을 사용하여 생성하여 컨테이너 네트워크 네임스페이스에 배치할 수 있습니다.

OpenShift Container Platform은 SR-IOV 가상 기능을 사용하는 Bond-CNI만 지원합니다. SR-IOV Network Operator는 가상 기능을 관리하는 데 필요한 SR-IOV CNI 플러그인을 제공합니다. 기타 CNI 또는 인터페이스 유형은 지원되지 않습니다.

사전 요구 사항

  • 컨테이너의 가상 기능을 가져오도록 SR-IOV Network Operator를 설치하고 구성해야 합니다.
  • SR-IOV 인터페이스를 구성하려면 각 인터페이스에 대해 SR-IOV 네트워크 및 정책을 생성해야 합니다.
  • SR-IOV Network Operator는 정의된 SR-IOV 네트워크 및 정책을 기반으로 각 SR-IOV 인터페이스에 대한 네트워크 연결 정의를 생성합니다.
  • linkState 는 SR-IOV 가상 기능의 기본값 auto 로 설정됩니다.

17.10.1.1. 본딩 네트워크 연결 정의 생성

SR-IOV 가상 기능을 사용할 수 있게 되었으므로 본딩 네트워크 연결 정의를 생성할 수 있습니다.

apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bond-net1
      namespace: demo
    spec:
      config: '{
      "type": "bond", 1
      "cniVersion": "0.3.1",
      "name": "bond-net1",
      "mode": "active-backup", 2
      "failOverMac": 1, 3
      "linksInContainer": true, 4
      "miimon": "100",
      "mtu": 1500,
      "links": [ 5
            {"name": "net1"},
            {"name": "net2"}
        ],
      "ipam": {
            "type": "host-local",
            "subnet": "10.56.217.0/24",
            "routes": [{
            "dst": "0.0.0.0/0"
            }],
            "gateway": "10.56.217.1"
        }
      }'
1
cni-type은 항상 bond 로 설정됩니다.
2
mode 속성은 본딩 모드를 지정합니다.
참고

지원되는 본딩 모드는 다음과 같습니다.

  • balance-rr - 0
  • active-backup - 1
  • balance-xor - 2

balance-rr 또는 balance-xor 모드의 경우 SR-IOV 가상 기능에 대한 신뢰 모드를 on 으로 설정해야 합니다.

3
장애 조치( failover ) 속성은 active-backup 모드의 경우 필수이며 1로 설정해야 합니다.
4
linksInContainer=true 플래그는 Bond CNI에 컨테이너 내부에 필요한 인터페이스가 있음을 알립니다. 기본적으로 Bond CNI는 SRIOV 및 Multus와의 통합에 작동하지 않는 호스트에서 이러한 인터페이스를 찾습니다.
5
links 섹션에서는 본딩을 만드는 데 사용할 인터페이스를 정의합니다. 기본적으로 Multus는 연결된 인터페이스의 이름을 "net"으로 지정하고 1부터 연속 번호를 지정합니다.

17.10.1.2. 본딩 인터페이스를 사용하여 Pod 생성

  1. 다음과 유사한 콘텐츠를 사용하여 이름이 podbonding.yaml 과 같은 YAML 파일로 Pod를 생성하여 설정을 테스트합니다.

    apiVersion: v1
        kind: Pod
        metadata:
          name: bondpod1
          namespace: demo
          annotations:
            k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1 1
        spec:
          containers:
          - name: podexample
            image: quay.io/openshift/origin-network-interface-bond-cni:4.11.0
            command: ["/bin/bash", "-c", "sleep INF"]
    1
    네트워크 주석에 유의하십시오. 여기에는 두 개의 SR-IOV 네트워크 연결과 하나의 본딩 네트워크 연결이 포함되어 있습니다. 본딩 연결에서는 두 개의 SR-IOV 인터페이스를 본딩 포트 인터페이스로 사용합니다.
  2. 다음 명령을 실행하여 yaml을 적용합니다.

    $ oc apply -f podbonding.yaml
  3. 다음 명령을 사용하여 Pod 인터페이스를 검사합니다.

    $ oc rsh -n demo bondpod1
    sh-4.4#
    sh-4.4# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    3: eth0@if150: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue state UP
    link/ether 62:b1:b5:c8:fb:7a brd ff:ff:ff:ff:ff:ff
    inet 10.244.1.122/24 brd 10.244.1.255 scope global eth0
    valid_lft forever preferred_lft forever
    4: net3: <BROADCAST,MULTICAST,UP,LOWER_UP400> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff 1
    inet 10.56.217.66/24 scope global bond0
    valid_lft forever preferred_lft forever
    43: net1: <BROADCAST,MULTICAST,UP,LOWER_UP800> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff 2
    44: net2: <BROADCAST,MULTICAST,UP,LOWER_UP800> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 9e:23:69:42:fb:8a brd ff:ff:ff:ff:ff:ff 3
    1
    본딩 인터페이스의 이름은 자동으로 net3 입니다. 특정 인터페이스 이름을 설정하려면 Pod의 k8s.v1.cni.cncf.io/networks 주석에 @name 접미사를 추가합니다.
    2
    net1 인터페이스는 SR-IOV 가상 기능을 기반으로 합니다.
    3
    net2 인터페이스는 SR-IOV 가상 기능을 기반으로 합니다.
    참고

    Pod 주석에 인터페이스 이름이 구성되지 않은 경우 인터페이스 이름은 net<n> 으로 자동으로 할당되고 <n >은 1 부터 시작됩니다.

  4. 선택 사항: bond0 과 같은 특정 인터페이스 이름을 설정하려면 k8s.v1.cni.cncf.io/networks 주석을 편집하고 bond0 을 다음과 같이 설정합니다.

    annotations:
            k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1@bond0