8.5. 配置 SR-IOV 网络附加

您可以为集群中的单根 I/O 虚拟化(SR-IOV)设备配置网络附加。

8.5.1. 配置 SR-IOV 额外网络

您可以通过创建一个 SriovNetwork 自定义资源 (CR) 来配置使用 SR-IOV 硬件的额外网络。当创建 SriovNetwork CR 时,SR-IOV Operator 会自动创建一个 NetworkAttachmentDefinition CR。

注意

如果一个 SriovNetwork CR 已被附加到状态为 running 的 Pod 后,则不能修改或删除它。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建以下 SriovNetwork CR,然后在 <name>-sriov-network.yaml 文件中保存 YAML。用这个额外网络的名称替换 <name>
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: <name> 1
  namespace: openshift-sriov-network-operator 2
spec:
  networkNamespace: <target_namespace> 3
  ipam: <ipam> 4
  vlan: <vlan> 5
  resourceName: <sriov_resource_name> 6
  linkState: <link_state> 7
  maxTxRate: <max_tx_rate> 8
  minTxRate: <min_rx_rate> 9
  vlanQoS: <vlan_qos> 10
  spoofChk: "<spoof_check>" 11
  trust: "<trust_vf>" 12
  capabilities: <capabilities> 13
1
<name> 替换为 CR 的名称。SR-IOV Network Operator 创建 一 个名称相同的 NetworkAttachmentDefinition CR。
2
指定 SR-IOV Operator 安装到的命名空间。
3
可选:将 <target_namespace> 替换为创建 NetworkAttachmentDefinition CR 的命名空间。默认值为 openshift-sriov-network-operator
4
可选:使用 ipam CNI 插件的一个配置对象替换 <ipam> 做为一个 YAML 块 scalar。该插件管理网络附加定义的 IP 地址分配。
5
可选:使用额外网络的虚拟 LAN (VLAN) ID 替换 <vlan>。它需要是一个从 04095 范围内的一个整数值。默认值为 0
6
<sriov_resource_name> 替换为来自用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy CR 的 .spec.resourceName 参数的值。
7
可选:将 <link_state> 替换为 Virtual Function (VF) 的链接状态。允许的值是 enabledisableauto
8
可选:将 <max_tx_rate> 替换为 VF 的最大传输率(以 Mbps 为单位)。
9
可选:将 <min_tx_rate> 替换为 VF 的最小传输率(以 Mbps 为单位)。这个值应该总是小于或等于最大传输率。
注意

Intel NIC 不支持 minTxRate 参数。如需更多信息,请参阅 BZ#1772847

10
可选:将 <vlan_qos> 替换为 VF 的 IEEE 802.1p 优先级级别。默认值为 0
11
可选:将 <spoof_check> 替换为 VF 的 spoof 检查模式。允许的值是字符串 "on""off"
重要

指定的值必须由引号包括,否则 SR-IOV Network Operator 将拒绝 CR。

12
可选:将 <trust_vf>替换为 VF 的信任模式。允许的值是字符串 "on""off"
重要

指定的值必须由引号包括,否则 SR-IOV Network Operator 将拒绝 CR。

13
可选:将 <capabilities> 替换为为这个网络配置的功能。您可以指定 "{ "ips": true }" 来启用 IP 地址支持,或指定 "{ "mac": true }" 来启用 MAC 地址支持。
  1. 运行以下命令来创建 CR 对象:用这个额外网络的名称替换 <name>

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

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

8.5.1.1. 配置 ipam CNI 插件

ipam Container Network Interface (CNI) 插件为其他 CNI 插件提供 IP 地址管理 (IPAM)。您可以配置 ipam 以进行静态 IP 地址分配或使用 DHCP 进行动态 IP 地址分配。您指定的 DHCP 服务器必须可从额外网络访问。

以下 JSON 配置对象描述了您可以设置的参数。

8.5.1.1.1. 静态 IP 地址分配配置

以下 JSON 描述了静态 IP 地址分配的配置:

静态分配配置

{
  "ipam": {
    "type": "static",
    "addresses": [ 1
      {
        "address": "<address>", 2
        "gateway": "<gateway>" 3
      }
    ],
    "routes": [ 4
      {
        "dst": "<dst>" 5
        "gw": "<gw>" 6
      }
    ],
    "dns": { 7
      "nameservers": ["<nameserver>"], 8
      "domain": "<domain>", 9
      "search": ["<search_domain>"] 10
    }
  }
}

1
定义分配给虚拟接口的 IP 地址的数组。支持 IPv4 和 IPv6 IP 地址。
2
您指定的 IP 地址。
3
出口网络流量要路由到的默认网关。
4
描述要在 Pod 中配置的路由的数组。
5
CIDR 格式的 IP 地址范围。
6
网络流量路由的网关。
7
可选: DNS 配置。
8
用来发送 DNS 查询的一个或多个 IP 地址的数组。
9
附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com
10
在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。
8.5.1.1.2. 动态 IP 地址分配配置

以下 JSON 描述了使用 DHCP 进行动态 IP 地址地址分配的配置:

DHCP 租期续订

Pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。

SR-IOV Network Operator 不创建 DHCP 服务器部署。Cluster Network Operator 负责创建小型的 DHCP 服务器部署。

要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:

shim 网络附加定义示例

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  ...
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    rawCNIConfig: |-
    {
      "name": "dhcp-shim",
      "cniVersion": "0.3.1",
      "type": "bridge",
      "master": "ens5",
      "ipam": {
        "type": "dhcp"
      }
    }

DHCP 分配配置

{
  "ipam": {
    "type": "dhcp"
  }
}

8.5.1.1.3. 静态 IP 地址分配配置示例

您可以配置 ipam 以进行静态 IP 地址分配:

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7"
        }
      ]
  }
}
8.5.1.1.4. 使用 DHCP 的动态 IP 地址分配配置示例

您可以配置 ipam 以使用 DHCP:

{
  "ipam": {
    "type": "dhcp"
  }
}

8.5.1.2. 在额外 SR-IOV 网络中配置静态 MAC 和 IP 地址

您可以通过在 Pod 注解中指定 CNI runtimeConfig 数据,配置 SR-IOV 网络上的静态 MAC 和 IP 地址。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 在创建 SriovNetwork CR 时以具有 cluster-admin 权限的用户身份登录。

流程

  1. 创建以下 SriovNetwork CR,然后在 <name>-sriov-network.yaml 文件中保存 YAML。用这个额外网络的名称替换 <name>

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: <name> 1
      namespace: openshift-sriov-network-operator 2
    spec:
      networkNamespace: <target_namespace> 3
      ipam: '{ "type": "static" }' 4
      capabilities: '{ "mac": true, "ips": true }' 5
      resourceName: <sriov_resource_name> 6
    1
    <name> 替换为 CR 的名称。SR-IOV Network Operator 创建 一 个名称相同的 NetworkAttachmentDefinition CR。
    2
    指定 SR-IOV Network Operator 安装到的命名空间。
    3
    <target_namespace> 替换为创建 NetworkAttachmentDefinition CR 的命名空间。
    4
    指定 ipam CNI 插件的静态类型,将其作为一个 YAML 块 scalar。
    5
    macips capabilities 设置为 true
    6
    <sriov_resource_name> 替换为来自用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy CR 的 spec.resourceName 参数的值。
  2. 运行以下命令来创建 CR:

    $ oc create -f <filename> 1
    1
    <filename> 替换为您在上一步中创建的文件的名称。
  3. 可选:通过运行以下命令,确认与在上一步中创建的 SriovNetwork CR 关联的 NetworkAttachmentDefinition CR 是否存在。将 <namespace> 替换为您在 SriovNetwork CR 中指定的命名空间。

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

如果一个 SriovNetwork 自定义资源 (CR) 已被附件到状态为 running 的 Pod 后,则不能修改或删除它。

  1. 创建以下 SR-IOV pod 规格,然后在 <name>-sriov-pod.yaml 文件中保存 YAML。将 <name> 替换为这个 pod 的名称。

    apiVersion: v1
    kind: Pod
    metadata:
      name: sample-pod
      annotations:
        k8s.v1.cni.cncf.io/networks: '[
    	{
    		"name": "<name>", 1
    		"mac": "20:04:0f:f1:88:01", 2
    		"ips": ["192.168.10.1/24", "2001::1/64"] 3
    	}
    ]'
    spec:
      containers:
      - name: sample-container
        image: <image>
        imagePullPolicy: IfNotPresent
        command: ["sleep", "infinity"]
    1
    指定 SR-IOV 网络附加定义 CR 的名称。
    2
    指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。
    3
    指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。支持 IPv4 和 IPv6 IP 地址。
  2. 运行以下命令来创建 SR-IOV pod 示例:

    $ oc create -f <filename> 1
    1
    <filename> 替换为您在上一步中创建的文件的名称。
  3. 可选:通过运行以下命令,将 macips 地址应用于 SR-IOV 设备。将 <namespace> 替换为您在 SriovNetwork CR 中指定的命名空间。

    $ oc exec sample-pod -n <namespace> -- ip addr show

8.5.2. 后续步骤