12.9.3. Intel NIC와 함께 DPDK 모드에서 VF(가상 기능)를 사용하는 예
절차
다음
SriovNetworkNodePolicy
오브젝트를 생성한 다음 YAML을intel-dpdk-node-policy.yaml
파일에 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: intel-dpdk-node-policy namespace: openshift-sriov-network-operator spec: resourceName: intelnics nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: <priority> numVfs: <num> nicSelector: vendor: "8086" deviceID: "158b" pfNames: ["<pf_name>", ...] rootDevices: ["<pci_bus_id>", "..."] deviceType: vfio-pci 1
- 1
- 가상 기능의 드라이버 유형을
vfio-pci
로 지정합니다.
참고SriovNetworkNodePolicy
의 각 옵션에 대한 자세한 설명은SR-IOV 네트워크 장치 구성
섹션을 참조하십시오.SriovNetworkNodePolicy
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 노드를 비우고 경우에 따라 노드를 재부팅할 수 있습니다. 구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다. 제거된 워크로드를 사전에 처리하는 데 클러스터에 사용 가능한 노드가 충분한지 확인하십시오.구성 업데이트가 적용되면
openshift-sriov-network-operator
네임스페이스의 모든 Pod 상태가Running
으로 변경됩니다.다음 명령을 실행하여
SriovNetworkNodePolicy
오브젝트를 생성합니다.$ oc create -f intel-dpdk-node-policy.yaml
다음
SriovNetwork
오브젝트를 생성한 다음 YAML을intel-dpdk-network.yaml
파일에 저장합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: intel-dpdk-network namespace: openshift-sriov-network-operator spec: networkNamespace: <target_namespace> ipam: "{}" 1 vlan: <vlan> resourceName: intelnics
- 1
- ipam CNI 플러그인에 빈 오브젝트
"{}"
을 지정합니다. DPDK는 사용자 공간 모드에서 작동하며 IP 주소가 필요하지 않습니다.
참고SriovNetwork
의 각 옵션에 대한 자세한 설명은 " SR-IOV 추가 네트워크 구성" 섹션을 참조하십시오.다음 명령을 실행하여
SriovNetwork
오브젝트를 생성합니다.$ oc create -f intel-dpdk-network.yaml
다음
Pod
사양을 생성한 다음 YAML을intel-dpdk-pod.yaml
파일에 저장합니다.apiVersion: v1 kind: Pod metadata: name: dpdk-app namespace: <target_namespace> 1 annotations: k8s.v1.cni.cncf.io/networks: intel-dpdk-network spec: containers: - name: testpmd image: <DPDK_image> 2 securityContext: runAsUser: 0 capabilities: add: ["IPC_LOCK","SYS_RESOURCE","NET_RAW"] 3 volumeMounts: - mountPath: /dev/hugepages 4 name: hugepage resources: limits: openshift.io/intelnics: "1" 5 memory: "1Gi" cpu: "4" 6 hugepages-1Gi: "4Gi" 7 requests: openshift.io/intelnics: "1" memory: "1Gi" cpu: "4" hugepages-1Gi: "4Gi" command: ["sleep", "infinity"] volumes: - name: hugepage emptyDir: medium: HugePages
- 1
SriovNetwork
오브젝트intel-dpdk-network
가 생성되는 동일한target_namespace
를 지정합니다. 다른 네임스페이스에서 포드를 생성하려면Pod
사양과SriovNetowrk
오브젝트 모두에서target_namespace
를 변경합니다.- 2
- 애플리케이션 및 애플리케이션이 사용하는 DPDK 라이브러리를 포함하는 DPDK 이미지를 지정합니다.
- 3
- hugepage 할당, 시스템 리소스 할당 및 네트워크 인터페이스 액세스를 위해 컨테이너 내부의 애플리케이션에 필요한 추가 기능을 지정합니다.
- 4
/dev/hugepages
아래 DPDK pod에 hugepage 볼륨을 마운트합니다. hugepage 볼륨은 매체가Hugepages
인 emptyDir 볼륨 유형으로 지원됩니다.- 5
- 선택 사항: DPDK Pod에 할당된 DPDK 장치 수를 지정합니다. 명시적으로 지정되지 않은 경우 이 리소스 요청 및 제한은 SR-IOV 네트워크 리소스 인젝터에 의해 자동으로 추가됩니다. SR-IOV 네트워크 리소스 인젝터는 SR-IOV Operator에서 관리하는 승인 컨트롤러 구성 요소입니다. 기본적으로 활성화되어 있으며 기본
SriovOperatorConfig
CR에서enableInjector
옵션을false
로 설정하여 비활성화할 수 있습니다. - 6
- CPU 수를 지정합니다. DPDK pod는 일반적으로 kubelet에서 배타적 CPU를 할당해야 합니다. 이를 위해 CPU 관리자 정책을
static
으로 설정하고 QoS가보장
된 Pod를 생성합니다. - 7
- hugepage 크기
hugepages-1Gi
또는hugepages-2Mi
를 지정하고 DPDK Pod에 할당할 hugepage 수량을 지정합니다.2Mi
및1Gi
hugepage를 별도로 구성합니다.1Gi
hugepage를 구성하려면 커널 인수를 노드에 추가해야 합니다. 예를 들어, 커널 인수default_hugepagesz = 1GB
,hugepagesz = 1G
및hugepages = 16
을 추가하면 시스템 부팅 시16 * 1Gi
hugepage가 할당됩니다.
다음 명령을 실행하여 DPDK Pod를 생성합니다.
$ oc create -f intel-dpdk-pod.yaml