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

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

17.11.1. 하드웨어 오프로드 정보

Open vSwitch 하드웨어 오프로드는 CPU에서 벗어나 네트워크 인터페이스 컨트롤러의 전용 프로세서로 오프로드하여 네트워크 작업을 처리하는 방법입니다. 결과적으로 클러스터는 데이터 전송 속도가 빨라지고 CPU 워크로드를 줄이며 컴퓨팅 비용을 절감할 수 있습니다.

이 기능의 주요 요소는 SmartNICs라는 최신 네트워크 인터페이스 컨트롤러 클래스입니다. SmartNIC는 컴퓨팅 방식으로 네트워크 처리 작업을 처리할 수 있는 네트워크 인터페이스 컨트롤러입니다. 전용 그래픽 카드가 그래픽 성능을 향상시킬 수 있는 것과 같은 방식으로 SmartNIC는 네트워크 성능을 향상시킬 수 있습니다. 각 경우에서 전용 프로세서는 특정 유형의 처리 작업의 성능을 향상시킵니다.

OpenShift Container Platform에서는 호환되는 SmartNIC가 있는 베어 메탈 노드에 대해 하드웨어 오프로드를 구성할 수 있습니다. 하드웨어 오프로드는 SR-IOV Network Operator에 의해 구성 및 활성화됩니다.

하드웨어 오프로드는 모든 워크로드 또는 애플리케이션 유형과 호환되지 않습니다. 다음 두 가지 통신 유형만 지원됩니다.

  • pod-to-pod
  • pod-to-service - 서비스는 일반 포드에서 지원하는 ClusterIP 서비스

모든 경우에 하드웨어 오프로드는 호환되는 SmartNIC가 있는 노드에 해당 Pod 및 서비스가 할당되는 경우에만 수행됩니다. 예를 들어 하드웨어 오프로드가 있는 노드의 Pod가 일반 노드의 서비스와 통신하려고 한다고 가정합니다. 일반 노드에서는 모든 처리가 커널에서 수행되므로 Pod 간 통신의 전반적인 성능은 해당 일반 노드의 최대 성능으로 제한됩니다. 하드웨어 오프로드는 DPDK 애플리케이션과 호환되지 않습니다.

노드에서 하드웨어 오프로드를 활성화하지만 사용할 Pod를 구성하지 않으면 Pod 트래픽에 대한 처리량 성능이 저하될 수 있습니다. OpenShift Container Platform에서 관리하는 Pod의 하드웨어 오프로드는 구성할 수 없습니다.

17.11.2. 지원되는 장치

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

표 17.15. 지원되는 네트워크 인터페이스 컨트롤러

제조업체모델벤더 ID장치 ID

Mellanox

MT27800 제품군 [ConnectX-5]

15b3

1017

Mellanox

MT28880 제품군 [ConnectX-5 Ex]

15b3

1019

17.11.3. 사전 요구 사항

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

하드웨어 오프로드를 활성화하려면 먼저 전용 머신 구성 풀을 생성하고 SR-IOV Network Operator와 작동하도록 구성해야 합니다.

사전 요구 사항

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

프로세스

  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.23.3+d99c04f
    master-1   Ready    master                  2d    v1.23.3+d99c04f
    master-2   Ready    master                  2d    v1.23.3+d99c04f
    worker-0   Ready    worker                  2d    v1.23.3+d99c04f
    worker-1   Ready    worker                  2d    v1.23.3+d99c04f
    worker-2   Ready    mcp-offloading,worker   47h   v1.23.3+d99c04f
    worker-3   Ready    mcp-offloading,worker   47h   v1.23.3+d99c04f

  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가 머신 구성 풀의 노드를 비우고 다시 시작합니다.

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

17.11.5. 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 <.>
      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

    <.> 사용자 정의 리소스 오브젝트의 이름입니다. <.> Required. vfio-pci. <.> 필요에서는 하드웨어 오프로드가 지원되지 않습니다.

  2. 정책 구성을 적용합니다.

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

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

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

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

머신 구성 풀 및 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 <.>
      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 필드의 값입니다.

  2. 네트워크 연결 정의에 대한 구성을 적용합니다.

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

검증

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

    $ oc get net-attach-def -A

    출력 예

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

17.11.7. 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 <.>

    <.> 값은 하드웨어 오프로드를 위해 생성한 네트워크 연결 정의의 이름과 네임스페이스여야 합니다.