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,请执行几种方法:
-
安装 Node Feature Discovery (NFD) Operator。NFD 检测启用了 SR-IOV 的 NIC,并使用
node.alpha.kubernetes-incubator.io/nfd-network-sriov.enabled = true
标记节点。 检查每个节点的
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)。
流程
创建一个
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 是一个
0
到99
之间的整数。较小的值具有更高的优先级。例如,优先级10
是高于优先级99
。默认值为99
。 - 6
- 为 SR-IOV 物理网络设备创建的虚拟功能(VF)的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过
127
。 - 7
- NIC 选择器标识要配置的 Operator 的设备。您不必为所有参数指定值。建议您足够精确地识别网络设备以避免意外选择设备。如果指定了
rootDevices
,则必须同时为vendor
、deviceID
或pfNames
指定一个值。如果同时指定了pfNames
和rootDevices
,请确保它们引用同一设备。如果您为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
驱动程序类型不被支持。创建
SriovNetworkNodePolicy
对象:$ oc create -f policyoneflag-sriov-node-network.yaml
应用配置更新后,
sriov-network-operator
命名空间中的所有 pod 将变为Running
状态。要验证是否已配置了 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 集群。
流程
为额外 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
。
创建
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 网络附加,请执行以下操作:
创建
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
创建
Pod
CR:$ oc apply -f examplepod.yaml
运行以下命令验证 pod 是否已创建:
$ oc get pod -n sysctl-tuning-test
输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
运行以下命令登录到 pod:
$ oc rsh -n sysctl-tuning-test tunepod
验证配置的 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)。
流程
创建一个
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 是一个
0
到99
之间的整数。较小的值具有更高的优先级。例如,优先级10
是高于优先级99
。默认值为99
。 - 6
- 为 SR-IOV 物理网络设备创建的虚拟功能 (VF) 的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过
127
。 - 7
- NIC 选择器标识要配置的 Operator 的设备。您不必为所有参数指定值。建议您足够精确地识别网络设备以避免意外选择设备。如果指定了
rootDevices
,则必须同时为vendor
、deviceID
或pfNames
指定一个值。如果同时指定了pfNames
和rootDevices
,请确保它们引用同一设备。如果您为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
驱动程序类型不被支持。创建 SriovNetworkNodePolicy 对象:
$ oc create -f policyallflags-sriov-node-network.yaml
应用配置更新后,sriov-network-operator 命名空间中的所有 pod 将变为
Running
状态。要验证是否已配置了 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 集群。
流程
为绑定接口创建
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 地址支持。
创建
SriovNetwork
资源:$ oc create -f sriov-network-attachment.yaml
创建绑定网络附加定义,如下例所示。将 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-rr
或balance-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
设置。
创建绑定网络附加定义:
$ 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 网络附加,请执行以下操作:
创建
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
应用 YAML:
$ oc apply -f examplepod.yaml
运行以下命令验证 pod 是否已创建:
$ oc get pod -n sysctl-tuning-test
输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
运行以下命令登录到 pod:
$ oc rsh -n sysctl-tuning-test tunepod
验证配置的
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
对象。
流程
使用以下设置创建一个 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
-
可选:如果支持 SR-IOV 的集群节点还没有标记,请添加
SriovNetworkNodePolicy.Spec.NodeSelector
标签。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。 运行以下命令来创建
SriovNetworkNodePolicy
对象:$ oc create -f sriovnetpolicy-mlx.yaml
应用配置更新后,
sriov-network-operator
命名空间中的所有 pod 会自动进入Running
状态。运行以下命令来创建
enable-allmulti-test
命名空间:$ oc create namespace enable-allmulti-test
为额外 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
。
运行以下命令来创建
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 之前可能会有延迟。
运行以下命令,显示 SR-IOV 网络资源的信息:
$ oc get sriovnetwork -n openshift-sriov-network-operator
验证 tuning CNI 是否已正确配置
要验证 tuning CNI 是否已正确配置并附加了额外的 SR-IOV 网络附加,请按照以下步骤执行:
创建
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
运行以下命令来创建
Pod
CR:$ oc apply -f examplepod.yaml
运行以下命令验证 pod 是否已创建:
$ oc get pod -n enable-allmulti-test
输出示例
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 47s
运行以下命令登录到 pod:
$ oc rsh -n enable-allmulti-test samplepod
运行以下命令,列出与 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