2장. SR-IOV 네트워크 장치 구성
클러스터에서 SR-IOV(Single Root I/O Virtualization) 장치를 구성할 수 있습니다.
다음 문서에서 작업을 수행하기 전에 SR-IOV Network Operator를 설치 했는지 확인합니다.
2.1. SR-IOV 네트워크 노드 구성 오브젝트 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV 네트워크 노드 정책을 생성하여 노드의 SR-IOV 네트워크 장치 구성을 지정합니다. 정책의 API 오브젝트는 sriovnetwork.openshift.io
API 그룹의 일부입니다.
다음 YAML은 SR-IOV 네트워크 노드 정책을 설명합니다.
- 1
- 사용자 정의 리소스 오브젝트의 이름입니다.
- 2
- SR-IOV Network Operator가 설치된 네임스페이스입니다.
- 3
- SR-IOV 네트워크 장치 플러그인의 리소스 이름입니다. 리소스 이름에 대한 SR-IOV 네트워크 노드 정책을 여러 개 생성할 수 있습니다.
이름을 지정할 때
resourceName
에 허용되는 구문 표현식^[a-zA-Z0-9_]+$
를 사용해야 합니다. - 4
- 노드 선택기는 구성할 노드를 지정합니다. 선택한 노드의 SR-IOV 네트워크 장치만 구성됩니다. SR-IOV CNI(Container Network Interface) 플러그인 및 장치 플러그인은 선택한 노드에만 배포됩니다.중요
SR-IOV Network Operator는 노드 네트워크 구성 정책을 순서대로 노드에 적용합니다. 노드 네트워크 구성 정책을 적용하기 전에 SR-IOV Network Operator는 노드의 MCP(Machine config pool)가
Degraded
또는 Update와 같은 비정상적인 상태에 있는지확인합니다
. 노드가 비정상 MCP에 있는 경우 MCP가 정상 상태로 돌아올 때까지 클러스터의 모든 대상 노드에 노드 네트워크 구성 정책을 적용하는 프로세스입니다.비정상 MCP의 노드가 다른 MCP의 노드를 포함하여 다른 노드에 대한 노드 네트워크 구성 정책의 애플리케이션을 차단하지 않도록 하려면 각 MCP에 대한 별도의 노드 네트워크 구성 정책을 생성해야 합니다.
- 5
- 선택 사항: 우선순위는
0
에서99
사이의 정수 값입니다. 작은 값은 우선순위가 높습니다. 예를 들어 우선순위10
은 우선순위99
보다 높습니다. 기본값은99
입니다. - 6
- 선택 사항: 물리적 기능의 최대 전송 단위(MTU) 및 모든 가상 기능입니다. 최대 MTU 값은 네트워크 인터페이스 컨트롤러(NIC) 모델마다 다를 수 있습니다.중요
기본 네트워크 인터페이스에서 가상 기능을 생성하려면 MTU가 클러스터 MTU와 일치하는 값으로 설정되어 있는지 확인합니다.
함수가 pod에 할당되는 동안 단일 가상 기능의 MTU를 수정하려면 SR-IOV 네트워크 노드 정책에 MTU 값을 비워 둡니다. 그렇지 않으면 SR-IOV Network Operator에서 가상 기능의 MTU를 SR-IOV 네트워크 노드 정책에 정의된 MTU 값으로 되돌립니다. 이로 인해 노드 드레이닝이 트리거될 수 있습니다.
- 7
- 선택 사항: pod에
/dev/vhost-net
장치를 마운트하려면needVhostNet
을true
로 설정합니다. DPDK(Data Plane Development Kit)와 함께 마운트된/dev/vhost-net
장치를 사용하여 트래픽을 커널 네트워크 스택으로 전달합니다. - 8
- SR-IOV 물리적 네트워크 장치에 생성할 VF(가상 기능) 수입니다. Intel NIC(Network Interface Controller)의 경우 VF 수는 장치에서 지원하는 총 VF보다 클 수 없습니다. Mellanox NIC의 경우 VF 수는
127
보다 클 수 없습니다. - 9
- external
Managed
필드는 SR-IOV Network Operator가 모두 관리되는지 또는 VF(가상 기능) 서브 세트만 관리하는지 여부를 나타냅니다. 값을false
로 설정하면 SR-IOV Network Operator가 PF의 모든 VF를 관리하고 구성합니다.참고external
Managed
가true
로 설정된 경우SriovNetworkNodePolicy
리소스를 적용하기 전에 PF(가상 기능)에 VF(가상 기능)를 수동으로 생성해야 합니다. VF가 사전 생성되지 않은 경우 SR-IOV Network Operator의 Webhook에서 정책 요청을 차단합니다.external
Managed
가false
로 설정되면 SR-IOV Network Operator가 필요한 경우 재설정을 포함하여 VF를 자동으로 생성하고 관리합니다.호스트 시스템에서 VF를 사용하려면 NMState를 통해 생성하고 external
Managed를
설정해야 합니다. 이 모드에서 SR-IOV Network Operator는 정책의true
로nicSelector
필드에 명시적으로 정의된 PF 또는 수동으로 관리되는 VF를 수정하지 않습니다. 그러나 SR-IOV Network Operator는 Pod 보조 인터페이스로 사용되는 VF를 계속 관리합니다. - 10
- NIC 선택기는 이 리소스가 적용되는 장치를 식별합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 실수로 장치를 선택하지 않도록 네트워크 장치를 정확하게 파악하는 것이 좋습니다.
rootDevices
를 지정하면vendor
,deviceID
또는pfNames
의 값도 지정해야 합니다.pfNames
와rootDevices
를 동시에 지정하는 경우 동일한 장치를 참조하는지 확인하십시오.netFilter
의 값을 지정하는 경우 네트워크 ID가 고유하므로 다른 매개변수를 지정할 필요가 없습니다. - 11
- 선택사항: SR-IOV 네트워크 장치의 벤더 16진수 벤더 식별자입니다. 허용되는 값은
8086
(Intel) 및15b3
(M#159nox)입니다. - 12
- 선택사항: SR-IOV 네트워크 장치의 장치 16진수 장치 식별자입니다. 예를 들어
101b
는 Mellanox ConnectX-6 장치의 장치 ID입니다. - 13
- 선택 사항: 리소스가 적용해야 하는 하나 이상의 물리적 기능(PF) 이름으로 구성된 배열입니다.
- 14
- 선택 사항: 리소스가 적용해야 하는 하나 이상의 PCI 버스 주소로 구성된 배열입니다. 예:
0000:02:00.1
. - 15
- 선택 사항: 플랫폼별 네트워크 필터입니다. 지원되는 유일한 플랫폼은 RHOSP(Red Hat OpenStack Platform)입니다. 허용 가능한 값은 다음 형식을 사용합니다.
openstack/NetworkID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
를/var/config/openstack/latest/network_data.json
메타데이터 파일의 값으로 바꿉니다. 이 필터를 사용하면 VF가 특정 OpenStack 네트워크와 연결되어 있습니다. Operator는 이 필터를 사용하여 OpenStack 플랫폼에서 제공하는 메타데이터를 기반으로 VF를 적절한 네트워크에 매핑합니다. - 16
- 선택사항: 이 리소스에서 생성된 VF에 대해 구성할 드라이버입니다. 허용되는 값은
netdevice
및vfio-pci
입니다. 기본값은netdevice
입니다.베어 메탈 노드의 DPDK 모드에서 Mellanox NIC가 작동하려면
netdevice
드라이버 유형을 사용하고isRdma
를true
로 설정합니다. - 17
- 선택 사항: 원격 직접 메모리 액세스(RDMA) 모드를 활성화할지 여부를 구성합니다. 기본값은
false
입니다.isRdma
매개변수가true
로 설정된 경우 RDMA 사용 VF를 일반 네트워크 장치로 계속 사용할 수 있습니다. 어느 모드에서나 장치를 사용할 수 있습니다.isRdma
를true
로 설정하고 추가로needVhostNet
을true
로 설정하여 Fast Datapath DPDK 애플리케이션에서 사용할 Mellanox NIC를 구성합니다.참고intel NIC의 경우
isRdma
매개변수를true
로 설정할 수 없습니다. - 18
- 선택사항: VF의 링크 유형입니다. 기본값은
eth
이더넷입니다. 이 값을 InfiniBand의 'ib'로 변경합니다.linkType
을ib
로 설정하면isRdma
가 SR-IOV Network Operator 웹 후크에 의해 자동으로true
로 설정됩니다.linkType
을ib
로 설정하면deviceType
을vfio-pci
로 설정해서는 안 됩니다.장치 플러그인에서 보고한 사용 가능한 장치 수가 올바르지 않을 수 있으므로 SriovNetworkNodePolicy의 linkType을
eth
로 설정하지 마십시오. - 19
- 선택 사항: 하드웨어 오프로드를 활성화하려면
eSwitchMode
필드를"switchdev"
로 설정해야 합니다. 하드웨어 오프로드에 대한 자세한 내용은 "하드웨어 오프로드 구성"을 참조하십시오. - 20
- 선택 사항: SR-IOV 네트워크 리소스의 NUMA 노드를 토폴로지 관리자로 알리려면 값을
true
로 설정합니다. 기본값은false
입니다.
2.1.1. SR-IOV 네트워크 노드 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 InfiniBand 장치의 구성을 설명합니다.
InfiniBand 장치의 구성 예
다음 예제에서는 RHOSP 가상 머신의 SR-IOV 네트워크 장치에 대한 구성을 설명합니다.
가상 머신의 SR-IOV 장치 구성 예
2.1.2. SR-IOV 네트워크 장치의 자동 검색 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV Network Operator는 작업자 노드에서 SR-IOV 가능 네트워크 장치를 클러스터에서 검색합니다. Operator는 호환되는 SR-IOV 네트워크 장치를 제공하는 각 작업자 노드에 대해 SriovNetworkNodeState CR(사용자 정의 리소스)을 생성하고 업데이트합니다.
CR에는 작업자 노드와 동일한 이름이 할당됩니다. status.interfaces
목록은 노드의 네트워크 장치에 대한 정보를 제공합니다.
SriovNetworkNodeState
오브젝트를 수정하지 마십시오. Operator는 이러한 리소스를 자동으로 생성하고 관리합니다.
2.1.2.1. SriovNetworkNodeState 오브젝트의 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 YAML은 SR-IOV Network Operator가 생성한 SriovNetworkNodeState
오브젝트의 예입니다.
SriovNetworkNodeState 오브젝트
2.1.3. SR-IOV 장치의 VF(가상 기능) 파티셔닝 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 동일한 물리적 기능(PF)에서 많은 리소스 풀로 VF(가상 기능)를 분할할 수 있습니다. 예를 들어, 일부 VF를 기본 드라이버로 로드하고 나머지 VF를vfio-pci
드라이버로 로드할 수 있습니다.
예를 들어 다음 YAML은 VF 2
에서 7
까지의 netpf0
인터페이스에 대한 선택기를 보여줍니다.
pfNames: ["netpf0#2-7"]
pfNames: ["netpf0#2-7"]
다음과 같습니다.
netpf0
- PF 인터페이스의 이름입니다.
2
- 범위에 포함된 첫 번째 VF 인덱스(0 기반)입니다.
7
- 범위에 포함된 마지막 VF 인덱스(0 기반)입니다.
다음 요구 사항을 충족하는 다양한 정책 CR을 사용하여 동일한 PF에서 VF를 선택할 수 있습니다.
-
numVfs
값은 동일한 PF를 선택하는 정책과 유사해야 합니다. -
VF 색인은
0
에서<numVfs>-1
까지의 범위 내에 있어야 합니다. 예를 들어,numVfs
가8
로 설정된 정책이 있는 경우<first_vf>
값은0
보다 작아야 하며<last_vf>
는7
보다 크지 않아야 합니다. - 다른 정책의 VF 범위는 겹치지 않아야 합니다.
-
<first_vf>
는<last_vf>
보다 클 수 없습니다.
다음 예는 SR-IOV 장치의 NIC 파티셔닝을 보여줍니다.
정책 policy-net-1
은 기본 VF 드라이버와 함께 PF net pf
을 정의합니다. 정책 0
의 VF 0을 포함하는 리소스 풀 net
-1policy-net-1-dpdk
는 vfio
VF 드라이버와 함께 PF netpf0
의 VF 8
~15
를 포함하는 리소스 풀 net-1-dpdk
를 정의합니다.
정책 policy-net-1
:
정책 policy-net-1-dpdk
:
인터페이스가 성공적으로 분할되었는지 확인
다음 명령을 실행하여 SR-IOV 장치의 VF(가상 기능)로 분할된 인터페이스가 있는지 확인합니다.
ip link show <interface>
$ ip link show <interface>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- &
lt;interface
>를 SR-IOV 장치의 VF로 분할할 때 지정한 인터페이스로 바꿉니다(예:ens3f1
).
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.4. OpenStack에서 SR-IOV를 사용하는 클러스터의 테스트 Pod 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
다음 testpmd
Pod는 대규모 페이지, 예약된 CPU 및 SR-IOV 포트로 컨테이너 생성을 보여줍니다.
testpmd
Pod의 예
- 1
- 이 예에서는 성능 프로필의 이름이
cnf-performance 프로필
이라고 가정합니다.
2.1.5. OpenStack에서 OVS 하드웨어 오프로드를 사용하는 클러스터의 테스트 포드 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
다음 testpmd
Pod는 RHOSP(Red Hat OpenStack Platform)에서 OVS(Open vSwitch) 하드웨어 오프로드를 보여줍니다.
testpmd
Pod의 예
- 1
- 성능 프로필의 이름이
cnf-performance 프로필
로 지정되지 않은 경우 해당 문자열을 올바른 성능 프로필 이름으로 교체합니다.
2.1.6. Downward API 에 대한 대규보 페이지 리소스 주입 링크 복사링크가 클립보드에 복사되었습니다!
Pod 사양에 대규모 페이지에 대한 리소스 요청 또는 제한이 포함된 경우 Network Resources Injector는 컨테이너에 대규모 페이지 정보를 제공하기 위해 Pod 사양에 Downward API 필드를 자동으로 추가합니다.
Network Resources Injector는 podnetinfo
라는 볼륨을 추가하고 Pod의 각 컨테이너에 대해 /etc/podnetinfo
에 마운트됩니다. 볼륨은 Downward API를 사용하며 대규모 페이지 요청 및 제한에 대한 파일을 포함합니다. 파일 이름 지정 규칙은 다음과 같습니다.
-
/etc/podnetinfo/hugepages_1G_request_<container-name>
-
/etc/podnetinfo/hugepages_1G_limit_<container-name>
-
/etc/podnetinfo/hugepages_2M_request_<container-name>
-
/etc/podnetinfo/hugepages_2M_limit_<container-name>
이전 목록에 지정된 경로는 app-netutil
라이브러리와 호환됩니다. 기본적으로 라이브러리는 /etc/podnetinfo
디렉터리에서 리소스 정보를 검색하도록 구성됩니다. Downward API 경로 항목을 수동으로 지정하도록 선택하는 경우 app-netutil
라이브러리는 이전 목록의 경로 외에도 다음 경로를 검색합니다.
-
/etc/podnetinfo/hugepages_request
-
/etc/podnetinfo/hugepages_limit
-
/etc/podnetinfo/hugepages_1G_request
-
/etc/podnetinfo/hugepages_1G_limit
-
/etc/podnetinfo/hugepages_2M_request
-
/etc/podnetinfo/hugepages_2M_limit
Network Resources Injector에서 생성할 수 있는 경로와 마찬가지로, 이전 목록의 경로는 선택적으로 _<container-name>
접미사로 종료할 수 있습니다.