$ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
作为集群管理员,您可以使用用于连接到SR-IOV网络设备的pod的调整容器网络接口 (CNI) 元插件更改接口级网络sysctl以及一些接口属性,例如混杂模式、全组播模式、MTU和MAC地址。
在执行以下文档中的任何任务之前,请确保您已安装SR-IOV网络操作符。
如果您只想在支持SR-IOV的节点上启用SR-IOV,有几种方法可以实现。
安装节点功能发现 (NFD) 操作符。NFD检测SR-IOV启用NIC的存在,并使用node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = true标记节点。
检查每个节点的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"
|
您可以使用任何您想要的名称标记节点。 |
您可以为连接到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网络操作符将SriovNetworkNodePolicy.sriovnetwork.openshift.io自定义资源定义 (CRD) 添加到OpenShift Container Platform。您可以通过创建SriovNetworkNodePolicy自定义资源 (CR) 来配置SR-IOV网络设备。
|
应用 配置更改的应用可能需要几分钟时间。 |
请按照此步骤创建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网络操作符的命名空间。 |
| 3 | SR-IOV网络设备插件的资源名称。您可以为资源名称创建多个SR-IOV网络节点策略。 |
| 4 | 节点选择器指定要配置的节点。仅配置所选节点上的SR-IOV网络设备。SR-IOV容器网络接口 (CNI) 插件和设备插件仅部署在所选节点上。 |
| 5 | 可选:优先级是一个介于0和99之间的整数值。数值越小,优先级越高。例如,优先级10高于99。默认值为99。 |
| 6 | 为 SR-IOV 物理网络设备创建的虚拟函数 (VF) 数量。对于英特尔网络接口卡 (NIC),VF 数量不能大于设备支持的 VF 总数。对于Mellanox NIC,VF 数量不能大于127。 |
| 7 | NIC 选择器标识操作员要配置的设备。您不必为所有参数指定值。建议以足够的精度标识网络设备,以避免无意中选择设备。如果您指定了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 应用程序。 |
|
不支持 |
创建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
您可以通过将调整配置添加到SriovNetwork资源的可选metaPlugins参数中,在 SR-IOV 创建的虚拟接口上设置特定于接口的sysctl设置。
SR-IOV 网络操作员管理其他网络定义。当您指定要创建的另一个 SR-IOV 网络时,SR-IOV 网络操作员会自动创建NetworkAttachmentDefinition自定义资源 (CR)。
|
不要编辑 SR-IOV 网络操作员管理的 |
要更改接口级网络net.ipv4.conf.IFNAME.accept_redirects sysctl设置,请使用容器网络接口 (CNI) 调整插件创建一个附加的 SR-IOV 网络。
安装 OpenShift Container Platform CLI (oc)。
以具有集群管理员权限的用户身份登录到 OpenShift Container Platform 集群。
为附加的 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。 |
创建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 可能需要一些时间。 |
要验证调整 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
| 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 }。 |
创建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
您可以为连接到绑定 SR-IOV 网络设备的 Pod 设置接口级网络sysctl设置。
在此示例中,可以在绑定接口上设置可以配置的特定网络接口级sysctl设置。
sysctl-tuning-test是此示例中使用的命名空间。
使用以下命令创建sysctl-tuning-test命名空间
$ oc create namespace sysctl-tuning-test
SR-IOV网络操作符将SriovNetworkNodePolicy.sriovnetwork.openshift.io自定义资源定义 (CRD) 添加到OpenShift Container Platform。您可以通过创建SriovNetworkNodePolicy自定义资源 (CR) 来配置SR-IOV网络设备。
|
应用 配置更改的应用可能需要几分钟。 |
请按照此步骤创建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网络操作符的命名空间。 |
| 3 | SR-IOV网络设备插件的资源名称。您可以为资源名称创建多个SR-IOV网络节点策略。 |
| 4 | 节点选择器指定要配置的节点。仅配置所选节点上的SR-IOV网络设备。SR-IOV容器网络接口 (CNI) 插件和设备插件仅部署在所选节点上。 |
| 5 | 可选:优先级是一个介于0和99之间的整数值。数值越小,优先级越高。例如,优先级10高于99。默认值为99。 |
| 6 | 为 SR-IOV 物理网络设备创建的虚拟函数 (VF) 数量。对于英特尔网络接口卡 (NIC),VF 数量不能大于设备支持的 VF 总数。对于Mellanox NIC,VF 数量不能大于127。 |
| 7 | NIC 选择器标识操作员要配置的设备。您不必为所有参数指定值。建议以足够的精度标识网络设备,以避免无意中选择设备。如果您指定了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 应用程序。 |
|
不支持 |
创建 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
您可以通过将调整配置添加到绑定网络附件定义的可选Plugins参数中,在由两个 SR-IOV 接口创建的绑定接口上设置特定于接口的sysctl设置。
|
不要编辑 SR-IOV 网络操作员管理的 |
要更改特定接口级别的网络sysctl设置,请使用以下步骤创建带有容器网络接口 (CNI) 调优插件的SriovNetwork自定义资源 (CR)。
安装 OpenShift Container Platform CLI (oc)。
以具有集群管理员权限的用户身份登录到 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 网络操作员将创建一个具有相同名称的 NetworkAttachmentDefinition 对象。 |
| 2 | 安装SR-IOV网络操作符的命名空间。 |
| 3 | 来自定义 SR-IOV 硬件的SriovNetworkNodePolicy对象的spec.resourceName参数的值,用于此附加网络。 |
| 4 | SriovNetwork对象的 target 命名空间。只有 target 命名空间中的 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属性指定绑定模式。支持的绑定模式为:
|
| 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设置。 |
创建绑定网络连接资源
$ 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 可能需要一些时间。 |
要验证调整 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
| 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 }。 |
应用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
启用全组播模式,尤其是在无根应用程序的上下文中,至关重要。如果不启用此模式,则需要向pod的安全上下文约束 (SCC)授予NET_ADMIN能力。如果允许NET_ADMIN能力授予pod超越其特定要求的更改权限,则可能会暴露出安全漏洞。
调优CNI插件支持更改多个接口属性,包括全组播模式。通过启用此模式,您可以允许在SR-IOV网络设备上配置的虚拟函数 (VF) 上运行的应用程序从其他VF上的应用程序接收组播流量,无论这些VF是否附加到相同或不同的物理功能。
您可以通过以下方式在SR-IOV接口上启用全组播模式:
将调优配置添加到SriovNetwork资源的metaPlugins参数
在调优配置中将allmulti字段设置为true
|
确保您创建的虚拟函数 (VF) 已启用信任。 |
SR-IOV 网络操作员管理其他网络定义。当您指定要创建的另一个 SR-IOV 网络时,SR-IOV 网络操作员会自动创建NetworkAttachmentDefinition自定义资源 (CR)。
|
不要编辑 SR-IOV 网络操作员管理的 |
按照此指南在SR-IOV网络上启用全组播模式。
您已安装OpenShift Container Platform CLI (oc)。
您已以具有cluster-admin权限的用户身份登录到OpenShift Container Platform集群。
您已安装SR-IOV网络操作员。
您已配置相应的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配置,如下例所示的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。 |
通过运行以下命令创建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 可能需要一些时间。 |
通过运行以下命令显示有关SR-IOV网络资源的信息
$ oc get sriovnetwork -n openshift-sriov-network-operator
要验证调优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
| 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 }。 |
通过运行以下命令创建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)
| 1 | eth0@if22是主接口 |
| 2 | net1@if24是配置了支持全组播模式 (ALLMULTI标志) 的网络连接定义的辅助接口 |