20.11. Pod 수준 본딩 사용
Pod 수준의 본딩은 고가용성과 처리량이 필요한 Pod 내부의 워크로드를 활성화하는 데 중요합니다. Pod 수준 본딩을 사용하면 커널 모드 인터페이스에서 여러 개의 단일 루트 I/O 가상화(SR-IOV) 가상 기능 인터페이스에서 본딩 인터페이스를 생성할 수 있습니다. SR-IOV 가상 기능은 Pod에 전달되고 커널 드라이버에 연결됩니다.
Pod 수준 본딩이 필요한 한 가지 시나리오는 다양한 물리적 기능에 여러 SR-IOV 가상 함수에서 본딩 인터페이스를 생성하는 것입니다. 호스트의 서로 다른 물리 함수 두 개에서 본딩 인터페이스를 생성하여 Pod 수준에서 고가용성 및 처리량을 달성할 수 있습니다.
SR-IOV 네트워크, 네트워크 정책, 네트워크 연결 정의 및 Pod 생성과 같은 작업에 대한 지침은 SR-IOV 네트워크 장치 구성을 참조하십시오.
20.11.1. SR-IOV 인터페이스 두 개에서 본딩 인터페이스 구성
본딩을 사용하면 여러 네트워크 인터페이스를 단일 논리 "보딩" 인터페이스로 통합할 수 있습니다. 본딩 컨테이너 네트워크 인터페이스(Bond-CNI)는 본딩 기능을 컨테이너에 제공합니다.
bond-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
로 설정됩니다.
20.11.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부터 시작하여 연속 숫자로 지정합니다.
20.11.1.2. 본딩 인터페이스를 사용하여 Pod 생성
다음과 유사한 콘텐츠를 사용하여 이름이
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 네트워크 첨부 2개와 본딩 네트워크 연결 1개가 포함되어 있습니다. 본딩 연결에서는 두 개의 SR-IOV 인터페이스를 결합된 포트 인터페이스로 사용합니다.
다음 명령을 실행하여 yaml을 적용합니다.
$ oc apply -f podbonding.yaml
다음 명령을 사용하여 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
참고Pod 주석에 인터페이스 이름이 구성되지 않은 경우 인터페이스 이름은
net<n> 으로 자동으로 할당되고 <n
>은1
부터 시작됩니다.선택 사항:
bond0
과 같은 특정 인터페이스 이름을 설정하려면k8s.v1.cni.cncf.io/networks
주석을 편집하고bond0
을 다음과 같이 설정합니다.annotations: k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1@bond0