검색

23.13. 하드웨어 오프로드 구성

download PDF

클러스터 관리자는 호환 가능한 노드에서 하드웨어 오프로드를 구성하여 데이터 처리 성능을 높이고 호스트 CPU의 부하를 줄일 수 있습니다.

23.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의 하드웨어 오프로드를 구성할 수 없습니다.

23.13.2. 지원되는 장치

하드웨어 오프로드는 다음 네트워크 인터페이스 컨트롤러에서 지원됩니다.

표 23.16. 지원되는 네트워크 인터페이스 컨트롤러
제조업체모델벤더 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

23.13.3. 사전 요구 사항

23.13.4. SR-IOV Network Operator를 systemd 모드로 설정

하드웨어 오프로드를 지원하려면 먼저 SR-IOV Network Operator를 systemd 모드로 설정해야 합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할이 있는 사용자로 클러스터에 액세스할 수 있습니다.

프로세스

  1. SriovOperatorConfig CR(사용자 정의 리소스)을 생성하여 모든 SR-IOV Operator 구성 요소를 배포합니다.

    1. 다음 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
      1
      SriovOperatorConfig 리소스에 대한 유일한 유효한 이름은 default 이며 Operator가 배포된 네임스페이스에 있어야 합니다.
      2
      SR-IOV Network Operator를 systemd 모드로 설정하는 것은 Open vSwitch 하드웨어 오프로드에만 관련이 있습니다.
    2. 다음 명령을 실행하여 리소스를 생성합니다.

      $ oc apply -f sriovOperatorConfig.yaml

23.13.5. 하드웨어 오프로드를 위한 머신 구성 풀 구성

하드웨어 오프로드를 활성화하기 위해 전용 머신 구성 풀을 생성하고 SR-IOV Network Operator에서 작동하도록 구성합니다.

사전 요구 사항

  1. SR-IOV Network Operator가 설치되어 systemd 모드로 설정됩니다.

프로세스

  1. 에서 하드웨어 오프로드를 사용할 머신의 머신 구성 풀을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 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
      1 2
      하드웨어 오프로드를 위한 머신 구성 풀의 이름입니다.
      3
      이 노드 역할 레이블은 머신 구성 풀에 노드를 추가하는 데 사용됩니다.
    2. 머신 구성 풀의 구성을 적용합니다.

      $ oc create -f mcp-offloading.yaml
  2. 머신 구성 풀에 노드를 추가합니다. 각 노드에 풀의 노드 역할 라벨을 지정합니다.

    $ oc label node worker-2 node-role.kubernetes.io/mcp-offloading=""
  3. 선택 사항: 새 풀이 생성되었는지 확인하려면 다음 명령을 실행합니다.

    $ oc get nodes

    출력 예

    NAME       STATUS   ROLES                   AGE   VERSION
    master-0   Ready    master                  2d    v1.29.4
    master-1   Ready    master                  2d    v1.29.4
    master-2   Ready    master                  2d    v1.29.4
    worker-0   Ready    worker                  2d    v1.29.4
    worker-1   Ready    worker                  2d    v1.29.4
    worker-2   Ready    mcp-offloading,worker   47h   v1.29.4
    worker-3   Ready    mcp-offloading,worker   47h   v1.29.4

  4. 이 머신 구성 풀을 SriovNetworkPoolConfig 사용자 정의 리소스에 추가합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 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
      하드웨어 오프로드를 위한 머신 구성 풀의 이름입니다.
    2. 설정을 적용합니다.

      $ oc create -f <SriovNetworkPoolConfig_name>.yaml
      참고

      SriovNetworkPoolConfig 오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 머신 구성 풀에서 노드를 비우고 재시작합니다.

      구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.

23.13.6. SR-IOV 네트워크 노드 정책 구성

SR-IOV 네트워크 노드 정책을 생성하여 노드의 SR-IOV 네트워크 장치 구성을 생성할 수 있습니다. 하드웨어 오프로드를 활성화하려면 "switchdev" 값으로 .spec.eSwitchMode 필드를 정의해야 합니다.

다음 절차에서는 하드웨어 오프로드를 사용하여 네트워크 인터페이스 컨트롤러에 대한 SR-IOV 인터페이스를 생성합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. 다음 예와 같은 콘텐츠를 사용하여 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
    1
    사용자 정의 리소스 오브젝트의 이름입니다.
    2
    필수 항목입니다. vfio-pci 에서는 하드웨어 오프로드가 지원되지 않습니다.
    3
    필수 항목입니다.
  2. 정책 구성을 적용합니다.

    $ oc create -f sriov-node-policy.yaml
    참고

    SriovNetworkPoolConfig 오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 머신 구성 풀에서 노드를 비우고 재시작합니다.

    구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.

23.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}

23.13.7. 가상 기능을 사용하여 네트워크 트래픽 성능 개선

다음 절차에 따라 OVN-Kubernetes 관리 포트에 가상 기능을 할당하고 네트워크 트래픽 성능을 향상시킵니다.

이 절차에서는 두 개의 풀이 생성됩니다. 첫 번째 풀에는 OVN-Kubernetes에서 사용하는 가상 기능이 있고 두 번째는 나머지 가상 함수로 구성됩니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. 다음 명령을 실행하여 SmartNIC를 사용하여 각 작업자 노드에 network.operator.openshift.io/smart-nic 레이블을 추가합니다.

    $ oc label node <node-name> network.operator.openshift.io/smart-nic=

    oc get nodes 명령을 사용하여 사용 가능한 노드 목록을 가져옵니다.

  2. 다음 예와 같은 콘텐츠를 사용하여 관리 포트에 대해 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
    1
    이 장치를 사용 사례에 적합한 네트워크 장치로 교체합니다. pfNames 값의 #0-0 부분은 OVN-Kubernetes에서 사용하는 단일 가상 기능을 예약합니다.
    2
    여기에 제공된 값은 예입니다. 이 값을 요구 사항을 충족하는 값으로 바꿉니다. 자세한 내용은 추가 리소스 섹션의 SR-IOV 네트워크 노드 구성 오브젝트 참조하십시오.
  3. 다음 예와 같은 콘텐츠를 사용하여 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
    1
    이 장치를 사용 사례에 적합한 네트워크 장치로 교체합니다.
    2
    여기에 제공된 값은 예입니다. 이 값을 sriov-node-mgmt-vf-policy.yaml 파일에 지정된 값으로 바꿉니다. 자세한 내용은 추가 리소스 섹션의 SR-IOV 네트워크 노드 구성 오브젝트 참조하십시오.
    참고

    sriov-node-mgmt-vf-policy.yaml 파일에는 sriov-node-policy.yaml 파일과 함께 pfNamesresourceName 키에 대해 다른 값이 있습니다.

  4. 두 정책에 모두 구성을 적용합니다.

    $ oc create -f sriov-node-policy.yaml
    $ oc create -f sriov-node-mgmt-vf-policy.yaml
  5. 관리 구성을 위해 클러스터에 CNO(Cluster Network Operator) ConfigMap을 생성합니다.

    1. 다음 콘텐츠를 사용하여 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
    2. ConfigMap의 구성을 적용합니다.

      $ oc create -f hardware-offload-config.yaml

23.13.8. 네트워크 연결 정의 생성

머신 구성 풀과 SR-IOV 네트워크 노드 정책을 정의한 후 지정한 네트워크 인터페이스 카드에 대한 네트워크 연결 정의를 생성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. 다음 예와 같은 콘텐츠를 사용하여 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":{}}'
    1
    네트워크 연결 정의의 이름입니다.
    2
    네트워크 연결 정의의 네임스페이스입니다.
    3
    SriovNetworkNodePolicy 오브젝트에 지정한 spec.resourceName 필드의 값입니다.
  2. 네트워크 연결 정의에 대한 구성을 적용합니다.

    $ oc create -f net-attach-def.yaml

검증

  • 다음 명령을 실행하여 새 정의가 있는지 확인합니다.

    $ oc get net-attach-def -A

    출력 예

    NAMESPACE         NAME             AGE
    net-attach-def    net-attach-def   43h

23.13.9. Pod에 네트워크 연결 정의 추가

머신 구성 풀, SriovNetworkPoolConfigSriovNetworkNodePolicy 사용자 정의 리소스 및 네트워크 연결 정의를 생성한 후 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
    값은 하드웨어 오프로드를 위해 생성한 네트워크 연결 정의의 이름과 네임스페이스여야 합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.