5.9. 워크로드 Pod 생성
이 섹션의 절차를 사용하여 공유 및 호스트 장치에 대한 워크로드 Pod를 생성합니다.
5.9.2. RoCE에서 호스트 장치 RDMA 생성 링크 복사링크가 클립보드에 복사되었습니다!
NVIDIA Network Operator에 대한 호스트 장치 RDMA(Remote Direct Memory Access)에 대한 워크로드 Pod를 생성하고 Pod 구성을 테스트합니다.
사전 요구 사항
- Operator가 실행 중인지 확인합니다.
-
존재하는 경우
NicClusterPolicyCR(사용자 정의 리소스)을 삭제합니다.
프로세스
다음과 같이 새 호스트 장치
NicClusterPolicy(CR)를 생성합니다.$ cat <<EOF > network-hostdev-nic-cluster-policy.yaml apiVersion: mellanox.com/v1alpha1 kind: NicClusterPolicy metadata: name: nic-cluster-policy spec: ofedDriver: image: doca-driver repository: nvcr.io/nvidia/mellanox version: 24.10-0.7.0.0-0 startupProbe: initialDelaySeconds: 10 periodSeconds: 20 livenessProbe: initialDelaySeconds: 30 periodSeconds: 30 readinessProbe: initialDelaySeconds: 10 periodSeconds: 30 env: - name: UNLOAD_STORAGE_MODULES value: "true" - name: RESTORE_DRIVER_ON_POD_TERMINATION value: "true" - name: CREATE_IFNAMES_UDEV value: "true" sriovDevicePlugin: image: sriov-network-device-plugin repository: ghcr.io/k8snetworkplumbingwg version: v3.7.0 config: | { "resourceList": [ { "resourcePrefix": "nvidia.com", "resourceName": "hostdev", "selectors": { "vendors": ["15b3"], "isRdma": true } } ] } EOF다음 명령을 사용하여 클러스터에
NicClusterPolicyCR을 생성합니다.$ oc create -f network-hostdev-nic-cluster-policy.yaml출력 예
nicclusterpolicy.mellanox.com/nic-cluster-policy createdDOCA/MOFED 컨테이너에서 다음 명령을 사용하여 호스트 장치
NicClusterPolicyCR을 확인합니다.$ oc get pods -n nvidia-network-operator출력 예
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-9sgvd 2/2 Running 0 2m37s mofed-rhcos4.16-696886fcb4-ds-lkjd4 2/2 Running 0 2m37s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 0 141m sriov-device-plugin-6v2nz 1/1 Running 0 2m14s sriov-device-plugin-hc4t8 1/1 Running 0 2m14s다음 명령을 사용하여 리소스가 클러스터
oc describe node섹션에 표시되는지 확인합니다.$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A7출력 예
Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596708Ki nvidia.com/hostdev: 2 pods: 250 Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445732Ki nvidia.com/hostdev: 2 pods: 250 -- Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596704Ki nvidia.com/hostdev: 2 pods: 250 Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445728Ki nvidia.com/hostdev: 2 pods: 250HostDeviceNetworkCR 파일을 생성합니다.$ cat <<EOF > hostdev-network.yaml apiVersion: mellanox.com/v1alpha1 kind: HostDeviceNetwork metadata: name: hostdev-net spec: networkNamespace: "default" resourceName: "hostdev" ipam: | { "type": "whereabouts", "range": "192.168.3.225/28", "exclude": [ "192.168.3.229/30", "192.168.3.236/32" ] } EOF다음 명령을 사용하여 클러스터에서
HostDeviceNetwork리소스를 생성합니다.$ oc create -f hostdev-network.yaml출력 예
hostdevicenetwork.mellanox.com/hostdev-net created다음 명령을 사용하여 리소스가 클러스터
oc describe node섹션에 표시되는지 확인합니다.$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8출력 예
Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596708Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 2 pods: 250 Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445732Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 2 pods: 250 -- Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596680Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 2 pods: 250 Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445704Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 2 pods: 250
5.9.3. RoCE에서 SR-IOV 레거시 모드 RDMA 생성 링크 복사링크가 클립보드에 복사되었습니다!
RoCE에서 SR-IOV(Single Root I/O Virtualization) 레거시 모드 호스트 장치 RDMA를 구성합니다.
프로세스
새 호스트 장치
NicClusterPolicyCR(사용자 정의 리소스)을 생성합니다.$ cat <<EOF > network-sriovleg-nic-cluster-policy.yaml apiVersion: mellanox.com/v1alpha1 kind: NicClusterPolicy metadata: name: nic-cluster-policy spec: ofedDriver: image: doca-driver repository: nvcr.io/nvidia/mellanox version: 24.10-0.7.0.0-0 startupProbe: initialDelaySeconds: 10 periodSeconds: 20 livenessProbe: initialDelaySeconds: 30 periodSeconds: 30 readinessProbe: initialDelaySeconds: 10 periodSeconds: 30 env: - name: UNLOAD_STORAGE_MODULES value: "true" - name: RESTORE_DRIVER_ON_POD_TERMINATION value: "true" - name: CREATE_IFNAMES_UDEV value: "true" EOF다음 명령을 사용하여 클러스터에 정책을 생성합니다.
$ oc create -f network-sriovleg-nic-cluster-policy.yaml출력 예
nicclusterpolicy.mellanox.com/nic-cluster-policy createdDOCA/MOFED 컨테이너에서 다음 명령을 사용하여 Pod를 확인합니다.
$ oc get pods -n nvidia-network-operator출력 예
NAME READY STATUS RESTARTS AGE mofed-rhcos4.16-696886fcb4-ds-4mb42 2/2 Running 0 40s mofed-rhcos4.16-696886fcb4-ds-8knwq 2/2 Running 0 40s nvidia-network-operator-controller-manager-68d547dbbd-qsdkf 1/1 Running 13 (4d ago) 4d21hSR-IOV 레거시 모드에서 작동하려는 장치에 대한 VF(가상 기능)를 생성하는
SriovNetworkNodePolicyCR을 생성합니다. 다음 예제를 참조하십시오.$ cat <<EOF > sriov-network-node-policy.yaml apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-legacy-policy namespace: openshift-sriov-network-operator spec: deviceType: netdevice mtu: 1500 nicSelector: vendor: "15b3" pfNames: ["ens8f0np0#0-7"] nodeSelector: feature.node.kubernetes.io/pci-15b3.present: "true" numVfs: 8 priority: 90 isRdma: true resourceName: sriovlegacy EOF다음 명령을 사용하여 클러스터에 CR을 생성합니다.
참고SR-IOV 글로벌 활성화가 활성화되었는지 확인합니다. 자세한 내용은 SR-IOV 를 활성화하고 Red Hat Enterprise Linux에서 " SR-IOV에 대한 MMIO 리소스가 충분하지 않음"이라는 메시지를 수신할 수 없습니다.
$ oc create -f sriov-network-node-policy.yaml출력 예
sriovnetworknodepolicy.sriovnetwork.openshift.io/sriov-legacy-policy created각 노드에는 스케줄링이 비활성화되어 있습니다. 노드가 재부팅되어 구성을 적용합니다. 다음 명령을 사용하여 노드를 볼 수 있습니다.
$ oc get nodes출력 예
NAME STATUS ROLES AGE VERSION edge-19.edge.lab.eng.rdu2.redhat.com Ready control-plane,master,worker 5d v1.29.8+632b078 nvd-srv-32.nvidia.eng.rdu2.dc.redhat.com Ready worker 4d22h v1.29.8+632b078 nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com NotReady,SchedulingDisabled worker 4d22h v1.29.8+632b078노드가 재부팅된 후 각 노드에서 디버그 Pod를 열어 VF 인터페이스가 있는지 확인합니다. 다음 명령을 실행합니다.
a$ oc debug node/nvd-srv-33.nvidia.eng.rdu2.dc.redhat.com출력 예
Starting pod/nvd-srv-33nvidiaengrdu2dcredhatcom-debug-cqfjz ... To use host binaries, run `chroot /host` Pod IP: 10.6.135.12 If you don't see a command prompt, try pressing enter. sh-5.1# chroot /host sh-5.1# ip link show | grep ens8 26: ens8f0np0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 42: ens8f0v0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 43: ens8f0v1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 44: ens8f0v2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 45: ens8f0v3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 46: ens8f0v4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 47: ens8f0v5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 48: ens8f0v6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 49: ens8f0v7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000- 필요한 경우 두 번째 노드에서 이전 단계를 반복합니다.
선택 사항: 다음 명령을 사용하여 리소스가 클러스터
oc describe node섹션에 표시되는지 확인합니다.$ oc describe node -l node-role.kubernetes.io/worker=| grep -E 'Capacity:|Allocatable:' -A8출력 예
Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596692Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 0 openshift.io/sriovlegacy: 8 -- Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445716Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 0 openshift.io/sriovlegacy: 8 -- Capacity: cpu: 128 ephemeral-storage: 1561525616Ki hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 263596688Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 0 openshift.io/sriovlegacy: 8 -- Allocatable: cpu: 127500m ephemeral-storage: 1438028263499 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 262445712Ki nvidia.com/gpu: 2 nvidia.com/hostdev: 0 openshift.io/sriovlegacy: 8SR-IOV 레거시 모드의 VF가 있는 경우
SriovNetworkCR 파일을 생성합니다. 다음 예제를 참조하십시오.$ cat <<EOF > sriov-network.yaml apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: sriov-network namespace: openshift-sriov-network-operator spec: vlan: 0 networkNamespace: "default" resourceName: "sriovlegacy" ipam: | { "type": "whereabouts", "range": "192.168.3.225/28", "exclude": [ "192.168.3.229/30", "192.168.3.236/32" ] } EOF다음 명령을 사용하여 클러스터에 사용자 정의 리소스를 생성합니다.
$ oc create -f sriov-network.yaml출력 예
sriovnetwork.sriovnetwork.openshift.io/sriov-network created