22.13. 하드웨어 오프로드 구성
클러스터 관리자는 호환 가능한 노드에서 하드웨어 오프로드를 구성하여 데이터 처리 성능을 높이고 호스트 CPU의 부하를 줄일 수 있습니다.
22.13.1. 하드웨어 오프로드 정보
Open vSwitch 하드웨어 오프로드는 CPU에서 벗어나 네트워크 인터페이스 컨트롤러의 전용 프로세서로 오프로드하여 네트워크 작업을 처리하는 방법입니다. 결과적으로 클러스터는 더 빠른 데이터 전송 속도, CPU 워크로드 감소 및 컴퓨팅 비용 절감의 이점을 얻을 수 있습니다.
이 기능의 핵심 요소는 SmartNICs라는 최신 네트워크 인터페이스 컨트롤러 클래스입니다. SmartNIC는 컴퓨팅 집약적인 네트워크 처리 작업을 처리할 수 있는 네트워크 인터페이스 컨트롤러입니다. 전용 그래픽 카드가 그래픽 성능을 향상시킬 수 있는 것과 마찬가지로 SmartNIC는 네트워크 성능을 향상시킬 수 있습니다. 각 경우 전용 프로세서는 특정 유형의 처리 작업에 대한 성능을 향상시킵니다.
OpenShift Container Platform에서는 호환되는 SmartNIC가 있는 베어 메탈 노드에 대한 하드웨어 오프로드를 구성할 수 있습니다. 하드웨어 오프로드는 SR-IOV Network Operator에 의해 구성 및 활성화됩니다.
하드웨어 오프로드는 모든 워크로드 또는 애플리케이션 유형과 호환되지 않습니다. 다음 두 가지 통신 유형만 지원됩니다.
- pod-to-pod
- pod-to-service: 서비스는 일반 Pod에서 지원하는 ClusterIP 서비스
모든 경우에서 하드웨어 오프로드는 호환되는 SmartNIC가 있는 노드에 해당 Pod 및 서비스가 할당된 경우에만 수행됩니다. 예를 들어 하드웨어 오프로드가 있는 노드의 Pod가 일반 노드에서 서비스와 통신하려고 한다고 가정합니다. 일반 노드에서 모든 처리가 커널에서 수행되므로 pod-to-service 통신의 전반적인 성능은 해당 일반 노드의 최대 성능으로 제한됩니다. 하드웨어 오프로드는 DPDK 애플리케이션과 호환되지 않습니다.
노드에서 하드웨어 오프로드를 활성화하지만 사용할 Pod를 구성하지 않으면 Pod 트래픽의 처리량 성능이 저하될 수 있습니다. OpenShift Container Platform에서 관리하는 Pod의 하드웨어 오프로드를 구성할 수 없습니다.
22.13.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 BlueField-2 in ConnectX-6 NIC 모드 | 15b3 | a2d6 |
22.13.3. 사전 요구 사항
- 클러스터에는 하드웨어 오프로드에 지원되는 네트워크 인터페이스 컨트롤러가 있는 하나 이상의 베어 메탈 머신이 있습니다.
- SR-IOV Network Operator가 설치되어 있어야 합니다.
- 클러스터는 OVN-Kubernetes 네트워크 플러그인 을 사용합니다.
-
OVN-Kubernetes 네트워크 플러그인 구성에서
gatewayConfig.routingViaHost
필드가false
로 설정됩니다.
22.13.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
22.13.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.30.3 master-1 Ready master 2d v1.30.3 master-2 Ready master 2d v1.30.3 worker-0 Ready worker 2d v1.30.3 worker-1 Ready worker 2d v1.30.3 worker-2 Ready mcp-offloading,worker 47h v1.30.3 worker-3 Ready mcp-offloading,worker 47h v1.30.3
이 머신 구성 풀을
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가 머신 구성 풀에서 노드를 비우고 재시작합니다.구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
22.13.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 1 namespace: openshift-sriov-network-operator spec: deviceType: netdevice 2 eSwitchMode: "switchdev" 3 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
정책 구성을 적용합니다.
$ oc create -f sriov-node-policy.yaml
참고SriovNetworkPoolConfig
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 머신 구성 풀에서 노드를 비우고 재시작합니다.구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
22.13.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}
22.13.7. 가상 기능을 사용하여 네트워크 트래픽 성능 개선
다음 절차에 따라 OVN-Kubernetes 관리 포트에 가상 기능을 할당하고 네트워크 트래픽 성능을 향상시킵니다.
이 절차에서는 두 개의 풀이 생성됩니다. 첫 번째 풀에는 OVN-Kubernetes에서 사용하는 가상 기능이 있고 두 번째는 나머지 가상 함수로 구성됩니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여 SmartNIC를 사용하여 각 작업자 노드에
network.operator.openshift.io/smart-nic
레이블을 추가합니다.$ oc label node <node-name> network.operator.openshift.io/smart-nic=
oc get nodes
명령을 사용하여 사용 가능한 노드 목록을 가져옵니다.다음 예와 같은 콘텐츠를 사용하여 관리 포트에 대해
sriov-node-mgmt-vf-policy.yaml
이라는 정책을 생성합니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-node-mgmt-vf-policy namespace: openshift-sriov-network-operator spec: deviceType: netdevice eSwitchMode: "switchdev" nicSelector: deviceID: "1019" rootDevices: - 0000:d8:00.0 vendor: "15b3" pfNames: - ens8f0#0-0 1 nodeSelector: network.operator.openshift.io/smart-nic: "" numVfs: 6 2 priority: 5 resourceName: mgmtvf
다음 예와 같은 콘텐츠를 사용하여
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#1-5 1 nodeSelector: network.operator.openshift.io/smart-nic: "" numVfs: 6 2 priority: 5 resourceName: mlxnics
참고sriov-node-mgmt-vf-policy.yaml
파일에는sriov-node-policy.yaml
파일과 함께pfNames
및resourceName
키에 대해 다른 값이 있습니다.두 정책에 모두 구성을 적용합니다.
$ oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-mgmt-vf-policy.yaml
관리 구성을 위해 클러스터에 CNO(Cluster Network Operator) ConfigMap을 생성합니다.
다음 콘텐츠를 사용하여
hardware-offload-config.yaml
이라는 ConfigMap을 생성합니다.apiVersion: v1 kind: ConfigMap metadata: name: hardware-offload-config namespace: openshift-network-operator data: mgmt-port-resource-name: openshift.io/mgmtvf
ConfigMap의 구성을 적용합니다.
$ oc create -f hardware-offload-config.yaml
추가 리소스
22.13.8. 네트워크 연결 정의 생성
머신 구성 풀과 SR-IOV 네트워크 노드 정책을 정의한 후 지정한 네트워크 인터페이스 카드에 대한 네트워크 연결 정의를 생성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 예와 같은 콘텐츠를 사용하여
net-attach-def.yaml
과 같은 파일을 생성합니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: net-attach-def 1 namespace: net-attach-def 2 annotations: k8s.v1.cni.cncf.io/resourceName: openshift.io/mlxnics 3 spec: config: '{"cniVersion":"0.3.1","name":"ovn-kubernetes","type":"ovn-k8s-cni-overlay","ipam":{},"dns":{}}'
네트워크 연결 정의에 대한 구성을 적용합니다.
$ oc create -f net-attach-def.yaml
검증
다음 명령을 실행하여 새 정의가 있는지 확인합니다.
$ oc get net-attach-def -A
출력 예
NAMESPACE NAME AGE net-attach-def net-attach-def 43h
22.13.9. 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 1
- 1
- 값은 하드웨어 오프로드를 위해 생성한 네트워크 연결 정의의 이름과 네임스페이스여야 합니다.