×

作为集群管理员,您可以使用用于连接到SR-IOV网络设备的pod的调整容器网络接口 (CNI) 元插件更改接口级网络sysctl以及一些接口属性,例如混杂模式、全组播模式、MTU和MAC地址。

在执行以下文档中的任何任务之前,请确保您已安装SR-IOV网络操作符

使用启用了SR-IOV的NIC标记节点

如果您只想在支持SR-IOV的节点上启用SR-IOV,有几种方法可以实现。

  1. 安装节点功能发现 (NFD) 操作符。NFD检测SR-IOV启用NIC的存在,并使用node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = true标记节点。

  2. 检查每个节点的SriovNetworkNodeState CR。interfaces 部分包含SR-IOV网络操作符在工作节点上发现的所有SR-IOV设备的列表。使用以下命令使用feature.node.kubernetes.io/network-sriov.capable: "true"标记每个节点

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

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

设置一个sysctl标志

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

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

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

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

    $ oc create namespace sysctl-tuning-test

在具有SR-IOV网络设备的节点上设置一个sysctl标志

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

应用SriovNetworkNodePolicy对象中指定的配置时,SR-IOV操作符可能会清空并重新引导节点。

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

请按照此步骤创建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网络操作符的命名空间。
    3 SR-IOV网络设备插件的资源名称。您可以为资源名称创建多个SR-IOV网络节点策略。
    4 节点选择器指定要配置的节点。仅配置所选节点上的SR-IOV网络设备。SR-IOV容器网络接口 (CNI) 插件和设备插件仅部署在所选节点上。
    5 可选:优先级是一个介于099之间的整数值。数值越小,优先级越高。例如,优先级10高于99。默认值为99
    6 为 SR-IOV 物理网络设备创建的虚拟函数 (VF) 数量。对于英特尔网络接口卡 (NIC),VF 数量不能大于设备支持的 VF 总数。对于Mellanox NIC,VF 数量不能大于127
    7 NIC 选择器标识操作员要配置的设备。您不必为所有参数指定值。建议以足够的精度标识网络设备,以避免无意中选择设备。如果您指定了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

配置 SR-IOV 网络上的 sysctl

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

SR-IOV 网络操作员管理其他网络定义。当您指定要创建的另一个 SR-IOV 网络时,SR-IOV 网络操作员会自动创建NetworkAttachmentDefinition自定义资源 (CR)。

不要编辑 SR-IOV 网络操作员管理的NetworkAttachmentDefinition自定义资源。这样做可能会中断附加网络上的网络流量。

要更改接口级网络net.ipv4.conf.IFNAME.accept_redirects sysctl设置,请使用容器网络接口 (CNI) 调整插件创建一个附加的 SR-IOV 网络。

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

  • 以具有集群管理员权限的用户身份登录到 OpenShift Container Platform 集群。

步骤
  1. 为附加的 SR-IOV 网络附件创建SriovNetwork自定义资源 (CR),并插入metaPlugins配置,如下面的示例 CR 所示。将 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 网络操作员将创建一个具有相同名称的 NetworkAttachmentDefinition 对象。
    2 安装SR-IOV网络操作符的命名空间。
    3 来自定义 SR-IOV 硬件的SriovNetworkNodePolicy对象的spec.resourceName参数的值,用于此附加网络。
    4 SriovNetwork对象的 target 命名空间。只有 target 命名空间中的 Pod 才能连接到附加网络。
    5 IPAM CNI 插件的配置对象,作为 YAML 块标量。该插件管理附件定义的 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 网络操作员是否已创建NetworkAttachmentDefinition CR

    $ oc get network-attachment-definitions -n <namespace> (1)
    1 <namespace>替换为您在SriovNetwork对象中指定的networkNamespace的值。例如,sysctl-tuning-test
    示例输出
    NAME                                  AGE
    onevalidflag                          14m

    SR-IOV 网络操作员创建 CR 可能需要一些时间。

验证附加的 SR-IOV 网络附件是否成功

要验证调整 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 地址。要使用此功能,还必须在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

为与绑定 SR-IOV 接口标志关联的 Pod 配置 sysctl 设置

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

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

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

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

    $ oc create namespace sysctl-tuning-test

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

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

应用SriovNetworkNodePolicy对象中指定的配置时,SR-IOV 运算符可能会使节点失效,在某些情况下,还会重新引导节点。

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

请按照此步骤创建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网络操作符的命名空间。
    3 SR-IOV网络设备插件的资源名称。您可以为资源名称创建多个SR-IOV网络节点策略。
    4 节点选择器指定要配置的节点。仅配置所选节点上的SR-IOV网络设备。SR-IOV容器网络接口 (CNI) 插件和设备插件仅部署在所选节点上。
    5 可选:优先级是一个介于099之间的整数值。数值越小,优先级越高。例如,优先级10高于99。默认值为99
    6 为 SR-IOV 物理网络设备创建的虚拟函数 (VF) 数量。对于英特尔网络接口卡 (NIC),VF 数量不能大于设备支持的 VF 总数。对于Mellanox NIC,VF 数量不能大于127
    7 NIC 选择器标识操作员要配置的设备。您不必为所有参数指定值。建议以足够的精度标识网络设备,以避免无意中选择设备。如果您指定了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

配置绑定 SR-IOV 网络上的 sysctl

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

不要编辑 SR-IOV 网络操作员管理的NetworkAttachmentDefinition自定义资源。这样做可能会中断附加网络上的网络流量。

要更改特定接口级别的网络sysctl设置,请使用以下步骤创建带有容器网络接口 (CNI) 调优插件的SriovNetwork自定义资源 (CR)。

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

  • 以具有集群管理员权限的用户身份登录到 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 网络操作员将创建一个具有相同名称的 NetworkAttachmentDefinition 对象。
    2 安装SR-IOV网络操作符的命名空间。
    3 来自定义 SR-IOV 硬件的SriovNetworkNodePolicy对象的spec.resourceName参数的值,用于此附加网络。
    4 SriovNetwork对象的 target 命名空间。只有 target 命名空间中的 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 failover属性对于active-backup模式是必须的。
    4 linksInContainer=true标志通知Bond CNI需要在容器内查找所需的接口。默认情况下,Bond CNI会在主机上查找这些接口,这对于与SRIOV和Multus集成不起作用。
    5 links部分定义了将用于创建绑定的接口。默认情况下,Multus将附加的接口命名为:“net”,加上一个连续的数字,从1开始。
    6 IPAM CNI插件的配置对象,作为一个YAML块标量。该插件管理附加定义的IP地址分配。在此pod示例中,IP地址是手动配置的,因此在这种情况下,ipam设置为static。
    7 向设备添加其他功能。例如,将type字段设置为tuning。在sysctl字段中指定要设置的接口级网络sysctl。此示例设置所有可以设置的接口级网络sysctl设置。
  4. 创建绑定网络连接资源

    $ oc create -f sriov-bond-network-interface.yaml
验证NetworkAttachmentDefinition CR 是否已成功创建
  • 通过运行以下命令确认 SR-IOV 网络操作员是否已创建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 网络操作员创建 CR 可能需要一些时间。

验证附加的SR-IOV网络资源是否成功

要验证调整 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 地址。要使用此功能,还必须在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

关于全组播模式

启用全组播模式,尤其是在无根应用程序的上下文中,至关重要。如果不启用此模式,则需要向pod的安全上下文约束 (SCC)授予NET_ADMIN能力。如果允许NET_ADMIN能力授予pod超越其特定要求的更改权限,则可能会暴露出安全漏洞。

调优CNI插件支持更改多个接口属性,包括全组播模式。通过启用此模式,您可以允许在SR-IOV网络设备上配置的虚拟函数 (VF) 上运行的应用程序从其他VF上的应用程序接收组播流量,无论这些VF是否附加到相同或不同的物理功能。

在SR-IOV网络上启用全组播模式

您可以通过以下方式在SR-IOV接口上启用全组播模式:

  • 将调优配置添加到SriovNetwork资源的metaPlugins参数

  • 在调优配置中将allmulti字段设置为true

    确保您创建的虚拟函数 (VF) 已启用信任。

SR-IOV 网络操作员管理其他网络定义。当您指定要创建的另一个 SR-IOV 网络时,SR-IOV 网络操作员会自动创建NetworkAttachmentDefinition自定义资源 (CR)。

不要编辑 SR-IOV 网络操作员管理的NetworkAttachmentDefinition自定义资源。这样做可能会中断附加网络上的网络流量。

按照此指南在SR-IOV网络上启用全组播模式。

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

  • 您已以具有cluster-admin权限的用户身份登录到OpenShift Container Platform集群。

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

  • 您已配置相应的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配置,如下例所示的CR YAML,并将文件保存为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网络操作员将创建一个名称相同的NetworkAttachmentDefinition对象。
    2 指定安装SR-IOV网络操作员的命名空间。
    3 从定义此附加网络的SR-IOV硬件的SriovNetworkNodePolicy对象中指定spec.resourceName参数的值。
    4 指定SriovNetwork对象的target namespace。只有目标命名空间中的pod才能连接到附加网络。
    5 指定IPAM CNI插件的配置对象,作为一个YAML块标量。该插件管理附加定义的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 网络操作员是否已创建NetworkAttachmentDefinition CR

    $ oc get network-attachment-definitions -n <namespace> (1)
    1 <namespace>替换为您在SriovNetwork对象中指定的networkNamespace的值。在此示例中,为enable-allmulti-test
    示例输出
    NAME                                  AGE
    enableallmulti                        14m

    SR-IOV 网络操作员创建 CR 可能需要一些时间。

    1. 通过运行以下命令显示有关SR-IOV网络资源的信息

      $ oc get sriovnetwork -n openshift-sriov-network-operator
附加SR-IOV网络连接的验证

要验证调优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地址。要使用此功能,还必须在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是配置了支持全组播模式 (ALLMULTI标志) 的网络连接定义的辅助接口