23.8. 为 SR-IOV 网络配置接口级网络 sysctl 设置和 all-multicast 模式


作为集群管理员,您可以使用连接到 SR-IOV 网络设备的 pod 的 tuning Container Network Interface (CNI) meta 插件更改接口级网络 sysctl 和几个接口属性,如 promiscuous 模式、all-multicast 模式、MTU 和 MAC 地址。

23.8.1. 为启用了 SR-IOV 的 NIC 标记节点

如果您只想在 SR-IOV 功能的节点上启用 SR-IOV,请执行几种方法:

  1. 安装 Node Feature Discovery (NFD) Operator。NFD 检测启用了 SR-IOV 的 NIC,并使用 node.alpha.kubernetes-incubator.io/nfd-network-sriov.enabled = true 标记节点。
  2. 检查每个节点的 SriovNetworkNodeState CR。interfaces 小节包括 worker 节点上 SR-IOV Network Operator 发现的所有 SR-IOV 设备列表。使用以下命令,为每个节点标记 feature.node.kubernetes.io/network-sriov.enabled: "true"

    $ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
    注意

    您可以使用您需要的任何名称标记节点。

23.8.2. 设置一个 sysctl 标记

您可以为连接到 SR-IOV 网络设备的 pod 设置接口级网络 sysctl 设置。

在本例中,net.ipv4.conf.IFNAME.accept_redirects 在创建的虚拟接口上设置为 1

sysctl-tuning-test 是本例中使用的命名空间。

  • 使用以下命令来创建 sysctl-tuning-test 命名空间:

    $ oc create namespace sysctl-tuning-test

23.8.2.1. 在使用 SR-IOV 网络设备的节点上设置一个 sysctl 标志

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

注意

当应用由 SriovNetworkNodePolicy 对象中指定的配置时,SR-IOV Operator 可能会排空并重启节点。

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

按照以下步骤创建一个 SriovNetworkNodePolicy 自定义资源 (CR)。

流程

  1. 创建一个 SriovNetworkNodePolicy 自定义资源 (CR)。例如,将以下 YAML 保存为文件 policyoneflag-sriov-node-network.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: policyoneflag 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: policyoneflag 3
      nodeSelector: 4
        feature.node.kubernetes.io/network-sriov.capable="true"
      priority: 10 5
      numVfs: 5 6
      nicSelector: 7
        pfNames: ["ens5"] 8
      deviceType: "netdevice" 9
      isRdma: false 10
    1
    自定义资源对象的名称。
    2
    安装 SR-IOV Network Operator 的命名空间。
    3
    SR-IOV 网络设备插件的资源名称。您可以为资源名称创建多个 SR-IOV 网络节点策略。
    4
    节点选择器指定要配置的节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。
    5
    可选: priority 是一个 099 之间的整数。较小的值具有更高的优先级。例如,优先级 10 是高于优先级 99。默认值为 99
    6
    为 SR-IOV 物理网络设备创建的虚拟功能(VF)的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过 127
    7
    NIC 选择器标识要配置的 Operator 的设备。您不必为所有参数指定值。建议您足够精确地识别网络设备以避免意外选择设备。如果指定了rootDevices,则必须同时为 vendordeviceIDpfNames 指定一个值。如果同时指定了 pfNamesrootDevices,请确保它们引用同一设备。如果您为 netFilter 指定了一个值,那么您不需要指定任何其他参数,因为网络 ID 是唯一的。
    8
    可选:该设备的一个或多个物理功能(PF)名称的数组。
    9
    可选:虚拟功能的驱动程序类型。唯一允许的值是 netdevice。对于裸机节点上的 DPDK 模式的 Mellanox NIC,请将 isRdma 设置为 true
    10
    可选:配置是否启用远程直接访问 (RDMA) 模式。默认值为 false。如果 isRdma 参数设为 true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。将 isRdma 设置为 true,并将 needVhostNet 设置为 true 以配置 Mellanox NIC 以用于 Fast Datapath DPDK 应用程序。
    注意

    vfio-pci 驱动程序类型不被支持。

  2. 创建 SriovNetworkNodePolicy 对象:

    $ oc create -f policyoneflag-sriov-node-network.yaml

    应用配置更新后,sriov-network-operator 命名空间中的所有 pod 将变为 Running 状态。

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

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

    输出示例

    Succeeded

23.8.2.2. 在 SR-IOV 网络中配置 sysctl

您可以通过将调优配置添加到 SriovNetwork 资源的可选 metaPlugins 参数,在 SR-IOV 创建的虚拟接口上设置特定于接口的 sysctl 设置。

SR-IOV Network Operator 管理额外网络定义。当您指定要创建的额外 SR-IOV 网络时,SR-IOV Network Operator 会自动创建 NetworkAttachmentDefinition 自定义资源(CR)。

注意

不要编辑 SR-IOV Network Operator 所管理的 NetworkAttachmentDefinition 自定义资源。这样做可能会破坏额外网络上的网络流量。

要更改接口级别网络 net.ipv4.conf.IFNAME.accept_redirects sysctl 设置,请使用 Container Network Interface (CNI) 调整插件创建额外的 SR-IOV 网络。

先决条件

  • 安装 OpenShift Container Platform CLI(oc)。
  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform 集群。

流程

  1. 为额外 SR-IOV 网络附加创建 SriovNetwork 自定义资源 (CR) 并插入 metaPlugins 配置,如下例所示。将 YAML 保存为文件 sriov-network-interface-sysctl.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: onevalidflag 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: policyoneflag 3
      networkNamespace: sysctl-tuning-test 4
      ipam: '{ "type": "static" }' 5
      capabilities: '{ "mac": true, "ips": true }' 6
      metaPlugins : | 7
        {
          "type": "tuning",
          "capabilities":{
            "mac":true
          },
          "sysctl":{
             "net.ipv4.conf.IFNAME.accept_redirects": "1"
          }
        }
    1
    对象的名称。SR-IOV Network Operator 创建一个名称相同的 NetworkAttachmentDefinition 对象。
    2
    安装 SR-IOV Network Operator 的命名空间。
    3
    用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy 对象中的 spec.resourceName 参数的值。
    4
    SriovNetwork 对象的目标命名空间。只有目标命名空间中的 pod 可以附加到额外网络。
    5
    为 IPAM CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
    6
    可选:为额外网络设置功能。您可以指定 "{ "ips": true }" 来启用 IP 地址支持,或指定 "{ "mac": true }" 来启用 MAC 地址支持。
    7
    可选: metaPlugins 参数用于为该设备添加额外的功能。在这种情况下,将 type 字段设置为 tuning。指定在 sysctl 字段中设置的接口级网络 sysctl
  2. 创建 SriovNetwork 资源:

    $ oc create -f sriov-network-interface-sysctl.yaml

验证 NetworkAttachmentDefinition CR 是否已成功创建

  • 运行以下命令,确认 SR-IOV Network Operator 创建了 NetworkAttachmentDefinition CR:

    $ oc get network-attachment-definitions -n <namespace> 1
    1
    <namespace> 替换为您在 SriovNetwork 对象中指定的 networkNamespace 的值。例如: sysctl-tuning-test

    输出示例

    NAME                                  AGE
    onevalidflag                          14m

    注意

    SR-IOV Network Operator 创建 CR 之前可能会有延迟。

验证额外 SR-IOV 网络附加是否成功

要验证 tuning CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:

  1. 创建 Pod CR。将以下 YAML 保存为文件 examplepod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: tunepod
      namespace: sysctl-tuning-test
      annotations:
        k8s.v1.cni.cncf.io/networks: |-
          [
            {
              "name": "onevalidflag",  1
              "mac": "0a:56:0a:83:04:0c", 2
              "ips": ["10.100.100.200/24"] 3
           }
          ]
    spec:
      containers:
      - name: podexample
        image: centos
        command: ["/bin/bash", "-c", "sleep INF"]
        securityContext:
          runAsUser: 2000
          runAsGroup: 3000
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
    1
    SR-IOV 网络附加定义 CR 的名称。
    2
    可选:从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "mac": true }
    3
    可选:从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 IP 地址。支持 IPv4 和 IPv6 IP 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "ips": true }
  2. 创建 Pod CR:

    $ oc apply -f examplepod.yaml
  3. 运行以下命令验证 pod 是否已创建:

    $ oc get pod -n sysctl-tuning-test

    输出示例

    NAME      READY   STATUS    RESTARTS   AGE
    tunepod   1/1     Running   0          47s

  4. 运行以下命令登录到 pod:

    $ oc rsh -n sysctl-tuning-test tunepod
  5. 验证配置的 sysctl 标记的值。运行以下命令,查找 net.ipv4.conf.IFNAME.accept_redirects 的值:

    $ sysctl net.ipv4.conf.net1.accept_redirects

    输出示例

    net.ipv4.conf.net1.accept_redirects = 1

23.8.3. 为与绑定 SR-IOV 接口标记关联的 pod 配置 sysctl 设置

您可以为连接到绑定的 SR-IOV 网络设备的 pod 设置接口级网络 sysctl 设置。

在本例中,可以配置的特定网络接口级 sysctl 设置在绑定接口上设置。

sysctl-tuning-test 是本例中使用的命名空间。

  • 使用以下命令来创建 sysctl-tuning-test 命名空间:

    $ oc create namespace sysctl-tuning-test

23.8.3.1. 在带有绑定的 SR-IOV 网络设备的节点上设置所有 sysctl 标志

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

注意

当应用由 SriovNetworkNodePolicy 对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。

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

按照以下步骤创建一个 SriovNetworkNodePolicy 自定义资源 (CR)。

流程

  1. 创建一个 SriovNetworkNodePolicy 自定义资源 (CR)。将以下 YAML 保存为文件 policyallflags-sriov-node-network.yaml。将 policyallflags 替换为配置的名称。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: policyallflags 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: policyallflags 3
      nodeSelector: 4
        node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = `true`
      priority: 10 5
      numVfs: 5 6
      nicSelector: 7
        pfNames: ["ens1f0"]  8
      deviceType: "netdevice" 9
      isRdma: false 10
    1
    自定义资源对象的名称。
    2
    安装 SR-IOV Network Operator 的命名空间。
    3
    SR-IOV 网络设备插件的资源名称。您可以为资源名称创建多个 SR-IOV 网络节点策略。
    4
    节点选择器指定要配置的节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。
    5
    可选: priority 是一个 099 之间的整数。较小的值具有更高的优先级。例如,优先级 10 是高于优先级 99。默认值为 99
    6
    为 SR-IOV 物理网络设备创建的虚拟功能 (VF) 的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过 127
    7
    NIC 选择器标识要配置的 Operator 的设备。您不必为所有参数指定值。建议您足够精确地识别网络设备以避免意外选择设备。如果指定了rootDevices,则必须同时为 vendordeviceIDpfNames 指定一个值。如果同时指定了 pfNamesrootDevices,请确保它们引用同一设备。如果您为 netFilter 指定了一个值,那么您不需要指定任何其他参数,因为网络 ID 是唯一的。
    8
    可选:该设备的一个或多个物理功能(PF)名称的数组。
    9
    可选:虚拟功能的驱动程序类型。唯一允许的值是 netdevice。对于裸机节点上的 DPDK 模式的 Mellanox NIC,请将 isRdma 设置为 true
    10
    可选:配置是否启用远程直接访问 (RDMA) 模式。默认值为 false。如果 isRdma 参数设为 true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。将 isRdma 设置为 true,并将 needVhostNet 设置为 true 以配置 Mellanox NIC 以用于 Fast Datapath DPDK 应用程序。
    注意

    vfio-pci 驱动程序类型不被支持。

  2. 创建 SriovNetworkNodePolicy 对象:

    $ oc create -f policyallflags-sriov-node-network.yaml

    应用配置更新后,sriov-network-operator 命名空间中的所有 pod 将变为 Running 状态。

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

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

    输出示例

    Succeeded

23.8.3.2. 在绑定的 SR-IOV 网络中配置 sysctl

您可以在从两个 SR-IOV 接口创建的绑定接口上设置特定于接口的 sysctl 设置。为此,可将调优配置添加到绑定网络附加定义的可选 Plugins 参数中。

注意

不要编辑 SR-IOV Network Operator 所管理的 NetworkAttachmentDefinition 自定义资源。这样做可能会破坏额外网络上的网络流量。

要更改特定的接口级网络 sysctl 设置,请按照以下流程使用 Container Network Interface (CNI) 调优插件创建 SriovNetwork 自定义资源 (CR)。

先决条件

  • 安装 OpenShift Container Platform CLI(oc)。
  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform 集群。

流程

  1. 为绑定接口创建 SriovNetwork 自定义资源 (CR),如下例所示。将 YAML 保存为文件 sriov-network-attachment.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: allvalidflags 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: policyallflags 3
      networkNamespace: sysctl-tuning-test 4
      capabilities: '{ "mac": true, "ips": true }' 5
    1
    对象的名称。SR-IOV Network Operator 创建一个名称相同的 NetworkAttachmentDefinition 对象。
    2
    安装 SR-IOV Network Operator 的命名空间。
    3
    用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy 对象中的 spec.resourceName 参数的值。
    4
    SriovNetwork 对象的目标命名空间。只有目标命名空间中的 pod 可以附加到额外网络。
    5
    可选:为这个额外网络配置功能。您可以指定 "{ "ips": true }" 来启用 IP 地址支持,或指定 "{ "mac": true }" 来启用 MAC 地址支持。
  2. 创建 SriovNetwork 资源:

    $ oc create -f sriov-network-attachment.yaml
  3. 创建绑定网络附加定义,如下例所示。将 YAML 保存为文件 sriov-bond-network-interface.yaml

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bond-sysctl-network
      namespace: sysctl-tuning-test
    spec:
      config: '{
      "cniVersion":"0.4.0",
      "name":"bound-net",
      "plugins":[
        {
          "type":"bond", 1
          "mode": "active-backup", 2
          "failOverMac": 1, 3
          "linksInContainer": true, 4
          "miimon": "100",
          "links": [ 5
            {"name": "net1"},
            {"name": "net2"}
          ],
          "ipam":{ 6
            "type":"static"
          }
        },
        {
          "type":"tuning", 7
          "capabilities":{
            "mac":true
          },
          "sysctl":{
            "net.ipv4.conf.IFNAME.accept_redirects": "0",
            "net.ipv4.conf.IFNAME.accept_source_route": "0",
            "net.ipv4.conf.IFNAME.disable_policy": "1",
            "net.ipv4.conf.IFNAME.secure_redirects": "0",
            "net.ipv4.conf.IFNAME.send_redirects": "0",
            "net.ipv6.conf.IFNAME.accept_redirects": "0",
            "net.ipv6.conf.IFNAME.accept_source_route": "1",
            "net.ipv6.neigh.IFNAME.base_reachable_time_ms": "20000",
            "net.ipv6.neigh.IFNAME.retrans_time_ms": "2000"
          }
        }
      ]
    }'
    1
    类型是 bond
    2
    mode 属性指定绑定模式。支持的绑定模式有:
    • balance-rr - 0
    • active-backup - 1
    • balance-xor - 2

      对于 balance-rrbalance-xor 模式,您必须为 SR-IOV 虚拟功能将 trust 模式设置为 on

    3
    对于 active-backup 模式,failover 属性是必需的。
    4
    linksInContainer=true 标志告知 Bond CNI 在容器内找到所需的接口。默认情况下,Bond CNI 会查找主机上的这些接口,该接口无法与 SRIOV 和 Multus 集成。
    5
    links 部分定义将用于创建绑定的接口。默认情况下,Multus 将附加的接口命名为 "net",再加上一个连续的数字。
    6
    为 IPAM CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。在这个 pod 示例 IP 地址中被手动配置,因此在本例中 ipam 被设置为 static。
    7
    为设备添加额外的功能。例如,将 type 字段设置为 tuning。指定在 sysctl 字段中设置的接口级网络 sysctl。这个示例设置可设置的所有接口级网络 sysctl 设置。
  4. 创建绑定网络附加定义:

    $ oc create -f sriov-bond-network-interface.yaml

验证 NetworkAttachmentDefinition CR 是否已成功创建

  • 运行以下命令,确认 SR-IOV Network Operator 创建了 NetworkAttachmentDefinition CR:

    $ oc get network-attachment-definitions -n <namespace> 1
    1
    <namespace> 替换为您在配置网络附加时指定的 networkNamespace,如 sysctl-tuning-test

    输出示例

    NAME                          AGE
    bond-sysctl-network           22m
    allvalidflags                 47m

    注意

    SR-IOV Network Operator 创建 CR 之前可能会有延迟。

验证额外的 SR-IOV 网络资源是否成功

要验证 tuning CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:

  1. 创建 Pod CR。例如,将以下 YAML 保存为文件 examplepod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: tunepod
      namespace: sysctl-tuning-test
      annotations:
        k8s.v1.cni.cncf.io/networks: |-
          [
            {"name": "allvalidflags"}, 1
            {"name": "allvalidflags"},
            {
              "name": "bond-sysctl-network",
              "interface": "bond0",
              "mac": "0a:56:0a:83:04:0c", 2
              "ips": ["10.100.100.200/24"] 3
           }
          ]
    spec:
      containers:
      - name: podexample
        image: centos
        command: ["/bin/bash", "-c", "sleep INF"]
        securityContext:
          runAsUser: 2000
          runAsGroup: 3000
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
    1
    SR-IOV 网络附加定义 CR 的名称。
    2
    可选:从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "mac": true }
    3
    可选:从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 IP 地址。支持 IPv4 和 IPv6 IP 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "ips": true }
  2. 应用 YAML:

    $ oc apply -f examplepod.yaml
  3. 运行以下命令验证 pod 是否已创建:

    $ oc get pod -n sysctl-tuning-test

    输出示例

    NAME      READY   STATUS    RESTARTS   AGE
    tunepod   1/1     Running   0          47s

  4. 运行以下命令登录到 pod:

    $ oc rsh -n sysctl-tuning-test tunepod
  5. 验证配置的 sysctl 标记的值。运行以下命令,查找 net.ipv6.neigh.IFNAME.base_reachable_time_ms 的值:

    $ sysctl net.ipv6.neigh.bond0.base_reachable_time_ms

    输出示例

    net.ipv6.neigh.bond0.base_reachable_time_ms = 20000

23.8.4. 关于 all-multicast 模式

启用 all-multicast 模式(特别是在无根应用程序上下文中)非常重要。如果没有启用此模式,则需要为 Pod 的安全上下文约束(SCC )授予 NET_ADMIN 功能。如果您要允许 NET_ADMIN 功能授予 pod 权限,以便更改超出其特定要求的更改,您可能会暴露安全漏洞。

tuning CNI 插件支持更改几个接口属性,包括 all-multicast 模式。通过启用此模式,您可以在 SR-IOV 网络设备上配置的虚拟功能 (VF) 上运行的应用程序从其他 VF 上的应用程序接收多播流量,无论是附加到同一还是不同的物理功能。

23.8.4.1. 在 SR-IOV 网络中启用 all-multicast 模式

您可以通过以下方法在 SR-IOV 接口中启用 all-multicast 模式:

  • SriovNetwork 资源的 metaPlugins 参数中添加调优配置
  • 在调优配置中将 allmulti 字段设置为 true

    注意

    确保创建启用了信任的虚拟功能 (VF)。

SR-IOV Network Operator 管理额外网络定义。当您指定要创建的额外 SR-IOV 网络时,SR-IOV Network Operator 会自动创建 NetworkAttachmentDefinition 自定义资源(CR)。

注意

不要编辑 SR-IOV Network Operator 所管理的 NetworkAttachmentDefinition 自定义资源。这样做可能会破坏额外网络上的网络流量。

按照本指南,在 SR-IOV 网络中启用 all-multicast 模式。

先决条件

  • 已安装 OpenShift Container Platform CLI (oc)。
  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform 集群。
  • 已安装 SR-IOV Network Operator。
  • 您已配置了适当的 SriovNetworkNodePolicy 对象。

流程

  1. 使用以下设置创建一个 YAML 文件,为 Mellanox ConnectX-5 设备定义 SriovNetworkNodePolicy 对象。将 YAML 文件保存为 sriovnetpolicy-mlx.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: sriovnetpolicy-mlx
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      nicSelector:
        deviceID: "1017"
        pfNames:
          - ens8f0np0#0-9
        rootDevices:
          - 0000:d8:00.0
        vendor: "15b3"
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true"
      numVfs: 10
      priority: 99
      resourceName: resourcemlx
  2. 可选:如果支持 SR-IOV 的集群节点还没有标记,请添加 SriovNetworkNodePolicy.Spec.NodeSelector 标签。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。
  3. 运行以下命令来创建 SriovNetworkNodePolicy 对象:

    $ oc create -f sriovnetpolicy-mlx.yaml

    应用配置更新后,sriov-network-operator 命名空间中的所有 pod 会自动进入 Running 状态。

  4. 运行以下命令来创建 enable-allmulti-test 命名空间:

    $ oc create namespace enable-allmulti-test
  5. 为额外 SR-IOV 网络附加创建 SriovNetwork 自定义资源 (CR) 并插入 metaPlugins 配置,如下例所示,并将该文件保存为 sriov-enable-all-multicast.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: enableallmulti 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: enableallmulti 3
      networkNamespace: enable-allmulti-test 4
      ipam: '{ "type": "static" }' 5
      capabilities: '{ "mac": true, "ips": true }' 6
      trust: "on" 7
      metaPlugins : | 8
        {
          "type": "tuning",
          "capabilities":{
            "mac":true
          },
          "allmulti": true
          }
        }
    1
    指定对象的名称。SR-IOV Network Operator 创建一个名称相同的 NetworkAttachmentDefinition 对象。
    2
    指定 SR-IOV Network Operator 安装到的命名空间。
    3
    指定来自用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy 对象的 spec.resourceName 参数的值。
    4
    SriovNetwork 对象指定目标命名空间。只有目标命名空间中的 pod 可以附加到额外网络。
    5
    为 IPAM CNI 插件指定一个配置对象作为 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
    6
    可选:为额外网络设置功能。您可以指定 "{ "ips": true }" 来启用 IP 地址支持,或指定 "{ "mac": true }" 来启用 MAC 地址支持。
    7
    指定虚拟功能的信任模式。这必须设置为 "on"。
    8
    使用 metaPlugins 参数为设备添加更多功能。在此用例中,将 type 字段设置为 tuning,并添加 allmulti 字段,并将它设为 true
  6. 运行以下命令来创建 SriovNetwork 资源:

    $ oc create -f sriov-enable-all-multicast.yaml

验证 NetworkAttachmentDefinition CR

  • 运行以下命令,确认 SR-IOV Network Operator 创建了 NetworkAttachmentDefinition CR:

    $ oc get network-attachment-definitions -n <namespace> 1
    1
    <namespace> 替换为您在 SriovNetwork 对象中指定的 networkNamespace 的值。在本例中,是 enable-allmulti-test

    输出示例

    NAME                                  AGE
    enableallmulti                        14m

    注意

    SR-IOV Network Operator 创建 CR 之前可能会有延迟。

    1. 运行以下命令,显示 SR-IOV 网络资源的信息:

      $ oc get sriovnetwork -n openshift-sriov-network-operator

验证额外的 SR-IOV 网络附加

要验证 tuning CNI 是否已正确配置并附加了额外的 SR-IOV 网络附加,请按照以下步骤执行:

  1. 创建 Pod CR。将以下 YAML 示例保存到名为 examplepod.yaml 的文件中:

    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
      namespace: enable-allmulti-test
      annotations:
        k8s.v1.cni.cncf.io/networks: |-
          [
            {
              "name": "enableallmulti",  1
              "mac": "0a:56:0a:83:04:0c", 2
              "ips": ["10.100.100.200/24"] 3
           }
          ]
    spec:
      containers:
      - name: podexample
        image: centos
        command: ["/bin/bash", "-c", "sleep INF"]
        securityContext:
          runAsUser: 2000
          runAsGroup: 3000
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
    1
    指定 SR-IOV 网络附加定义 CR 的名称。
    2
    可选:指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 {"mac": true}
    3
    可选:指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 IP 地址。支持 IPv4 和 IPv6 IP 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "ips": true }
  2. 运行以下命令来创建 Pod CR:

    $ oc apply -f examplepod.yaml
  3. 运行以下命令验证 pod 是否已创建:

    $ oc get pod -n enable-allmulti-test

    输出示例

    NAME       READY   STATUS    RESTARTS   AGE
    samplepod  1/1     Running   0          47s

  4. 运行以下命令登录到 pod:

    $ oc rsh -n enable-allmulti-test samplepod
  5. 运行以下命令,列出与 pod 关联的所有接口:

    sh-4.4# ip link

    输出示例

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default
        link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 1
    3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
        link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0 2

    1
    eth0@if22 是主接口
    2
    net1@if24 是配置了 network-attachment-definition 的二级接口,它支持 all-multicast 模式(ALLMULTI 标志)
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.