23.4. 配置 SR-IOV 网络设备
您可以在集群中配置单一根 I/O 虚拟化(SR-IOV)设备。
23.4.1. SR-IOV 网络节点配置对象 复制链接链接已复制到粘贴板!
您可以通过创建 SR-IOV 网络节点策略来为节点指定 SR-IOV 网络设备配置。策略的 API 对象是 sriovnetwork.openshift.io API 组的一部分。
以下 YAML 描述了 SR-IOV 网络节点策略:
- 1
- 自定义资源对象的名称。
- 2
- 安装 SR-IOV Network Operator 的命名空间。
- 3
- SR-IOV 网络设备插件的资源名称。您可以为资源名称创建多个 SR-IOV 网络节点策略。
在指定名称时,请确保在
resourceName中使用接受的语法表达式^[a-zA-Z0-9_]+$。 - 4
- 节点选择器指定要配置的节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。重要
SR-IOV Network Operator 按顺序将节点网络配置策略应用到节点。在应用节点网络配置策略前,SR-IOV Network Operator 会检查节点的机器配置池(MCP)是否处于不健康状态,如
Degraded或Updating。如果节点处于不健康的 MCP,将节点网络配置策略应用到集群中的所有目标节点的过程会被暂停,直到 MCP 返回健康状态。为了避免处于不健康的 MCP 的节点阻止将节点网络配置策略应用到其他节点,包括处于其他 MCP 的节点,您必须为每个 MCP 创建单独的节点网络配置策略。
- 5
- 可选: priority 是一个
0到99之间的整数。较小的值具有更高的优先级。例如,优先级10是高于优先级99。默认值为99。 - 6
- 可选:物理功能及其所有虚拟功能的最大传输单元(MTU)。最大 MTU 值可能因不同的网络接口控制器(NIC)型号而有所不同。重要
如果要在默认网络接口上创建虚拟功能,请确保将 MTU 设置为与集群 MTU 匹配的值。
如果要修改单个虚拟功能的 MTU,同时将功能分配给 pod,请将 MTU 值留在 SR-IOV 网络节点策略中。否则,SR-IOV Network Operator 会将虚拟功能的 MTU 恢复到 SR-IOV 网络节点策略中定义的 MTU 值,这可能会触发节点排空。
- 7
- 可选:将
needVhostNet设置为true,以在 pod 中挂载/dev/vhost-net设备。使用挂载的/dev/vhost-net设备及 Data Plane Development Kit (DPDK) 将流量转发到内核网络堆栈。 - 8
- 为 SR-IOV 物理网络设备创建的虚拟功能((VF)的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过
127。 - 9
externallyManaged字段指示 SR-IOV Network Operator 是否管理所有,或只是虚拟功能(VF)的子集。将值设为false时,SR-IOV Network Operator 管理并配置 PF 上的所有 VF。注意当
externalManaged设置为true时,您必须在应用SriovNetworkNodePolicy资源前在物理功能(PF)上手动创建虚拟功能(VF)。如果没有预先创建 VF,SR-IOV Network Operator 的 Webhook 将阻止策略请求。当
externallyManaged设为false时,SR-IOV Network Operator 会自动创建和管理 VF,包括重置 VF (如果需要)。要在主机系统上使用 VF,您必须通过 NMState 创建它们,并将
externallyManaged设置为true。在这个模式中,SR-IOV Network Operator 不会修改 PF 或手动管理的 VF,策略nicSelector字段中明确定义的 VF 除外。但是,SR-IOV Network Operator 继续管理用作 pod 二级接口的 VF。- 10
- NIC 选择器标识此资源应用到的设备。您不必为所有参数指定值。建议您足够精确地识别网络设备以避免意外选择设备。
如果指定了
rootDevices,则必须同时为vendor、deviceID或pfNames指定一个值。如果同时指定了pfNames和rootDevices,请确保它们引用同一设备。如果您为netFilter指定了一个值,那么您不需要指定任何其他参数,因为网络 ID 是唯一的。 - 11
- 可选: SR-IOV 网络设备厂商的十六进制厂商代码。允许的值只能是
8086(Intel)和15b3(Mellanox)。 - 12
- 可选: SR-IOV 网络设备的十六进制设备标识符。例如,
101b是 Mellanox ConnectX-6 设备的设备 ID。 - 13
- 可选:资源需要应用到的一个或多个物理功能(PF)名称的数组。
- 14
- 可选:资源需要应用到的一个或多个 PCI 总线地址的数组。例如
0000:02:00.1。 - 15
- 可选:特定平台的网络过滤器。唯一支持的平台是 Red Hat OpenStack Platform(RHOSP)。可接受的值具有以下格式:
openstack/NetworkID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。将xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx替换为来自/var/config/openstack/latest/network_data.json元数据文件的值。此过滤器确保 VF 与特定的 OpenStack 网络关联。Operator 使用此过滤器根据 OpenStack 平台提供的元数据将 VF 映射到适当的网络。 - 16
- 可选:为从此资源创建的 VF 配置的驱动程序。允许的值只能是
netdevice和vfio-pci。默认值为netdevice。对于裸机节点上的 DPDK 模式的 Mellanox NIC,请使用
netdevice驱动程序类型,并将isRdma设置为true。 - 17
- 可选:配置是否启用远程直接访问 (RDMA) 模式。默认值为
false。如果
isRdma参数设为true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。将
isRdma设置为true,并将needVhostNet设置为true以配置 Mellanox NIC 以用于 Fast Datapath DPDK 应用程序。注意对于 intel NIC,您无法将
isRdma参数设置为true。 - 18
- 可选:VF 的链接类型。默认值为
eth(以太网)。在 InfiniBand 中将这个值改为 'ib'。当将
linkType设置为ib时,SR-IOV Network Operator Webhook 会自动将isRdma设置为true。当将linkType设定为ib时,deviceType不应该被设置为vfio-pci。不要为 SriovNetworkNodePolicy 将 linkType 设置为
eth,因为这可能会导致设备插件报告的可用设备数量不正确。 - 19
- 可选: 要启用硬件卸载,您必须将
eSwitchMode字段设置为"switchdev"。有关硬件卸载的更多信息,请参阅"配置硬件卸载"。 - 20
- 可选:要排除将一个 SR-IOV 网络资源的 NUMA 节点广告到拓扑管理器,将值设为
true。默认值为false。
23.4.1.1. SR-IOV 网络节点配置示例 复制链接链接已复制到粘贴板!
以下示例描述了 InfiniBand 设备的配置:
InfiniBand 设备的配置示例
以下示例描述了 RHOSP 虚拟机中的 SR-IOV 网络设备配置:
虚拟机中的 SR-IOV 设备配置示例
23.4.1.2. SR-IOV 设备的虚拟功能 (VF) 分区 复制链接链接已复制到粘贴板!
在某些情况下,您可能想要将同一个物理功能 (PF) 的虚拟功能 (VF) 分成多个资源池。例如: 您可能想要某些 VF 使用默认驱动程序载入,而其他的 VF 负载使用 vfio-pci 驱动程序。在这样的部署中,您可以使用SriovNetworkNodePolicy 自定义资源 (CR) 中的 pfNames 选项器(selector)来为池指定 VF 的范围,其格式为: <pfname>#<first_vf>-<last_vf>。
例如,以下 YAML 显示名为 netpf0 的、带有 VF 2 到 7 的接口的选择器:
pfNames: ["netpf0#2-7"]
pfNames: ["netpf0#2-7"]
-
netpf0是 PF 接口名称。 -
2是包含在范围内的第一个 VF 索引(基于 0)。 -
7是包含在范围内的最后一个 VF 索引(基于 0)。
如果满足以下要求,您可以使用不同的策略 CR 从同一 PF 中选择 VF:
-
选择相同 PF 的不同策略的
numVfs值必须相同。 -
VF 索引范围是从
0到<numVfs>-1之间。例如,如果您有一个策略,它的numVfs被设置为8,则<first_vf>的值不能小于0,<last_vf>的值不能大于7。 - 不同策略中的 VF 范围不得互相重叠。
-
<first_vf>不能大于<last_vf>。
以下示例演示了 SR-IOV 设备的 NIC 分区。
策略 policy-net-1 定义了一个资源池 net-1,其中包含带有默认 VF 驱动的 PF netpf0 的 VF 0 。策略 policy-net-1-dpdk 定义了一个资源池 net-1-dpdk,其中包含带有 vfio VF 驱动程序的 PF netpf0 的 VF 8 到 15。
策略 policy-net-1:
策略 policy-net-1-dpdk:
验证接口是否已成功分区
运行以下命令,确认 SR-IOV 设备的接口分区到虚拟功能(VF)。
ip link show <interface>
$ ip link show <interface>
- 1
- 将
<interface>替换为您在分区为 SR-IOV 设备的 VF 时指定的接口,如ens3f1。
输出示例
23.4.2. 配置 SR-IOV 网络设备 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 把 SriovNetworkNodePolicy.sriovnetwork.openshift.io CRD 添加到 OpenShift Container Platform。您可以通过创建一个 SriovNetworkNodePolicy 自定义资源 (CR) 来配置 SR-IOV 网络设备。
在应用由 SriovNetworkNodePolicy 对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。
它可能需要几分钟时间来应用配置更改。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
- 集群中有足够的可用节点,用于处理从排空节点中驱除的工作负载。
- 您还没有为 SR-IOV 网络设备配置选择任何 control plane 节点。
流程
-
创建一个
SriovNetworkNodePolicy对象,然后在<name>-sriov-node-network.yaml文件中保存 YAML。使用配置的实际名称替换<name>。 -
可选:将 SR-IOV 功能的集群节点标记为
SriovNetworkNodePolicy.Spec.NodeSelector(如果它们还没有标记)。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。 创建
SriovNetworkNodePolicy对象:oc create -f <name>-sriov-node-network.yaml
$ oc create -f <name>-sriov-node-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<name>指定这个配置的名称。在应用配置更新后,
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}'$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.4.2.1. 在 SR-IOV 网络策略更新过程中配置并行节点排空 复制链接链接已复制到粘贴板!
默认情况下,SR-IOV Network Operator 会在每次策略更改前从节点排空工作负载。Operator 一次完成这个操作,一个节点以确保没有工作负载受到重新配置的影响。
在大型集群中,按顺序排空节点可能非常耗时,需要几小时甚至几天。在时间敏感的环境中,您可以在 SriovNetworkPoolConfig 自定义资源 (CR) 中启用并行节点排空,以更快地推出 SR-IOV 网络配置。
要配置并行排空,请使用 SriovNetworkPoolConfig CR 创建节点池。然后,您可以在池中添加节点,并在 Operator 可以并行排空的池中定义最大节点数。使用这个方法,您可以启用并行排空来更快地重新配置,同时确保池中仍有足够的节点来处理任何正在运行的工作负载。
节点只能属于一个 SR-IOV 网络池配置。如果节点不是池的一部分,则会将其添加到虚拟(默认)中,该池配置为仅排空一个节点。
节点可能会在排空过程中重启。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。 - 安装 SR-IOV Network Operator。
- 确保节点具有支持 SR-IOV 的硬件。
流程
创建一个
SriovNetworkPoolConfig资源:创建一个定义
SriovNetworkPoolConfig资源的 YAML 文件:sriov-nw-pool.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetworkPoolConfig资源:oc create -f sriov-nw-pool.yaml
$ oc create -f sriov-nw-pool.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
sriov-test命名空间:oc create namespace sriov-test
$ oc create namespace sriov-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetworkNodePolicy资源:创建一个定义
SriovNetworkNodePolicy资源的 YAML 文件:sriov-node-policy.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetworkNodePolicy资源:oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
SriovNetwork资源:创建一个定义
SriovNetwork资源的 YAML 文件:sriov-network.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetwork资源:oc create -f sriov-network.yaml
$ oc create -f sriov-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看您创建的节点池:
oc get sriovNetworkpoolConfig -n openshift-sriov-network-operator
$ oc get sriovNetworkpoolConfig -n openshift-sriov-network-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE pool-1 67s
NAME AGE pool-1 67s1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,
pool-1包含具有worker角色的所有节点。
要使用上一步中的示例场景演示节点排空过程,请完成以下步骤:
更新
SriovNetworkNodePolicy资源中的虚拟功能数量,以触发集群中的工作负载排空:oc patch SriovNetworkNodePolicy sriov-nic-1 -n openshift-sriov-network-operator --type merge -p '{"spec": {"numVfs": 4}}'$ oc patch SriovNetworkNodePolicy sriov-nic-1 -n openshift-sriov-network-operator --type merge -p '{"spec": {"numVfs": 4}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令监控目标集群上的排空状态:
oc get sriovNetworkNodeState -n openshift-sriov-network-operator
$ oc get sriovNetworkNodeState -n openshift-sriov-network-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 InProgress Drain_Required DrainComplete 3d10h openshift-sriov-network-operator worker-1 InProgress Drain_Required DrainComplete 3d10h
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 InProgress Drain_Required DrainComplete 3d10h openshift-sriov-network-operator worker-1 InProgress Drain_Required DrainComplete 3d10hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当排空过程完成后,
SYNC STATUS变为Succeeded,DESIRED SYNC STATE和CURRENT SYNC STATE值返回到IDLE。输出示例
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 Succeeded Idle Idle 3d10h openshift-sriov-network-operator worker-1 Succeeded Idle Idle 3d10h
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 Succeeded Idle Idle 3d10h openshift-sriov-network-operator worker-1 Succeeded Idle Idle 3d10hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.4.3. SR-IOV 配置故障排除 复制链接链接已复制到粘贴板!
在进行了配置 SR-IOV 网络设备的步骤后,以下部分会处理一些错误条件。
要显示节点状态,请运行以下命令:
oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name>
$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name>
其中: <node_name> 指定带有 SR-IOV 网络设备的节点名称。
错误输出: 无法分配内存
"lastSyncError": "write /sys/bus/pci/devices/0000:3b:00.1/sriov_numvfs: cannot allocate memory"
"lastSyncError": "write /sys/bus/pci/devices/0000:3b:00.1/sriov_numvfs: cannot allocate memory"
当节点表示无法分配内存时,检查以下项目:
- 确认在 BIOS 中为节点启用了全局 SR-IOV 设置。
- 确认在 BIOS 中为该节点启用了 VT-d。
23.4.4. 将 SR-IOV 网络分配给 VRF 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 CNI VRF 插件为 VRF 域分配 SR-IOV 网络接口。
要做到这一点,将 VRF 配置添加到 SriovNetwork 资源的可选 metaPlugins 参数中。
使用 VRF 的应用程序需要绑定到特定设备。通常的用法是在套接字中使用 SO_BINDTODEVICE 选项。SO_BINDTODEVICE 将套接字绑定到在传递接口名称中指定的设备,例如 eth1。要使用 SO_BINDTODEVICE,应用程序必须具有 CAP_NET_RAW 功能。
OpenShift Container Platform pod 不支持通过 ip vrf exec 命令使用 VRF。要使用 VRF,将应用程序直接绑定到 VRF 接口。
23.4.4.1. 使用 CNI VRF 插件创建额外的 SR-IOV 网络附加 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 管理额外网络定义。当您指定要创建的额外 SR-IOV 网络时,SR-IOV Network Operator 会自动创建 NetworkAttachmentDefinition 自定义资源(CR)。
不要编辑 SR-IOV Network Operator 所管理的 NetworkAttachmentDefinition 自定义资源。这样做可能会破坏额外网络上的网络流量。
要使用 CNI VRF 插件创建额外的 SR-IOV 网络附加,请执行以下步骤。
先决条件
- 安装 OpenShift Container Platform CLI(oc)。
- 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform 集群。
流程
为额外 SR-IOV 网络附加创建
SriovNetwork自定义资源 (CR) 并插入metaPlugins配置,如下例所示。将 YAML 保存为文件sriov-network-attachment.yaml。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SriovNetwork资源:oc create -f sriov-network-attachment.yaml
$ oc create -f sriov-network-attachment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 NetworkAttachmentDefinition CR 是否已成功创建
运行以下命令,确认 SR-IOV Network Operator 创建了
NetworkAttachmentDefinitionCR。oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace>替换为您在配置网络附加时指定的命名空间,如additional-sriov-network-1。
输出示例
NAME AGE additional-sriov-network-1 14m
NAME AGE additional-sriov-network-1 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意SR-IOV Network Operator 创建 CR 之前可能会有延迟。
验证额外 SR-IOV 网络附加是否成功
要验证 VRF CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:
- 创建使用 VRF CNI 的 SR-IOV 网络。
- 将网络分配给 pod。
验证 pod 网络附加是否已连接到 SR-IOV 额外网络。远程 shell 到 pod 并运行以下命令:
ip vrf show
$ ip vrf showCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Name Table ----------------------- red 10
Name Table ----------------------- red 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 VRF 接口是从属接口的主接口:
ip link
$ ip linkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
... 5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode ...
... 5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.4.5. 为 NUMA 感知调度排除 SR-IOV 网络拓扑 复制链接链接已复制到粘贴板!
在 NUMA 感知 pod 调度过程中,可以排除将 SR-IOV 网络的 Non-Uniform Memory Access (NUMA) 节点广告到拓扑管理器,以便实现更灵活的 SR-IOV 网络部署。
在某些情况下,为在单个 NUMA 节点上的一个 pod 最大化 CPU 和内存资源是一个优先操作。如果没有为 Topology Manager 提供有关 pod 的 SR-IOV 网络资源的 NUMA 节点的提示,拓扑管理器可能会将 SR-IOV 网络资源和 pod CPU 和内存资源部署到不同的 NUMA 节点。这可能会添加到网络延迟,因为需要在不同 NUMA 节点之间进行数据传输。但是,当工作负载需要最佳 CPU 和内存性能时,这是可以接受的。
例如,有一个计算节点 compute-1,它有两个 NUMA 节点:numa0 和 numa1。启用了 SR-IOV 的 NIC 存在于 numa0 上。可用于 pod 调度的 CPU 仅存在于 numa1 上。通过将 excludeTopology 规格设置为 true,拓扑管理器可将 pod 的 CPU 和内存资源分配给 numa1,并可将同一 pod 的 SR-IOV 网络资源分配给 numa0。只有将 excludeTopology 规格设置为 true 时,才能实现。否则,拓扑管理器会尝试将所有资源放在同一 NUMA 节点上。
23.4.5.1. 排除 NUMA 感知调度的 SR-IOV 网络拓扑 复制链接链接已复制到粘贴板!
要将 SR-IOV 网络资源的 Non-Uniform Memory Access (NUMA)节点排除到拓扑管理器,您可以在 SriovNetworkNodePolicy 自定义资源中配置 excludeTopology 规格。在 NUMA 感知 pod 调度过程中,使用此配置来实现更灵活的 SR-IOV 网络部署。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已将 CPU Manager 策略配置为
static。有关 CPU Manager 的更多信息,请参阅附加资源部分。 -
您已将 Topology Manager 策略配置为
single-numa-node。 - 已安装 SR-IOV Network Operator。
流程
创建
SriovNetworkNodePolicyCR:将以下 YAML 保存到
sriov-network-node-policy.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果多个
SriovNetworkNodePolicy资源都以同一 SR-IOV 网络资源为目标,则SriovNetworkNodePolicy资源必须具有与excludeTopology规格相同的值。否则,冲突策略将被拒绝。运行以下命令来创建
SriovNetworkNodePolicy资源:oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovnetworknodepolicy.sriovnetwork.openshift.io/policy-for-numa-0 created
sriovnetworknodepolicy.sriovnetwork.openshift.io/policy-for-numa-0 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
SriovNetworkCR:将以下 YAML 保存到
sriov-network.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetwork资源:oc create -f sriov-network.yaml
$ oc create -f sriov-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
sriovnetwork.sriovnetwork.openshift.io/sriov-numa-0-network created
sriovnetwork.sriovnetwork.openshift.io/sriov-numa-0-network createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 pod 并从上一步中分配 SR-IOV 网络资源:
将以下 YAML 保存到
sriov-network-pod.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是使用
SriovNetworkNodePolicy资源的SriovNetwork资源的名称。
运行以下命令来创建
Pod资源:oc create -f sriov-network-pod.yaml
$ oc create -f sriov-network-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
pod/example-pod created
pod/example-pod createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,将
<pod_name>替换为 pod 的名称来验证 pod 的状态:oc get pod <pod_name>
$ oc get pod <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45h
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开目标 pod 的 debug 会话,以验证 SR-IOV 网络资源是否已部署到与内存和 CPU 资源不同的节点上。
运行以下命令,使用 pod 打开 debug 会话,将 <pod_name> 替换为目标 pod 名称。
oc debug pod/<pod_name>
$ oc debug pod/<pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/host设为 debug shell 中的根目录。debug pod 从 pod 中的/host中的主机挂载 root 文件系统。将根目录改为/host,您可以从主机文件系统中运行二进制文件:chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看有关 CPU 分配的信息:
lscpu | grep NUMA
$ lscpu | grep NUMACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /proc/self/status | grep Cpus
$ cat /proc/self/status | grep CpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Cpus_allowed: aa Cpus_allowed_list: 1,3,5,7
Cpus_allowed: aa Cpus_allowed_list: 1,3,5,7Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /sys/class/net/net1/device/numa_node
$ cat /sys/class/net/net1/device/numa_nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
0
0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,CPU 1,3,5 和 7 分配给
NUMA node1,但 SR-IOV 网络资源可以使用NUMA node0中的 NIC。
如果 excludeTopology 规格被设置为 True,则同一 NUMA 节点上可能存在所需资源。