$ 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 标志) 的网络连接定义的辅助接口 |