8.4. Cryostat CNI를 사용하여 커널 액세스로 루트리스 DPDK 워크로드 실행
DPDK 애플리케이션은 virtio-user
를 예외 경로로 사용하여 로그 메시지와 같은 특정 유형의 패킷을 처리를 위해 커널에 삽입할 수 있습니다. 이 기능에 대한 자세한 내용은 Exception Path로 Virtio_user 를 참조하십시오.
OpenShift Container Platform 버전 4.14 이상에서는 권한이 없는 Pod를 사용하여 탭 CNI 플러그인과 함께 DPDK 애플리케이션을 실행할 수 있습니다. 이 기능을 활성화하려면 SriovNetworkNodePolicy
오브젝트 내에서 needVhostNet
매개변수를 true
로 설정하여 vhost-net
장치를 마운트해야 합니다.
그림 8.1. DPDK 및 Cryostat 예제 구성
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - SR-IOV Network Operator가 설치되어 있습니다.
-
cluster-admin
권한이 있는 사용자로 로그인합니다. setsebools container_use_devices=on
이 모든 노드에서 root로 설정되어 있는지 확인합니다.참고Machine Config Operator를 사용하여 이 SELinux 부울을 설정합니다.
프로세스
다음 예와 같은 콘텐츠를 사용하여
test-namespace.yaml
과 같은 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 새
Namespace
오브젝트를 생성합니다.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 Network Interface Controller(NIC)에 맞게 조정됨을 나타냅니다.
- 2
isRdma
를true
로 설정하는 것은 Mellanox NIC에만 필요합니다.- 3
- 그러면 애플리케이션이 탭 장치를 생성하고 탭 장치를 DPDK 워크로드에 연결할 수 있도록
/dev/net/tun
및/dev/vhost-net
장치를 컨테이너에 마운트합니다. - 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
- 이 설정은 Pod 내의 컨테이너 또는 컨테이너에 호스트 시스템에 대한 권한 액세스 권한을 부여하지 않아야 함을 나타냅니다.
- 10
- 이 설정을 사용하면 컨테이너가 할당되었을 수 있는 초기 루트 권한이 아닌 초기 권한을 에스컬레이션할 수 있습니다.
- 11
- 이 설정을 사용하면 컨테이너가 루트가 아닌 사용자로 실행됩니다. 이렇게 하면 컨테이너 손상 및 공격 면적 감소의 잠재적인 영향을 제한하여 최소 권한 원칙을 적용하는 데 도움이 됩니다.
- 12
/mnt/huge
의 DPDK Pod에 hugepage 볼륨을 마운트합니다. hugepage 볼륨은 매체가Hugepages
인 emptyDir 볼륨 유형으로 지원됩니다.- 13
- 선택 사항: DPDK Pod에 할당된 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 프로필
로 지정되지 않은 경우 해당 문자열을 올바른 성능 프로필 이름으로 교체합니다.
다음 명령을 실행하여 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