9.4. 커널 액세스를 통해 루트리스 DPDK 워크로드를 실행하기 위해 TAP CNI 사용
DPDK 애플리케이션은 virtio-user를
예외 경로로 사용하여 로그 메시지와 같은 특정 유형의 패킷을 커널에 주입하여 처리할 수 있습니다. 이 기능에 대한 자세한 내용은 Virtio_user를 예외 경로로 참조하세요.
OpenShift Container Platform 버전 4.14 이상에서는 권한이 없는 Pod를 사용하여 Tap CNI 플러그인과 함께 DPDK 애플리케이션을 실행할 수 있습니다. 이 기능을 사용하려면 SriovNetworkNodePolicy
개체 내에서 needVhostNet
매개변수를 true
로 설정하여 vhost-net
장치를 마운트해야 합니다.
그림 9.1. DPDK 및 TAP 구성 예시
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - SR-IOV Network Operator가 설치되어 있습니다.
-
cluster-admin
권한이 있는 사용자로 로그인했습니다. 모든 노드에서
setsebools container_use_devices=on
이 루트로 설정되어 있는지 확인하세요.참고SELinux 부울 값을 설정하려면 Machine Config Operator를 사용하세요.
프로세스
다음 예시와 같은 내용을 포함하는
test-namespace.yaml
과 같은 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 새
네임스페이스
객체를 만듭니다.oc apply -f test-namespace.yaml
$ oc apply -f test-namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예시와 같은 내용을 포함하는
sriov-node-network-policy.yaml
과 같은 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이는 해당 프로필이 Mellanox 네트워크 인터페이스 컨트롤러(NIC)에 맞게 특별히 제작되었음을 나타냅니다.
- 2
isRdma를
true
로 설정하는 것은 Mellanox NIC에만 필요합니다.- 3
- 이렇게 하면
/dev/net/tun
및/dev/vhost-net
장치가 컨테이너에 마운트되어 애플리케이션이 탭 장치를 생성하고 해당 탭 장치를 DPDK 워크로드에 연결할 수 있습니다. - 4
- 선택 사항: SR-IOV 네트워크 장치의 벤더 16진수 코드입니다. 값 15b3은 Mellanox NIC와 연결됩니다.
- 5
- 선택사항: SR-IOV 네트워크 장치의 장치 16진수 코드입니다.
다음 명령을 실행하여
SriovNetworkNodePolicy
오브젝트를 생성합니다.oc create -f sriov-node-network-policy.yaml
$ oc create -f sriov-node-network-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음
SriovNetwork
객체를 만든 다음 YAML을sriov-network-attachment.yaml
파일에 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고SriovNetwork
의 각 옵션에 대한 자세한 설명은 " SR-IOV 추가 네트워크 구성" 섹션을 참조하십시오.선택적 라이브러리인 app-netutil은 컨테이너의 상위 pod에 대한 네트워크 정보를 수집하기 위한 여러 API 메서드를 제공합니다.
다음 명령을 실행하여
SriovNetwork
오브젝트를 생성합니다.oc create -f sriov-network-attachment.yaml
$ oc create -f sriov-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예시와 같은 내용으로 네트워크 연결 정의를 정의하는
tap-example.yaml
과 같은 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SriovNetwork
개체가 생성된 것과 동일한target_namespace를
지정합니다.
다음 명령을 실행하여
NetworkAttachmentDefinition
객체를 만듭니다.oc apply -f tap-example.yaml
$ oc apply -f tap-example.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예시와 같은 내용을 포함하는
dpdk-pod-rootless.yaml
과 같은 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SriovNetwork
개체가 생성된 것과 동일한target_namespace를
지정합니다. 다른 네임스페이스에 Pod를 만들려면Pod
사양과SriovNetwork
개체 모두에서target_namespace를
변경합니다.- 2
- 볼륨에 마운트된 디렉토리와 해당 볼륨에 생성된 파일의 그룹 소유권을 설정합니다.
- 3
- 컨테이너를 실행하는 데 사용되는 기본 그룹 ID를 지정합니다.
- 4
- 애플리케이션이 포함된 DPDK 이미지와 애플리케이션에서 사용하는 DPDK 라이브러리를 지정합니다.
- 5
- 컨테이너의 securityContext에서 모든 기능(
ALL
)을 제거한다는 것은 컨테이너가 일반 작업에 필요한 것 이상의 특별한 권한을 갖지 않는다는 것을 의미합니다. - 6
- hugepage 할당, 시스템 리소스 할당 및 네트워크 인터페이스 액세스를 위해 컨테이너 내부의 애플리케이션에 필요한 추가 기능을 지정합니다. 이러한 기능도
setcap
명령을 사용하여 바이너리 파일에 설정해야 합니다. - 7
- Mellanox 네트워크 인터페이스 컨트롤러(NIC)에는
NET_RAW
기능이 필요합니다. - 8
- 컨테이너를 실행하는 데 사용되는 사용자 ID를 지정합니다.
- 9
- 이 설정은 포드 내의 컨테이너에 호스트 시스템에 대한 특권 액세스 권한이 부여되지 않아야 함을 나타냅니다.
- 10
- 이 설정을 사용하면 컨테이너가 처음에 할당받은 루트가 아닌 권한보다 더 높은 권한으로 권한을 확대할 수 있습니다.
- 11
- 이 설정은 컨테이너가 루트가 아닌 사용자로 실행되도록 보장합니다. 이를 통해 최소 권한의 원칙을 강화하고 컨테이너가 손상될 수 있는 잠재적 영향을 제한하며 공격 표면을 줄이는 데 도움이 됩니다.
- 12
- DPDK 포드의
/mnt/huge
아래에 hugepage 볼륨을 마운트합니다. hugepage 볼륨은 매체가Hugepages
인 emptyDir 볼륨 유형으로 지원됩니다. - 13
- 선택 사항: DPDK 포드에 할당된 DPDK 장치 수를 지정합니다. 명시적으로 지정하지 않으면 이 리소스 요청 및 제한은 SR-IOV 네트워크 리소스 인젝터에 의해 자동으로 추가됩니다. SR-IOV 네트워크 리소스 인젝터는 SR-IOV Operator에서 관리하는 승인 컨트롤러 구성 요소입니다. 기본적으로 활성화되어 있으며 기본
SriovOperatorConfig
CR에서enableInjector
옵션을false
로 설정하여 비활성화할 수 있습니다. - 14
- CPU 수를 지정합니다. DPDK pod는 일반적으로 kubelet에서 배타적 CPU를 할당해야 합니다. 이를 위해 CPU 관리자 정책을
static
으로 설정하고 QoS가보장
된 Pod를 생성합니다. - 15
- hugepage 크기
hugepages-1Gi
또는hugepages-2Mi
를 지정하고 DPDK Pod에 할당할 hugepage 수량을 지정합니다.2Mi
및1Gi
hugepage를 별도로 구성합니다.1Gi
hugepage를 구성하려면 커널 인수를 노드에 추가해야 합니다. 예를 들어, 커널 인수default_hugepagesz = 1GB
,hugepagesz = 1G
및hugepages = 16
을 추가하면 시스템 부팅 시16 * 1Gi
hugepage가 할당됩니다. - 16
- 성능 프로필 이름이
cnf-performance profile
이 아닌 경우 해당 문자열을 올바른 성능 프로필 이름으로 바꾸세요.
다음 명령을 실행하여 DPDK Pod를 생성합니다.
oc create -f dpdk-pod-rootless.yaml
$ oc create -f dpdk-pod-rootless.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow