24.12. 하드웨어 오프로드 구성
클러스터 관리자는 호환 가능한 노드에서 하드웨어 오프로드를 구성하여 데이터 처리 성능을 높이고 호스트 CPU의 부하를 줄일 수 있습니다.
24.12.1. 하드웨어 오프로드 정보
Open vSwitch 하드웨어 오프로드는 CPU에서 벗어나 네트워크 인터페이스 컨트롤러의 전용 프로세서로 오프로드하여 네트워크 작업을 처리하는 방법입니다. 결과적으로 클러스터는 데이터 전송 속도를 높이고 CPU 워크로드를 줄이며 컴퓨팅 비용을 절감할 수 있습니다.
이 기능의 주요 요소는 SmartNICs라는 최신 네트워크 인터페이스 컨트롤러 클래스입니다. SmartNIC는 과도하게 많은 네트워크 처리 작업을 처리할 수 있는 네트워크 인터페이스 컨트롤러입니다. 전용 그래픽 카드가 그래픽 성능을 향상시킬 수있는 것과 마찬가지로 SmartNIC는 네트워크 성능을 향상시킬 수 있습니다. 각 경우 전용 프로세서는 특정 유형의 처리 작업에 대한 성능을 향상시킵니다.
OpenShift Container Platform에서는 호환되는 SmartNIC가 있는 베어 메탈 노드에 대한 하드웨어 오프로드를 구성할 수 있습니다. 하드웨어 오프로드는 SR-IOV Network Operator에 의해 구성 및 활성화됩니다.
하드웨어 오프로드는 모든 워크로드 또는 애플리케이션 유형과 호환되지 않습니다. 다음 두 가지 통신 유형만 지원됩니다.
- pod-to-pod
- pod-to-service - 서비스는 일반 Pod에서 지원하는 ClusterIP 서비스
모든 경우에서 하드웨어 오프로드는 해당 Pod 및 서비스가 호환되는 SmartNIC 노드에 할당되는 경우에만 수행됩니다. 예를 들어 하드웨어 오프로드가 있는 노드의 Pod가 일반 노드에서 서비스와 통신하려고 한다고 가정합니다. 일반 노드에서 모든 처리가 커널에서 수행되므로 pod-to-service 통신의 전반적인 성능은 해당 일반 노드의 최대 성능으로 제한됩니다. 하드웨어 오프로드는 DPDK 애플리케이션과 호환되지 않습니다.
노드에서 하드웨어 오프로드를 활성화하지만 사용할 Pod를 구성하지 않으면 Pod 트래픽에 대한 처리량 성능이 저하될 수 있습니다. OpenShift Container Platform에서 관리하는 Pod의 하드웨어 오프로드는 구성할 수 없습니다.
24.12.2. 지원되는 장치
하드웨어 오프로드는 다음 네트워크 인터페이스 컨트롤러에서 지원됩니다.
제조업체 | 모델 | 벤더 ID | 장치 ID |
---|---|---|---|
Mellanox | MT27800 제품군 [ConnectX-5] | 15b3 | 1017 |
Mellanox | MT28880 제품군 [ConnectX-5 Ex] | 15b3 | 1019 |
Mellanox | MT2892 제품군 [ConnectX-6 Dx] | 15b3 | 101d |
Mellanox | MT2894 제품군 [ConnectX-6 Lx] | 15b3 | 101f |
Mellanox | MT42822 ConnectX-6 NIC 모드 BlueField-2 | 15b3 | a2d6 |
24.12.3. 사전 요구 사항
- 클러스터에는 하드웨어 오프로드에 지원되는 네트워크 인터페이스 컨트롤러가 하나 이상 있는 베어 메탈 머신이 있습니다.
- SR-IOV Network Operator가 설치되어 있어야 합니다.
- 클러스터는 OVN-Kubernetes 네트워크 플러그인 을 사용합니다.
-
OVN-Kubernetes 네트워크 플러그인 구성에서
gatewayConfig.routingViaHost
필드가false
로 설정됩니다.
24.12.4. SR-IOV Network Operator를 systemd 모드로 설정
하드웨어 오프로드를 지원하려면 먼저 SR-IOV Network Operator를 systemd
모드로 설정해야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할이 있는 사용자로 클러스터에 액세스할 수 있습니다.
절차
SriovOperatorConfig
CR(사용자 정의 리소스)을 생성하여 모든 SR-IOV Operator 구성 요소를 배포합니다.다음 YAML이 포함된
sriovOperatorConfig.yaml
파일을 생성합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovOperatorConfig metadata: name: default 1 namespace: openshift-sriov-network-operator spec: enableInjector: true enableOperatorWebhook: true configurationMode: "systemd" 2 logLevel: 2
다음 명령을 실행하여 리소스를 생성합니다.
$ oc apply -f sriovOperatorConfig.yaml
24.12.5. 하드웨어 오프로드를 위한 머신 구성 풀 구성
하드웨어 오프로드를 활성화하기 위해 전용 머신 구성 풀을 생성하고 SR-IOV Network Operator에서 작동하도록 구성합니다.
사전 요구 사항
-
SR-IOV Network Operator가 설치되어
systemd
모드로 설정됩니다.
절차
하드웨어 오프로드를 사용할 머신의 머신 구성 풀을 생성합니다.
다음 예와 같은 콘텐츠를 사용하여
mcp-offloading.yaml
과 같은 파일을 생성합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: name: mcp-offloading 1 spec: machineConfigSelector: matchExpressions: - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,mcp-offloading]} 2 nodeSelector: matchLabels: node-role.kubernetes.io/mcp-offloading: "" 3
머신 구성 풀의 구성을 적용합니다.
$ oc create -f mcp-offloading.yaml
머신 구성 풀에 노드를 추가합니다. 풀의 노드 역할 라벨을 사용하여 각 노드에 레이블을 지정합니다.
$ oc label node worker-2 node-role.kubernetes.io/mcp-offloading=""
선택 사항: 새 풀이 생성되었는지 확인하려면 다음 명령을 실행합니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION master-0 Ready master 2d v1.26.0 master-1 Ready master 2d v1.26.0 master-2 Ready master 2d v1.26.0 worker-0 Ready worker 2d v1.26.0 worker-1 Ready worker 2d v1.26.0 worker-2 Ready mcp-offloading,worker 47h v1.26.0 worker-3 Ready mcp-offloading,worker 47h v1.26.0
이 머신 구성 풀을
SriovNetworkPoolConfig
사용자 정의 리소스에 추가합니다.다음 예와 같은 콘텐츠를 사용하여
sriov-pool-config.yaml
과 같은 파일을 생성합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkPoolConfig metadata: name: sriovnetworkpoolconfig-offload namespace: openshift-sriov-network-operator spec: ovsHardwareOffloadConfig: name: mcp-offloading 1
- 1
- 하드웨어 오프로드를 위한 머신 구성 풀의 이름입니다.
설정을 적용합니다.
$ oc create -f <SriovNetworkPoolConfig_name>.yaml
참고SriovNetworkPoolConfig
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 머신 구성 풀에서 노드를 비우고 재시작합니다.구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
24.12.6. SR-IOV 네트워크 노드 정책 구성
SR-IOV 네트워크 노드 정책을 생성하여 노드의 SR-IOV 네트워크 장치 구성을 생성할 수 있습니다. 하드웨어 오프로드를 활성화하려면 "switchdev"
값으로 .spec.eSwitchMode
필드를 정의해야 합니다.
다음 절차에서는 하드웨어 오프로드가 있는 네트워크 인터페이스 컨트롤러에 대한 SR-IOV 인터페이스를 생성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
절차
다음 예와 같은 콘텐츠를 사용하여
sriov-node-policy.yaml
과 같은 파일을 생성합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-node-policy <.> namespace: openshift-sriov-network-operator spec: deviceType: netdevice <.> eSwitchMode: "switchdev" <.> nicSelector: deviceID: "1019" rootDevices: - 0000:d8:00.0 vendor: "15b3" pfNames: - ens8f0 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 6 priority: 5 resourceName: mlxnics
<.> 사용자 정의 리소스 오브젝트의 이름입니다. <.> 필수 항목입니다.
vfio-pci
. <.> 필수에서는 하드웨어 오프로드가 지원되지 않습니다.정책에 대한 구성을 적용합니다.
$ oc create -f sriov-node-policy.yaml
참고SriovNetworkPoolConfig
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 머신 구성 풀에서 노드를 비우고 재시작합니다.구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
24.12.6.1. OpenStack의 SR-IOV 네트워크 노드 정책의 예
다음 예제에서는 RHOSP(Red Hat OpenStack Platform)에서 하드웨어를 오프로드하는 NIC(네트워크 인터페이스 컨트롤러)의 SR-IOV 인터페이스를 설명합니다.
RHOSP에서 하드웨어 오프로드가 있는 NIC용 SR-IOV 인터페이스
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: ${name} namespace: openshift-sriov-network-operator spec: deviceType: switchdev isRdma: true nicSelector: netFilter: openstack/NetworkID:${net_id} nodeSelector: feature.node.kubernetes.io/network-sriov.capable: 'true' numVfs: 1 priority: 99 resourceName: ${name}
24.12.7. 네트워크 연결 정의 생성
머신 구성 풀과 SR-IOV 네트워크 노드 정책을 정의한 후 사용자가 지정한 네트워크 인터페이스 카드에 대한 네트워크 연결 정의를 생성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
절차
다음 예와 같은 콘텐츠를 사용하여
net-attach-def.yaml
과 같은 파일을 생성합니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: net-attach-def <.> namespace: net-attach-def <.> annotations: k8s.v1.cni.cncf.io/resourceName: openshift.io/mlxnics <.> spec: config: '{"cniVersion":"0.3.1","name":"ovn-kubernetes","type":"ovn-k8s-cni-overlay","ipam":{},"dns":{}}'
<.> 네트워크 연결 정의의 이름입니다. <.> 네트워크 연결 정의의 네임스페이스입니다. <.>
SriovNetworkNodePolicy
오브젝트에 지정한spec.resourceName
필드의 값입니다.네트워크 연결 정의에 대한 구성을 적용합니다.
$ oc create -f net-attach-def.yaml
검증
다음 명령을 실행하여 새 정의가 있는지 확인합니다.
$ oc get net-attach-def -A
출력 예
NAMESPACE NAME AGE net-attach-def net-attach-def 43h
24.12.8. Pod에 네트워크 연결 정의 추가
머신 구성 풀, SriovNetworkPoolConfig
및 SriovNetworkNodePolicy
사용자 정의 리소스 및 네트워크 연결 정의를 생성한 후 Pod 사양에 네트워크 연결 정의를 추가하여 Pod에 이러한 구성을 적용할 수 있습니다.
절차
Pod 사양에서
.metadata.annotations.k8s.v1.cni.cncf.io/networks
필드를 추가하고 하드웨어 오프로드를 위해 생성한 네트워크 연결 정의를 지정합니다..... metadata: annotations: v1.multus-cni.io/default-network: net-attach-def/net-attach-def <.>
<.> 값은 하드웨어 오프로드를 위해 생성한 네트워크 연결 정의의 이름과 네임스페이스여야 합니다.