×

配置 SR-IOV 网络设备

SR-IOV 网络操作符将SriovNetworkNodePolicy.sriovnetwork.openshift.io自定义资源定义添加到 OpenShift Container Platform。您可以通过创建 SriovNetworkNodePolicy 自定义资源 (CR) 来配置 SR-IOV 网络设备。

应用SriovNetworkNodePolicy对象中指定的配置时,SR-IOV 操作符可能会使节点停转,在某些情况下,会重新引导节点。仅在以下情况下才会重新引导:

  • 对于 Mellanox 网卡(mlx5驱动程序),每次物理功能 (PF) 上的虚拟功能 (VF) 数量增加时,都会重新引导节点。

  • 对于英特尔网卡,只有在内核参数不包含intel_iommu=oniommu=pt时,才会重新引导。

配置更改的应用可能需要几分钟时间。

先决条件
  • 您已安装 OpenShift CLI(oc)。

  • 您可以作为具有cluster-admin角色的用户访问集群。

  • 您已安装 SR-IOV 网络操作符。

  • 您的集群中有足够的可用节点来处理来自停转节点的已逐出工作负载。

  • 您没有为 SR-IOV 网络设备配置选择任何控制平面节点。

步骤
  1. 创建SriovNetworkNodePolicy对象,然后将 YAML 保存到<name>-sriov-node-network.yaml文件中。将<name>替换为此配置的名称。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: <name> (1)
      namespace: openshift-sriov-network-operator (2)
    spec:
      resourceName: <sriov_resource_name> (3)
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true" (4)
      priority: <priority> (5)
      mtu: <mtu> (6)
      numVfs: <num> (7)
      nicSelector: (8)
        vendor: "<vendor_code>" (9)
        deviceID: "<device_id>" (10)
        pfNames: ["<pf_name>", ...] (11)
        rootDevices: ["<pci_bus_id>", "..."] (12)
      deviceType: vfio-pci (13)
      isRdma: false (14)
    1 为 CR 对象指定名称。
    2 指定安装 SR-IOV 操作符的命名空间。
    3 指定 SR-IOV 设备插件的资源名称。您可以为资源名称创建多个SriovNetworkNodePolicy对象。
    4 指定节点选择器以选择要配置的节点。仅配置所选节点上的 SR-IOV 网络设备。SR-IOV 容器网络接口 (CNI) 插件和设备插件仅部署在所选节点上。
    5 可选:指定099之间的整数值。较小的数字具有更高的优先级,因此优先级为10高于优先级为99。默认值为99
    6 可选:为虚拟功能的最大传输单元 (MTU) 指定一个值。对于不同的网卡型号,最大 MTU 值可能会有所不同。
    7 指定要为 SR-IOV 物理网络设备创建的虚拟函数 (VF) 数量。对于英特尔网络接口卡 (NIC),VF 数量不能大于设备支持的 VF 总数。对于Mellanox NIC,VF 数量不能大于127
    8 nicSelector映射选择操作员要配置的以太网设备。您不需要为所有参数指定值。建议以足够的精度标识以太网适配器,以最大限度地减少无意中选择以太网设备的可能性。如果指定rootDevices,则还必须指定vendordeviceIDpfNames的值。如果同时指定pfNamesrootDevices,请确保它们指向相同的设备。
    9 可选:指定 SR-IOV 网络设备的供应商十六进制代码。唯一允许的值是808615b3
    10 可选:指定 SR-IOV 网络设备的设备十六进制代码。唯一允许的值是158b10151017
    11 可选:该参数接受一个或多个以太网设备物理函数 (PF) 名称的数组。
    12 该参数接受以太网设备物理功能的一个或多个 PCI 总线地址的数组。请使用以下格式提供地址:0000:02:00.1
    13 OpenShift Virtualization 中的虚拟函数需要vfio-pci驱动程序类型。
    14 可选:指定是否启用远程直接内存访问 (RDMA) 模式。对于Mellanox网卡,请将isRdma设置为false。默认值为false

    如果isRDMA标志设置为true,您可以继续将启用 RDMA 的 VF 用作普通网络设备。设备可以在任一模式下使用。

  2. 可选:如果尚未标记 SR-IOV 功能集群节点,请使用SriovNetworkNodePolicy.Spec.NodeSelector对其进行标记。有关节点标记的更多信息,请参阅“了解如何在节点上更新标签”。

  3. 创建SriovNetworkNodePolicy对象

    $ oc create -f <name>-sriov-node-network.yaml

    其中<name>指定此配置的名称。

    应用配置更新后,sriov-network-operator命名空间中的所有 Pod 都将转换到Running状态。

  4. 要验证 SR-IOV 网络设备是否已配置,请输入以下命令。将<node_name>替换为您刚刚配置的具有 SR-IOV 网络设备的节点的名称。

    $ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'

配置 SR-IOV 附加网络

您可以通过创建SriovNetwork对象来配置使用 SR-IOV 硬件的附加网络。

创建SriovNetwork对象时,SR-IOV 网络操作员会自动创建一个NetworkAttachmentDefinition对象。

如果SriovNetwork对象已附加到处于running状态的 Pod 或虚拟机,请不要修改或删除该对象。

先决条件
  • 安装 OpenShift CLI (oc)。

  • 以具有cluster-admin权限的用户身份登录。

步骤
  1. 创建以下SriovNetwork对象,然后将 YAML 保存到<name>-sriov-network.yaml文件中。将<name>替换为此附加网络的名称。

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: <name> (1)
  namespace: openshift-sriov-network-operator (2)
spec:
  resourceName: <sriov_resource_name> (3)
  networkNamespace: <target_namespace> (4)
  vlan: <vlan> (5)
  spoofChk: "<spoof_check>" (6)
  linkState: <link_state> (7)
  maxTxRate: <max_tx_rate> (8)
  minTxRate: <min_rx_rate> (9)
  vlanQoS: <vlan_qos> (10)
  trust: "<trust_vf>" (11)
  capabilities: <capabilities> (12)
1 <name>替换为对象的名称。SR-IOV 网络操作员将创建一个同名的NetworkAttachmentDefinition对象。
2 指定安装 SR-IOV 网络操作员的命名空间。
3 <sriov_resource_name>替换为定义此附加网络的 SR-IOV 硬件的SriovNetworkNodePolicy对象的.spec.resourceName参数的值。
4 <target_namespace>替换为 SriovNetwork 的目标命名空间。只有目标命名空间中的 Pod 或虚拟机才能附加到 SriovNetwork。
5 可选:将<vlan>替换为附加网络的虚拟局域网 (VLAN) ID。整数值必须在04095之间。默认值为0
6 可选:将<spoof_check>替换为 VF 的欺骗检查模式。允许的值是字符串"on""off"

您必须将指定的值括在引号中,否则 SR-IOV 网络操作员会拒绝 CR。

7 可选:将<link_state>替换为虚拟函数 (VF) 的链路状态。允许的值为enabledisableauto
8 可选:将<max_tx_rate>替换为 VF 的最大传输速率(以 Mbps 为单位)。
9 可选:将<min_tx_rate>替换为 VF 的最小传输速率(以 Mbps 为单位)。此值应始终小于或等于最大传输速率。

英特尔 NIC 不支持minTxRate参数。更多信息,请参见BZ#1772847

10 可选:将<vlan_qos>替换为 VF 的 IEEE 802.1p 优先级。默认值为0
11 可选:将<trust_vf>替换为 VF 的信任模式。允许的值是字符串"on""off"

您必须将指定的值括在引号中,否则 SR-IOV 网络操作员会拒绝 CR。

12 可选:将<capabilities>替换为要为此网络配置的功能。
  1. 要创建对象,请输入以下命令。将<name>替换为此附加网络的名称。

    $ oc create -f <name>-sriov-network.yaml
  2. 可选:要确认与您在上一步骤中创建的SriovNetwork对象关联的NetworkAttachmentDefinition对象是否存在,请输入以下命令。将<namespace>替换为您在SriovNetwork对象中指定的命名空间。

    $ oc get net-attach-def -n <namespace>

使用命令行将虚拟机连接到 SR-IOV 网络

您可以通过在虚拟机配置中包含网络详细信息来将虚拟机 (VM) 连接到 SR-IOV 网络。

步骤
  1. 将 SR-IOV 网络详细信息添加到虚拟机配置的spec.domain.devices.interfacesspec.networks节,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
    spec:
      domain:
        devices:
          interfaces:
          - name: nic1 (1)
            sriov: {}
      networks:
      - name: nic1 (2)
        multus:
            networkName: sriov-network (3)
    # ...
    1 为 SR-IOV 接口指定一个唯一的名称。
    2 指定 SR-IOV 接口的名称。这必须与您之前定义的interfaces.name相同。
    3 指定 SR-IOV 网络附件定义的名称。
  2. 应用虚拟机配置

    $ oc apply -f <vm_sriov>.yaml (1)
    1 虚拟机 YAML 文件的名称。

使用 Web 控制台将虚拟机连接到 SR-IOV 网络

您可以通过在虚拟机配置中包含网络详细信息来将虚拟机连接到 SR-IOV 网络。

先决条件
  • 您必须为网络创建一个网络附件定义。

步骤
  1. 导航到**虚拟化** → **虚拟机**。

  2. 单击虚拟机以查看**虚拟机详细信息**页面。

  3. 在**配置**选项卡上,单击**网络接口**选项卡。

  4. 单击**添加网络接口**。

  5. 输入接口名称。

  6. 从**网络**列表中选择 SR-IOV 网络附件定义。

  7. 从**类型**列表中选择SR-IOV

  8. 可选:添加网络**模型**或**MAC 地址**。

  9. 单击**保存**。

  10. 重新启动或实时迁移虚拟机以应用更改。