23.13. 配置硬件卸载 (offloading)


作为集群管理员,您可以在兼容节点上配置硬件卸载,以提高数据处理性能并减少主机 CPU 的负载。

23.13.1. 关于硬件卸载

Open vSwitch 硬件卸载是一种处理网络任务的方法,方法是将它们从 CPU 中分离出来,并将它们卸载到网络接口控制器上的专用处理器。因此,集群可从更快的数据传输速度、CPU 工作负载减少并降低计算成本中受益。

此功能的关键元素是网络接口控制器的现代类,称为 SmartNIC。SmartNIC 是一个网络接口控制器,它可以处理计算密集型网络处理任务。与专用图形卡可提高图形性能的方式相同,T SmartNIC 可改进网络性能。在各个情形中,专用处理器提高了特定类型的处理任务的性能。

在 OpenShift Container Platform 中,您可以为具有兼容 SmartNIC 的裸机节点配置硬件卸载。SR-IOV Network Operator 配置并启用硬件卸载。

硬件卸载并不适用于所有工作负载或应用程序类型。只支持以下两种通信类型:

  • pod 到 pod
  • Pod 到服务,其中服务是一个由常规 pod 支持的 ClusterIP 服务

在所有情况下,只有在将 pod 和服务分配给具有兼容 SmartNIC 的节点时,硬件卸载才会发生。假设节点上带有硬件卸载的 pod 会尝试与常规节点上的服务进行通信。常规节点上,所有处理都会在内核中进行,因此 pod 到服务通信的整体性能仅限于该常规节点的最大性能。硬件卸载与 DPDK 应用程序不兼容。

在节点上启用硬件卸载,但没有配置 pod 使用,可能会导致 pod 流量的吞吐量性能降低。您无法为 OpenShift Container Platform 管理的 pod 配置硬件卸载。

23.13.2. 支持的设备

在以下网络接口控制器上支持硬件卸载:

表 23.16. 支持的网络接口控制器
制造商model供应商 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

ConnectX-6 NIC 模式中的 MT42822 BlueField-2

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. 创建名为 sriovOperatorConfig.yaml 的文件,其中包含以下 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 网络节点策略示例

以下示例描述了在 Red Hat OpenStack Platform (RHOSP) 上使用硬件卸载的网络接口控制器 (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. 运行以下命令,将 network.operator.openshift.io/smart-nic 标签添加到带有 SmartNIC 的每个 worker 节点:

    $ 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. 在集群中创建 Cluster Network Operator (CNO) 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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.