2장. SR-IOV 네트워크 장치 구성
클러스터에서 SR-IOV(Single Root I/O Virtualization) 장치를 구성할 수 있습니다.
다음 문서의 작업을 수행하기 전에 SR-IOV 네트워크 운영자가 설치되어 있는지 확인하세요.
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) 플러그인과 장치 플러그인은 선택된 노드에만 배포됩니다.중요
SR-IOV 네트워크 운영자는 노드 네트워크 구성 정책을 순서대로 노드에 적용합니다. SR-IOV 네트워크 운영자는 노드 네트워크 구성 정책을 적용하기 전에 노드의 머신 구성 풀(MCP)이
저하
또는업데이트
와 같은 비정상 상태인지 확인합니다. 노드가 비정상적 MCP에 있는 경우 클러스터의 모든 대상 노드에 노드 네트워크 구성 정책을 적용하는 프로세스는 MCP가 정상 상태로 돌아올 때까지 일시 중지됩니다.다른 MCP에 있는 노드를 포함하여 다른 노드에 대한 노드 네트워크 구성 정책 적용을 건강에 해로운 MCP의 노드가 차단하는 것을 방지하려면 각 MCP에 대해 별도의 노드 네트워크 구성 정책을 만들어야 합니다.
- 5
- 선택 사항: 우선순위는
0
에서99
사이의 정수 값입니다. 작은 값은 우선순위가 높습니다. 예를 들어 우선순위10
은 우선순위99
보다 높습니다. 기본값은99
입니다. - 6
- 선택 사항: 물리적 기능과 모든 가상 기능의 최대 전송 단위(MTU). 최대 MTU 값은 네트워크 인터페이스 컨트롤러(NIC) 모델마다 다를 수 있습니다.중요
기본 네트워크 인터페이스에 가상 기능을 만들려면 MTU가 클러스터 MTU와 일치하는 값으로 설정되어 있는지 확인하세요.
포드에 기능이 할당된 동안 단일 가상 기능의 MTU를 수정하려면 SR-IOV 네트워크 노드 정책에서 MTU 값을 비워 둡니다. 그렇지 않으면 SR-IOV 네트워크 운영자는 가상 기능의 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
externallyManaged
필드는 SR-IOV 네트워크 운영자가 모든 가상 기능(VF)을 관리하는지, 아니면 일부 가상 기능(VF)만 관리하는지 여부를 나타냅니다. 값을false
로 설정하면 SR-IOV 네트워크 운영자가 PF의 모든 VF를 관리하고 구성합니다.참고externallyManaged
가true
로 설정된 경우SriovNetworkNodePolicy
리소스를 적용하기 전에 물리적 기능(PF)에서 수동으로 가상 기능(VF)을 만들어야 합니다. VF가 미리 생성되지 않은 경우 SR-IOV 네트워크 운영자의 웹후크가 정책 요청을 차단합니다.externallyManaged
가false
로 설정되면 SR-IOV 네트워크 운영자는 필요한 경우 재설정을 포함하여 VF를 자동으로 생성하고 관리합니다.호스트 시스템에서 VF를 사용하려면 NMState를 통해 VF를 생성하고
externallyManaged를
true
로 설정해야 합니다. 이 모드에서는 SR-IOV 네트워크 운영자가 정책의nicSelector
필드에 명시적으로 정의된 경우를 제외하고 PF 또는 수동으로 관리되는 VF를 수정하지 않습니다. 그러나 SR-IOV 네트워크 운영자는 Pod 보조 인터페이스로 사용되는 VF를 계속 관리합니다.- 10
- NIC 선택기는 이 리소스가 적용되는 장치를 식별합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 실수로 장치를 선택하지 않도록 네트워크 장치를 정확하게 파악하는 것이 좋습니다.
rootDevices
를 지정하면vendor
,deviceID
또는pfNames
의 값도 지정해야 합니다.pfNames
와rootDevices
를 동시에 지정하는 경우 동일한 장치를 참조하는지 확인하십시오.netFilter
의 값을 지정하는 경우 네트워크 ID가 고유하므로 다른 매개변수를 지정할 필요가 없습니다. - 11
- 선택 사항: SR-IOV 네트워크 장치의 공급업체 16진수 공급업체 식별자입니다. 허용되는 값은
8086
(Intel)과15b3
(Mellanox)뿐입니다. - 12
- 선택 사항: SR-IOV 네트워크 장치의 16진수 장치 식별자입니다. 예를 들어
101b
는 Mellanox ConnectX-6 장치의 장치 ID입니다. - 13
- 선택 사항: 리소스가 적용되어야 하는 하나 이상의 물리적 기능(PF) 이름의 배열입니다.
- 14
- 선택 사항: 리소스가 적용되어야 하는 하나 이상의 PCI 버스 주소 배열입니다. 예를 들어
0000:02:00.1
. - 15
- 선택 사항: 플랫폼별 네트워크 필터입니다. 지원되는 유일한 플랫폼은 Red Hat OpenStack Platform(RHOSP)입니다. 허용 가능한 값은 다음 형식을 사용합니다.
openstack/NetworkID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
를/var/config/openstack/latest/network_data.json
메타데이터 파일의 값으로 바꿉니다. 이 필터는 VF가 특정 OpenStack 네트워크와 연결되도록 보장합니다. 운영자는 이 필터를 사용하여 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. 보안 부팅이 활성화된 경우 Mellanox 카드에서 SR-IOV 네트워크 운영자 구성 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV 네트워크 운영자는 Mellanox 장치의 펌웨어 구성을 건너뛸 수 있는 옵션을 지원합니다. 이 옵션을 사용하면 시스템에서 보안 부팅이 활성화된 경우 SR-IOV 네트워크 운영자를 사용하여 가상 기능을 만들 수 있습니다. 시스템을 보안 부팅으로 전환하기 전에 펌웨어에서 가상 기능의 수를 수동으로 구성하고 할당해야 합니다.
펌웨어의 가상 기능 수는 정책에서 요청할 수 있는 가상 기능의 최대 수입니다.
프로세스
sriov-config 데몬을 사용할 때 시스템에 보안 부팅이 없는 경우 다음 명령을 실행하여 가상 기능(VF)을 구성합니다.
mstconfig -d -0001:b1:00.1 set SRIOV_EN=1 NUM_OF_VFS=16
$ mstconfig -d -0001:b1:00.1 set SRIOV_EN=1 NUM_OF_VFS=16
1 2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow Mellanox 플러그인을 비활성화하여 SR-IOV 네트워크 운영자를 구성합니다. 다음
SriovOperatorConfig
구성 예를 참조하세요.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 가상 기능과 구성 설정을 활성화하려면 시스템을 재부팅하세요.
다음 명령을 실행하여 시스템을 재부팅한 후 가상 기능(VF)을 확인하세요.
oc -n openshift-sriov-network-operator get sriovnetworknodestate.sriovnetwork.openshift.io worker-0 -oyaml
$ oc -n openshift-sriov-network-operator get sriovnetworknodestate.sriovnetwork.openshift.io worker-0 -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
totalvfs
값은 이 절차의 앞부분에서mstconfig
명령에 사용된 숫자와 동일합니다.
장치 부팅 과정에서 승인되지 않은 운영 체제와 악성 소프트웨어가 로드되는 것을 방지하려면 보안 부팅을 활성화하세요.
BIOS(기본 입출력 시스템)를 사용하여 다음 매개변수에 대한 값을 설정하여 보안 부팅을 활성화합니다.
-
보안 부팅: 활성화됨
-
보안 부팅 정책: 표준
-
보안 부팅 모드: 모드 배포됨
-
- 시스템을 재부팅합니다.
2.1.4. 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를 선택할 수 있습니다.
-
동일한 PF를 선택하는 정책의 경우
numVfs
값은 비슷해야 합니다. -
VF 색인은
0
에서<numVfs>-1
까지의 범위 내에 있어야 합니다. 예를 들어,numVfs
가8
로 설정된 정책이 있는 경우<first_vf>
값은0
보다 작아야 하며<last_vf>
는7
보다 크지 않아야 합니다. - 다른 정책의 VF 범위는 겹치지 않아야 합니다.
-
<first_vf>
는<last_vf>
보다 클 수 없습니다.
다음 예는 SR-IOV 장치의 NIC 파티셔닝을 보여줍니다.
정책-net-1은
기본 VF 드라이버가 있는 PF netpf0
의 VF 0을
포함하는 리소스 풀 net-1을
정의합니다. 정책-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
<인터페이스>를
SR-IOV 장치의 VF로 분할할 때 지정한 인터페이스(예:ens3f1
)로 바꾸세요.
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.5. OpenStack에서 SR-IOV를 사용하는 클러스터를 위한 테스트 포드 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
다음 testpmd
포드는 대규모 페이지, 예약된 CPU 및 SR-IOV 포트를 사용하여 컨테이너를 생성하는 방법을 보여줍니다.
testpmd
pod의 예
- 1
- 이 예에서는 성능 프로필의 이름이
cnf-performance profile
이라고 가정합니다.
2.1.6. OpenStack에서 OVS 하드웨어 오프로드를 사용하는 클러스터를 위한 테스트 포드 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
다음 testpmd
포드는 Red Hat OpenStack Platform(RHOSP)에서 Open vSwitch(OVS) 하드웨어 오프로드를 보여줍니다.
testpmd
pod의 예
- 1
- 성능 프로필 이름이
cnf-performance profile
이 아닌 경우 해당 문자열을 올바른 성능 프로필 이름으로 바꾸세요.
2.1.7. 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>
접미사로 종료할 수 있습니다.