12.4. SR-IOV 네트워크 장치 구성

클러스터에서 SR-IOV(Single Root I/O Virtualization) 장치를 구성할 수 있습니다.

12.4.1. SR-IOV 네트워크 노드 구성 오브젝트

SriovNetworkNodePolicy 오브젝트를 정의하여 노드의 SR-IOV 네트워크 장치 구성을 지정합니다. 오브젝트는 sriovnetwork.openshift.io API 그룹의 일부입니다.

다음 YAML은 SriovNetworkNodePolicy 오브젝트를 설명합니다.

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: <name> 1
  namespace: openshift-sriov-network-operator 2
spec:
  resourceName: <sriov_resource_name> 3
  nodeSelector:
    feature.node.kubernetes.io/network-sriov.capable: "true" 4
  priority: <priority> 5
  mtu: <mtu> 6
  numVfs: <num> 7
  nicSelector: 8
    vendor: "<vendor_code>" 9
    deviceID: "<device_id>" 10
    pfNames: ["<pf_name>", ...] 11
    rootDevices: ["<pci_bus_id>", "..."] 12
  deviceType: <device_type> 13
  isRdma: false 14
  linkType: <link_type> 15
1
CR 오브젝트의 이름입니다.
2
SR-IOV Operator가 설치된 네임스페이스입니다.
3
SR-IOV 장치 플러그인의 리소스 이름입니다. 리소스 이름에 대해 여러 SriovNetworkNodePolicy 오브젝트를 생성할 수 있습니다.
4
구성할 노드를 선택하는 노드 선택기입니다. 선택한 노드의 SR-IOV 네트워크 장치만 구성됩니다. SR-IOV CNI(Container Network Interface) 플러그인 및 장치 플러그인은 선택한 노드에만 배포됩니다.
5
선택 사항: 0 에서 99 사이의 정수 값입니다. 숫자가 작을수록 우선 순위가 높아지므로 우선 순위 10은 우선 순위 99보다 높습니다. 기본값은 99입니다.
6
선택 사항: 가상 기능의 최대 전송 단위(MTU). 최대 MTU 값은 NIC 모델마다 다를 수 있습니다.
7
SR-IOV 물리적 네트워크 장치에 생성할 VF(가상 기능) 수입니다. Intel NIC(Network Interface Card)의 경우 VF 수는 장치에서 지원하는 총 VF보다 클 수 없습니다. Mellanox NIC의 경우 VF 수는 128보다 클 수 없습니다.
8
nicSelector 매핑은 Operator가 구성할 장치를 선택합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 실수로 장치를 선택하지 않도록 네트워크 장치를 정확하게 파악하는 것이 좋습니다. rootDevices를 지정하면 vendor, deviceID 또는 pfNames의 값도 지정해야 합니다. pfNamesrootDevices를 동시에 지정하는 경우 동일한 장치를 가리키는지 확인하십시오.
9
선택 사항: SR-IOV 네트워크 장치의 공급업체 16진수 코드입니다. 허용되는 값은 808615b3입니다.
10
선택 사항: SR-IOV 네트워크 장치의 장치 16진수 코드입니다. 허용되는 값은 158b, 1015, 1017입니다.
11
선택 사항: 장치에 대한 하나 이상의 물리적 기능(PF) 이름으로 이루어진 배열입니다.
12
장치의 PF에 대한 하나 이상의 PCI 버스 주소로 구성된 배열입니다. 다음 형식으로 주소를 입력합니다. 0000:02:00.1.
13
선택 사항: 가상 기능의 드라이버 유형입니다. 허용되는 값은 netdevicevfio-pci입니다. 기본값은 netdevice입니다.
참고

베어 메탈 노드의 DPDK(Data Plane Development Kit) 모드에서 Mellanox 카드를 작동시키려면 netdevice 드라이버 유형을 사용하고 isRdmatrue로 설정합니다.

14
선택 사항: 원격 직접 메모리 액세스(RDMA) 모드 사용 여부. 기본값은 false입니다.
참고

isRDMA 매개변수가 true로 설정된 경우 RDMA 가능 VF를 일반 네트워크 장치로 계속 사용할 수 있습니다. 어느 모드에서나 장치를 사용할 수 있습니다.

15
선택 사항: VF의 링크 유형입니다. eth 또는 ib 값 중 하나를 지정할 수 있습니다.eth 는 이더넷이고 ib 는 InfiniBand입니다. 명시적으로 설정되지 않은 경우 기본값은 eth입니다. linkTypeib로 설정하면 isRdma가 SR-IOV Network Operator 웹 후크에 의해 자동으로 true로 설정됩니다. linkTypeib로 설정하면 deviceTypevfio-pci로 설정해서는 안 됩니다.

12.4.1.1. SR-IOV 네트워크 노드 구성 예

다음 예제에서는 IB 장치의 구성을 설명합니다.

IB 장치의 구성 예

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: policy-ib-net-1
  namespace: openshift-sriov-network-operator
spec:
  resourceName: ibnic1
  nodeSelector:
    feature.node.kubernetes.io/network-sriov.capable: "true"
  numVfs: 4
  nicSelector:
    vendor: "15b3"
    deviceID: "101b"
    rootDevices:
      - "0000:19:00.0"
  linkType: ib
  isRdma: true

12.4.1.2. SR-IOV 장치의 VF(가상 기능) 파티셔닝

경우에 따라 동일한 물리적 기능(PF)의 VF(가상 기능)를 여러 리소스 풀로 분할할 수 있습니다. 예를 들어, 일부 VF를 기본 드라이버로 로드하고 나머지 VF를vfio-pci 드라이버로 로드할 수 있습니다. 이러한 배포에서 SriovNetworkNodePolicy CR(사용자 정의 리소스)의 pfNames 선택기를 사용하여 <pfname>#<first_vf>-<last_vf> 형식을 사용하여 풀의 VF 범위를 지정할 수 있습니다.

예를 들어 다음 YAML은 VF 2에서 7까지의 netpf0 인터페이스에 대한 선택기를 보여줍니다.

pfNames: ["netpf0#2-7"]
  • netpf0은 PF 인터페이스 이름입니다.
  • 2는 범위에 포함된 첫 번째 VF 인덱스(0 기반)입니다.
  • 7은 범위에 포함된 마지막 VF 인덱스(0 기반)입니다.

다음 요구 사항이 충족되면 다른 정책 CR을 사용하여 동일한 PF에서 VF를 선택할 수 있습니다.

  • 동일한 PF를 선택하는 정책의 경우 numVfs 값이 동일해야 합니다.
  • VF 색인은 0에서 <numVfs>-1까지의 범위 내에 있어야 합니다. 예를 들어, numVfs8로 설정된 정책이 있는 경우 <first_vf> 값은 0보다 작아야 하며 <last_vf>7보다 크지 않아야 합니다.
  • 다른 정책의 VF 범위는 겹치지 않아야 합니다.
  • <first_vf><last_vf>보다 클 수 없습니다.

다음 예는 SR-IOV 장치의 NIC 파티셔닝을 보여줍니다.

정책 policy-net-1은 기본 VF 드라이버와 함께 PF netpf0의 VF 0을 포함하는 리소스 풀 net-1을 정의합니다. 정책 policy-net-1-dpdkvfio VF 드라이버와 함께 PF netpf0의 VF 8 ~ 15를 포함하는 리소스 풀 net-1-dpdk를 정의합니다.

정책 policy-net-1:

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: policy-net-1
  namespace: openshift-sriov-network-operator
spec:
  resourceName: net1
  nodeSelector:
    feature.node.kubernetes.io/network-sriov.capable: "true"
  numVfs: 16
  nicSelector:
    pfNames: ["netpf0#0-0"]
  deviceType: netdevice

정책 policy-net-1-dpdk:

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: policy-net-1-dpdk
  namespace: openshift-sriov-network-operator
spec:
  resourceName: net1dpdk
  nodeSelector:
    feature.node.kubernetes.io/network-sriov.capable: "true"
  numVfs: 16
  nicSelector:
    pfNames: ["netpf0#8-15"]
  deviceType: vfio-pci