硬件网络
在 OpenShift Container Platform 中配置特定于硬件的网络功能
摘要
第 1 章 关于单根 I/O 虚拟化(SR-IOV)硬件网络 复制链接链接已复制到粘贴板!
Single Root I/O 虚拟化 (SR-IOV) 规范是针对一类 PCI 设备分配的标准,可与多个 pod 共享单个设备。
您可以使用 SR-IOV Operator 在集群中配置单一根 I/O 虚拟化(SR-IOV)设备。
通过 SR-IOV,您可以将主机节点上识别为物理功能 (PF) 的兼容网络设备分段为多个虚拟功能 (VF)。VF 和其它网络设备一样使用。该设备的 SR-IOV 网络设备驱动程序决定了如何公开容器中的 VF:
-
netdevice
驱动程序: 容器netns
中的常规内核网络设备 -
vfio-pci
驱动程序: 挂载到容器中的字符设备
对于需要高带宽或低延迟的应用程序,您可以在裸机或 Red Hat OpenStack Platform(RHOSP)基础架构上安装 OpenShift Container Platform 集群上的额外网络使用 SR-IOV 网络设备。
您可以为 SR-IOV 网络配置多网络策略。对这个功能的支持是技术预览,SR-IOV 额外网络只支持内核 NIC。它们不支持 Data Plane Development Kit (DPDK) 应用程序。
与 SR-IOV 网络相比,在 SR-IOV 网络中创建多网络策略可能无法为应用程序提供相同的性能。
SR-IOV 网络的多网络策略只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以使用以下命令在节点上启用 SR-IOV:
oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
$ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
其他资源
1.1. 负责管理 SR-IOV 网络设备的组件 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 会创建和管理 SR-IOV 堆栈的组件。Operator 执行以下功能:
- 编配 SR-IOV 网络设备的发现和管理
-
为 SR-IOV Container Network Interface(CNI)生成
NetworkAttachmentDefinition
自定义资源 - 创建和更新 SR-IOV 网络设备插件的配置
-
创建节点特定的
SriovNetworkNodeState
自定义资源 -
更新每个
SriovNetworkNodeState
自定义资源中的spec.interfaces
字段
Operator 置备以下组件:
- SR-IOV 网络配置守护进程
- SR-IOV Network Operator 启动时部署在 worker 节点上的守护进程集。守护进程负责在集群中发现和初始化 SR-IOV 网络设备。
- SR-IOV Network Operator Webhook
- 这是动态准入控制器 Webhook,用于验证 Operator 自定义资源,并为未设置的字段设置适当的默认值。
- SR-IOV Network Resources Injector(网络资源注入器)
-
这是一个动态准入控制器 Webhook,它提供通过请求和限制为自定义网络资源(如 SR-IOV VF)应用 Kubernetes pod 规格的功能。SR-IOV 网络资源注入器只会将
resource
字段添加到 pod 中的第一个容器。 - 网络SR-IOV 网络设备插件
- 这个设备插件用于发现、公告并分配 SR-IOV 网络虚拟功能 (VF) 资源。在 Kubernetes 中使用设备插件能够利用有限的资源,这些资源通常为于物理设备中。设备插件可以使 Kubernetes 调度程序了解资源可用性,因此调度程序可以在具有足够资源的节点上调度 pod。
- SR-IOV CNI 插件
- SR-IOV CNI 插件会附加从 SR-IOV 网络设备插件中直接分配给 pod 的 VF 接口。
- SR-IOV InfiniBand CNI 插件
- 附加从 SR-IOV 网络设备插件中直接分配给 pod 的 InfiniBand(IB)VF 接口的 CNI 插件。
SR-IOV Network resources injector 和 SR-IOV Operator Webhook 会被默认启用,可通过编辑 default
SriovOperatorConfig
CR 来禁用。禁用 SR-IOV Network Operator Admission Controller Webhook 时要小心。您可以在特定情况下禁用 webhook,如故障排除,或者想要使用不支持的设备。
1.1.1. 支持的平台 复制链接链接已复制到粘贴板!
在以下平台上支持 SR-IOV Network Operator:
- 裸机
- Red Hat OpenStack Platform (RHOSP)
1.1.2. 支持的设备 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持以下网络接口控制器:
制造商 | model | 供应商 ID | 设备 ID |
---|---|---|---|
Broadcom | BCM57414 | 14e4 | 16d7 |
Broadcom | BCM57508 | 14e4 | 1750 |
Broadcom | BCM57504 | 14e4 | 1751 |
Intel | X710 | 8086 | 1572 |
Intel | X710 Backplane | 8086 | 1581 |
Intel | X710 基本 T | 8086 | 15ff |
Intel | XL710 | 8086 | 1583 |
Intel | XXV710 | 8086 | 158b |
Intel | E810-CQDA2 | 8086 | 1592 |
Intel | E810-2CQDA2 | 8086 | 1592 |
Intel | E810-XXVDA2 | 8086 | 159b |
Intel | E810-XXVDA4 | 8086 | 1593 |
Intel | E810-XXVDA4T | 8086 | 1593 |
Intel | E810-XXV Backplane | 8086 | 1599 |
Intel | E823L Backplane | 8086 | 124c |
Intel | E823L SFP | 8086 | 124d |
Intel | E825-C Backplane | 8086 | 579c |
Intel | E825-C QSFP | 8086 | 579d |
Intel | E825-C SFP | 8086 | 579e |
Marvell | OCTEON Fusion CNF105XX | 177d | ba00 |
Marvell | OCTEON10 CN10XXX | 177d | b900 |
Mellanox | MT27700 系列 [ConnectX-4] | 15b3 | 1013 |
Mellanox | MT27710 系列 [ConnectX-4 Lx] | 15b3 | 1015 |
Mellanox | MT27800 系列 [ConnectX-5] | 15b3 | 1017 |
Mellanox | MT28880 系列 [ConnectX-5 Ex] | 15b3 | 1019 |
Mellanox | MT28908 系列 [ConnectX-6] | 15b3 | 101b |
Mellanox | MT2892 Family [ConnectX‑6 Dx] | 15b3 | 101d |
Mellanox | MT2894 Family [ConnectX‑6 Lx] | 15b3 | 101f |
Mellanox | Mellanox MT2910 系列 [ConnectX-7] | 15b3 | 1021 |
Mellanox | ConnectX-6 NIC 模式中的 MT42822 BlueField-2 | 15b3 | a2d6 |
Pensando [1] | 用于 ionic 驱动程序的 DSC-25 双端口 25G 分布式服务卡 | 0x1dd8 | 0x1002 |
Pensando [1] | 用于 ionic 驱动程序的 DSC-100 双端口 100G 分布式服务卡 | 0x1dd8 | 0x1003 |
Silicom | STS 系列 | 8086 | 1591 |
- 支持 OpenShift SR-IOV,但在使用 SR-IOV 时,您必须使用 SR-IOV CNI 配置文件设置静态的虚拟功能(VF)介质访问控制(MAC)地址。
有关支持的卡和兼容的 OpenShift Container Platform 版本的最新列表,请参阅 Openshift Single Root I/O Virtualization(SR-IOV)和 PTP 硬件网络支持列表。
1.3. 后续步骤 复制链接链接已复制到粘贴板!
第 2 章 配置 SR-IOV 网络设备 复制链接链接已复制到粘贴板!
您可以在集群中配置单一根 I/O 虚拟化(SR-IOV)设备。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
2.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
。
2.1.1. SR-IOV 网络节点配置示例 复制链接链接已复制到粘贴板!
以下示例描述了 InfiniBand 设备的配置:
InfiniBand 设备的配置示例
以下示例描述了 RHOSP 虚拟机中的 SR-IOV 网络设备配置:
虚拟机中的 SR-IOV 设备配置示例
2.1.2. 自动发现 SR-IOV 网络设备 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 将搜索集群以获取 worker 节点上的 SR-IOV 功能网络设备。Operator 会为每个提供兼容 SR-IOV 网络设备的 worker 节点创建并更新一个 SriovNetworkNodeState 自定义资源 (CR) 。
为 CR 分配了与 worker 节点相同的名称。status.interfaces
列表提供有关节点上网络设备的信息。
不要修改 SriovNetworkNodeState
对象。Operator 会自动创建和管理这些资源。
2.1.2.1. SriovNetworkNodeState 对象示例 复制链接链接已复制到粘贴板!
以下 YAML 是由 SR-IOV Network Operator 创建的 SriovNetworkNodeState
对象的示例:
一 个 SriovNetworkNodeState 对象
2.1.3. 启用安全引导时,在 Mellanox 卡中配置 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 支持一个选项来跳过 Mellanox 设备的固件配置。这个选项允许您在系统启用了安全引导时使用 SR-IOV Network Operator 创建虚拟功能。在切换系统以安全引导前,您必须手动配置并分配固件中的虚拟功能数量。
固件中的虚拟功能数量是策略中您可以请求的最大虚拟功能数。
流程
当使用 sriov-config 守护进程时,当系统没有安全引导时,配置虚拟功能(VF):
mstconfig -d -0001:b1:00.1 set SRIOV_EN=1 NUM_OF_VFS=16
$ mstconfig -d -0001:b1:00.1 set SRIOV_EN=1 NUM_OF_VFS=16
1 2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过禁用 Mellanox 插件来配置 SR-IOV Network Operator。请参阅以下
SriovOperatorConfig
示例配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启系统以启用虚拟功能和配置设置。
运行以下命令在重启系统后检查虚拟功能(VF):
oc -n openshift-sriov-network-operator get sriovnetworknodestate.sriovnetwork.openshift.io worker-0 -oyaml
$ oc -n openshift-sriov-network-operator get sriovnetworknodestate.sriovnetwork.openshift.io worker-0 -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
totalvfs
值与流程前面在mstconfig
命令中使用的数字相同。
启用安全引导以防止未经授权的操作系统和恶意软件在设备的引导过程中加载。
使用 BIOS 启用安全引导(基本输入/输出系统)。
Secure Boot: Enabled Secure Boot Policy: Standard Secure Boot Mode: Mode Deployed
Secure Boot: Enabled Secure Boot Policy: Standard Secure Boot Mode: Mode Deployed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启系统。
2.1.4. 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
。
输出示例
2.1.5. 在 OpenStack 上使用 SR-IOV 的集群测试 pod 模板 复制链接链接已复制到粘贴板!
以下 testpmd
pod 演示了使用巨页、保留 CPU 和 SR-IOV 端口创建容器。
testpmd
pod 示例
- 1
- 本例假定性能配置集的名称为
cnf-performance profile
。
2.1.6. 在 OpenStack 上使用 OVS 硬件卸载的集群测试 pod 模板 复制链接链接已复制到粘贴板!
以下 testpmd
pod 在 Red Hat OpenStack Platform (RHOSP) 上演示了 Open vSwitch (OVS) 硬件卸载。
testpmd
pod 示例
- 1
- 如果您的性能配置集没有命名为
cnf-performance profile
,请将该字符串替换为正确的性能配置集名称。
2.1.7. Downward API 的巨页资源注入 复制链接链接已复制到粘贴板!
当 pod 规格包含巨页的资源请求或限制时,Network Resources Injector 会自动在 pod 规格中添加 Downward API 字段,以便为容器提供巨页信息。
Network Resources Injector 添加一个名为 podnetinfo
的卷,并挂载到 pod 中的每个容器的 /etc/podnetinfo
。卷使用 Downward API,并包含一个用于大页面请求和限制的文件。文件命名规则如下:
-
/etc/podnetinfo/hugepages_1G_request_<container-name>
-
/etc/podnetinfo/hugepages_1G_limit_<container-name>
-
/etc/podnetinfo/hugepages_2M_request_<container-name>
-
/etc/podnetinfo/hugepages_2M_limit_<container-name>
上一个列表中指定的路径与 app-netutil
库兼容。默认情况下,该库配置为搜索 /etc/podnetinfo
目录中的资源信息。如果您选择自己手动指定 Downward API 路径项目,app-netutil
库除上一个列表中的路径外还会搜索以下路径。
-
/etc/podnetinfo/hugepages_request
-
/etc/podnetinfo/hugepages_limit
-
/etc/podnetinfo/hugepages_1G_request
-
/etc/podnetinfo/hugepages_1G_limit
-
/etc/podnetinfo/hugepages_2M_request
-
/etc/podnetinfo/hugepages_2M_limit
与 Network Resources Injector 可以创建的路径一样,以上列表中的路径可以选择以一个 _<container-name>
后缀结尾。
2.2. 配置 SR-IOV 网络设备 复制链接链接已复制到粘贴板!
SR-IOV Network Operator 把 SriovNetworkNodePolicy.sriovnetwork.openshift.io
CRD 添加到 OpenShift Container Platform。您可以通过创建一个 SriovNetworkNodePolicy 自定义资源 (CR) 来配置 SR-IOV 网络设备。
在应用由 SriovNetworkNodePolicy
对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。仅在以下情况下重启:
-
使用 Mellanox NIC (
mlx5
驱动程序) 时,每次当在一个物理功能(PF)中的虚拟功能 (VF) 数量增加时,节点都会重启。 -
使用 Intel NIC 时,只有在内核参数不包含
intel_iommu=on
和iommu=pt
时,才会重启。
它可能需要几分钟时间来应用配置更改。
先决条件
-
已安装 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.yaml
Copy 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
2.3. 创建与 SR-IOV pod 兼容的非统一内存访问 (NUMA) 复制链接链接已复制到粘贴板!
您可以通过限制 SR-IOV 和从相同 NUMA 节点分配的 CPU 资源,使用 restricted
或 single-numa-node
Topology Manager 来创建与 SR-IOV pod 兼容的 NUMA。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您已将 CPU Manager 策略配置为
static
。有关 CPU Manager 的详情请参考 "Additional resources" 部分。 您已将 Topology Manager 策略配置为
single-numa-node
。注意当
single-numa-node
无法满足请求时,您可以将拓扑管理器策略配置为restricted
。有关更灵活的 SR-IOV 网络资源调度,请参阅附加资源部分中的 NUMA 感知调度过程中排除 SR-IOV 网络拓扑。
流程
创建以下 SR-IOV pod 规格,然后在
<name>-sriov-pod.yaml
文件中保存 YAML。将<name>
替换为这个 pod 的名称。以下示例显示了 SR-IOV pod 规格:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 SR-IOV pod 示例:
oc create -f <filename>
$ oc create -f <filename>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<filename>
替换为您在上一步中创建的文件的名称。
确认
sample-pod
配置为带有保证 QoS。oc describe pod sample-pod
$ oc describe pod sample-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
sample-pod
被分配了独有的 CPU。oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpus
$ oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认为
sample-pod
分配的 SR-IOV 设备和 CPU 位于相同的 NUMA 节点上。oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpus
$ oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 为 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 节点上。
2.5. 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。
2.6. 后续步骤 复制链接链接已复制到粘贴板!
第 3 章 配置 SR-IOV 以太网网络附加 复制链接链接已复制到粘贴板!
您可以为集群中的单根 I/O 虚拟化(SR-IOV)设备配置以太网网络附加。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
3.1. 以太网设备配置对象 复制链接链接已复制到粘贴板!
您可以通过定义 SriovNetwork
对象来配置以太网网络设备。
以下 YAML 描述了 SriovNetwork
对象:
- 1
- 对象的名称。SR-IOV Network Operator 创建一个名称相同的
NetworkAttachmentDefinition
对象。 - 2
- 安装 SR-IOV Network Operator 的命名空间。
- 3
- 用于为这个额外网络定义 SR-IOV 硬件的
SriovNetworkNodePolicy
对象中的spec.resourceName
参数的值。 - 4
SriovNetwork
对象的目标命名空间。只有目标命名空间中的 pod 可以附加到额外网络。- 5
- 可选:额外网络的虚拟 LAN(VLAN)ID。它需要是一个从
0
到4095
范围内的一个整数值。默认值为0
。 - 6
- 可选:VF 的 spoof 检查模式。允许的值是字符串
"on"
和"off"
。重要指定的值必须由引号包括,否则 SR-IOV Network Operator 将拒绝对象。
- 7
- 为 IPAM CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
- 8
- 可选:虚拟功能(VF)的链接状态。允许的值是
enable
、disable
和auto
。 - 9
- 可选:VF 的最大传输率(以 Mbps 为单位)。
- 10
- 可选:VF 的最低传输率(以 Mbps 为单位)。这个值必须小于或等于最大传输率。注意
Intel NIC 不支持
minTxRate
参数。如需更多信息,请参阅 BZ#1772847。 - 11
- 可选:VF 的 IEEE 802.1p 优先级级别。默认值为
0
。 - 12
- 可选:VF 的信任模式。允许的值是字符串
"on"
和"off"
。重要您必须在引号中包含指定的值,或者 SR-IOV Network Operator 拒绝对象。
- 13
- 可选:为这个额外网络配置功能。您可以指定
'{ "ips": true }'
来启用 IP 地址支持,或指定'{ "mac": true }'
来启用 MAC 地址支持。
3.1.1. 为动态分配双栈 IP 地址创建配置 复制链接链接已复制到粘贴板!
双栈 IP 地址分配可使用 ipRanges
参数进行配置:
- IPv4 地址
- IPv6 地址
- 多个 IP 地址分配
流程
-
将
type
设置为whereabouts
。 使用
ipRanges
来分配 IP 地址,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将网络附加到 pod。如需更多信息,请参阅"将 pod 添加到二级网络"。
- 验证是否分配了所有 IP 地址。
运行以下命令,以确保 IP 地址被分配为元数据。
$ oc exec -it mypod -- ip a
$ oc exec -it mypod -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2. 配置网络附加的 IP 地址分配 复制链接链接已复制到粘贴板!
对于二级网络,可以使用 IP 地址管理(IPAM) CNI 插件来分配 IP 地址,该插件支持各种分配方法,包括动态主机配置协议(DHCP)和静态分配。
负责动态分配 IP 地址的 DHCP IPAM CNI 插件与两个不同的组件一起运行:
- CNI 插件 :负责与 Kubernetes 网络堆栈集成,以请求和释放 IP 地址。
- DHCP IPAM CNI 守护进程 :用于 DHCP 事件的监听程序,该事件与环境中的现有 DHCP 服务器协调,以处理 IP 地址分配请求。这个守护进程并不是 DHCP 服务器本身。
对于在 IPAM 配置中需要 type: dhcp
的网络,请确保以下内容:
- DHCP 服务器可用并在环境中运行。DHCP 服务器是集群外部的,应该成为客户的现有网络基础架构的一部分。
- DHCP 服务器被正确配置为为节点提供 IP 地址。
如果环境中 DHCP 服务器不可用,建议使用 Whereabouts IPAM CNI 插件。Whereabouts CNI 提供类似的 IP 地址管理功能,而无需外部 DHCP 服务器。
当没有外部 DHCP 服务器或首选静态 IP 地址管理时,请使用 Whereabouts CNI 插件。Whereabouts 插件包含一个协调器守护进程来管理过时的 IP 地址分配。
在整个容器生命周期中,必须定期更新 DHCP 租期,因此需要单独的守护进程 DHCP IPAM CNI 守护进程。要部署 DHCP IPAM CNI 守护进程,请修改 Cluster Network Operator (CNO)配置,以触发此守护进程的部署,作为二级网络设置的一部分。
3.1.2.1. 静态 IP 地址分配配置 复制链接链接已复制到粘贴板!
下表描述了静态 IP 地址分配的配置:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。值必须是 |
|
| 指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。 |
|
| 指定要在 pod 中配置的路由的一组对象。 |
|
| 可选:指定 DNS 配置的对象数组。 |
address
数组需要带有以下字段的对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
您指定的 IP 地址和网络前缀。例如:如果您指定 |
|
| 出口网络流量要路由到的默认网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
CIDR 格式的 IP 地址范围,如 |
|
| 网络流量路由的网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
| 用于发送 DNS 查询的一个或多个 IP 地址的数组。 |
|
|
要附加到主机名的默认域。例如,如果将域设置为 |
|
|
在 DNS 查找查询过程中,附加到非限定主机名(如 |
静态 IP 地址分配配置示例
3.1.2.2. 动态 IP 地址(DHCP)分配配置 复制链接链接已复制到粘贴板!
pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。
对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。
要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:
shim 网络附加定义示例
下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要值 |
以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。
动态 IP 地址(DHCP)分配配置示例
{ "ipam": { "type": "dhcp" } }
{
"ipam": {
"type": "dhcp"
}
}
3.1.2.3. 使用 Whereabouts 进行动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给二级网络。
Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition
CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。
3.1.2.3.1. 动态 IP 地址配置参数 复制链接链接已复制到粘贴板!
下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要 |
|
| CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。 |
|
| 可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。 |
|
| 可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。 |
3.1.2.3.2. 使用 Whereabouts 排除 IP 地址范围的动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
以下示例显示了使用 Whereabouts 的 NAD 文件中的动态地址分配配置:
Whereabouts 动态 IP 地址分配排除特定的 IP 地址范围
3.1.2.3.3. 使用 Whereabouts 带有重叠 IP 地址范围的动态 IP 地址分配 复制链接链接已复制到粘贴板!
以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。
NetworkAttachmentDefinition 1
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 2
的network_name
匹配。
NetworkAttachmentDefinition 2
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 1
的network_name
匹配。
3.2. 配置 SR-IOV 额外网络 复制链接链接已复制到粘贴板!
您可以通过创建一个 SriovNetwork
对象来配置使用 SR-IOV 硬件的额外网络。创建 SriovNetwork
对象时,SR-IOV Network Operator 会自动创建一个 NetworkAttachmentDefinition
对象。
如果一个 SriovNetwork
对象已被附加到状态为 running
的 pod,则不要修改或删除它。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个
SriovNetwork
对象,然后在<name>.yaml
文件中保存 YAML,其中<name>
是这个额外网络的名称。对象规格可能类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<name>
指定额外网络的名称。可选: 要确认与您在上一步中创建的
SriovNetwork
对象关联的NetworkAttachmentDefinition
对象是否存在,请输入以下命令。将<namespace>
替换为您在SriovNetwork
对象中指定的 networkNamespace。oc get net-attach-def -n <namespace>
$ oc get net-attach-def -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 将 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 接口。
3.3.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
。SriovNetwork
自定义资源(CR)示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SriovNetwork
资源:oc create -f sriov-network-attachment.yaml
$ oc create -f sriov-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 NetworkAttachmentDefinition
CR 是否已成功创建
运行以下命令,确认 SR-IOV Network Operator 创建了
NetworkAttachmentDefinition
CR。预期输出显示 NAD CR 的名称和创建年龄(以分钟为单位)。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
。
注意SR-IOV Network Operator 创建 CR 之前可能会有延迟。
验证额外 SR-IOV 网络附加是否成功
要验证 VRF CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:
- 创建使用 VRF CNI 的 SR-IOV 网络。
- 将网络分配给 pod。
验证 pod 网络附加是否已连接到 SR-IOV 额外网络。远程 shell 到 pod 并运行以下命令:预期输出显示 VRF 接口的名称及其在路由表中的唯一 ID。
ip vrf show
$ ip vrf show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令确认 VRF 接口是二级接口的
主
接口:ip link
$ ip link
Copy 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
3.4. 基于以太网的 SR-IOV 附加的运行时配置 复制链接链接已复制到粘贴板!
将 pod 附加到额外网络时,您可以指定运行时配置来为 pod 进行特定的自定义。例如,,您可以请求特定的 MAC 硬件地址。
您可以通过在 pod 规格中设置注解来指定运行时配置。注解键是 k8s.v1.cni.cncf.io/network
,它接受一个 JSON 对象来描述运行时配置。
以下 JSON 描述了基于以太网的 SR-IOV 网络附加的运行时配置选项。
运行时配置示例
3.5. 将 pod 添加到二级网络 复制链接链接已复制到粘贴板!
您可以将 pod 添加到二级网络。pod 继续通过默认网络发送与集群相关的普通网络流量。
创建 pod 时,二级网络会附加到 pod。但是,如果 pod 已存在,则无法将二级网络附加到其中。
pod 必须与二级网络位于同一个命名空间中。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 登录到集群。
流程
为
Pod
对象添加注解。只能使用以下注解格式之一:要在不自定义的情况下附加二级网络,请使用以下格式添加注解。将
<network>
替换为要与 pod 关联的二级网络的名称:metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 要指定多个二级网络,请使用逗号分隔每个网络。逗号之间不可包括空格。如果您多次指定相同的二级网络,则该 pod 会将多个网络接口附加到该网络。
要通过自定义来附加二级网络,请添加具有以下格式的注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建 pod。将
<name>
替换为 pod 的名称。oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要确认
Pod
CR 中是否存在注解,请输入以下命令将<name>
替换为 pod 的名称。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,
example-pod
pod 附加到net1
二级网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-status
参数是对象的 JSON 数组。每个对象描述附加到 pod 的二级网络的状态。注解值保存为纯文本值。
3.5.1. 向 pod 公开 vfio-pci SR-IOV 设备的 MTU 复制链接链接已复制到粘贴板!
将 pod 添加到额外网络后,您可以检查 MTU 可供 SR-IOV 网络使用。
流程
运行以下命令,检查 pod 注解是否包含 MTU:
oc describe pod example-pod
$ oc describe pod example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 pod 中的
/etc/podnetinfo/
中是否有 MTU:oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
$ oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. 在 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
sriov-test
命名空间:oc create namespace sriov-test
$ oc create namespace sriov-test
Copy 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.yaml
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看您创建的节点池:
oc get sriovNetworkpoolConfig -n openshift-sriov-network-operator
$ oc get sriovNetworkpoolConfig -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE pool-1 67s
NAME AGE pool-1 67s
1 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-operator
Copy 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 3d10h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当排空过程完成后,
SYNC STATUS
变为Succeeded
,DESIRED SYNC STATE
和CURRENT SYNC STATE
值返回到IDLE
。
3.7. 排除 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。
流程
创建
SriovNetworkNodePolicy
CR:将以下 YAML 保存到
sriov-network-node-policy.yaml
文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果多个
SriovNetworkNodePolicy
资源都以同一 SR-IOV 网络资源为目标,则SriovNetworkNodePolicy
资源必须具有与excludeTopology
规格相同的值。否则,冲突策略将被拒绝。运行以下命令来创建
SriovNetworkNodePolicy
资源。成功输出列出了SriovNetworkNodePolicy
资源的名称以及创建
的状态。oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
SriovNetwork
CR:将以下 YAML 保存到
sriov-network.yaml
文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetwork
资源。成功输出列出了SriovNetwork
资源的名称以及创建
的状态。oc create -f sriov-network.yaml
$ oc create -f sriov-network.yaml
Copy 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
资源。预期输出显示Pod
资源的名称以及创建
的状态。oc create -f sriov-network-pod.yaml
$ oc create -f sriov-network-pod.yaml
Copy 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 45h
Copy 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看有关 CPU 分配的信息:
lscpu | grep NUMA
$ lscpu | grep NUMA
Copy 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 Cpus
Copy 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,7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /sys/class/net/net1/device/numa_node
$ cat /sys/class/net/net1/device/numa_node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
0
0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,CPU 1,3,5 和 7 分配给
NUMA node1
,但 SR-IOV 网络资源可以使用NUMA node0
中的 NIC。
如果 excludeTopology
规格被设置为 True
,则同一 NUMA 节点上可能存在所需资源。
第 4 章 配置 SR-IOV InfiniBand 网络附加 复制链接链接已复制到粘贴板!
您可以为集群中的单根 I/O 虚拟化(SR-IOV)设备配置 InfiniBand(IB)网络附加。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
4.1. Infiniband 设备配置对象 复制链接链接已复制到粘贴板!
您可以通过定义 SriovIBNetwork
对象来配置 InfiniBand(IB)网络设备。
以下 YAML 描述了 SriovIBNetwork
对象:
- 1
- 对象的名称。SR-IOV Network Operator 创建一个名称相同的
NetworkAttachmentDefinition
对象。 - 2
- 安装 SR-IOV Operator 的命名空间。
- 3
- 用于为这个额外网络定义 SR-IOV 硬件的
SriovNetworkNodePolicy
对象中的spec.resourceName
参数的值。 - 4
SriovIBNetwork
对象的目标命名空间。只有目标命名空间中的 pod 可以附加到网络设备。- 5
- 可选:将 IPAM CNI 插件配置为 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
- 6
- 可选:虚拟功能(VF)的链接状态。允许的值是
enable
、disable
和auto
。 - 7
- 可选:为此网络配置功能。您可以指定
'{ "ips": true }'
来启用 IP 地址支持,或'{ "infinibandGUID": true }'
来启用 IB Global Unique Identifier (GUID)支持。
4.1.1. 为动态分配双栈 IP 地址创建配置 复制链接链接已复制到粘贴板!
双栈 IP 地址分配可使用 ipRanges
参数进行配置:
- IPv4 地址
- IPv6 地址
- 多个 IP 地址分配
流程
-
将
type
设置为whereabouts
。 使用
ipRanges
来分配 IP 地址,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将网络附加到 pod。如需更多信息,请参阅"将 pod 添加到二级网络"。
- 验证是否分配了所有 IP 地址。
运行以下命令,以确保 IP 地址被分配为元数据。
$ oc exec -it mypod -- ip a
$ oc exec -it mypod -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.2. 配置网络附加的 IP 地址分配 复制链接链接已复制到粘贴板!
对于二级网络,可以使用 IP 地址管理(IPAM) CNI 插件来分配 IP 地址,该插件支持各种分配方法,包括动态主机配置协议(DHCP)和静态分配。
负责动态分配 IP 地址的 DHCP IPAM CNI 插件与两个不同的组件一起运行:
- CNI 插件 :负责与 Kubernetes 网络堆栈集成,以请求和释放 IP 地址。
- DHCP IPAM CNI 守护进程 :用于 DHCP 事件的监听程序,该事件与环境中的现有 DHCP 服务器协调,以处理 IP 地址分配请求。这个守护进程并不是 DHCP 服务器本身。
对于在 IPAM 配置中需要 type: dhcp
的网络,请确保以下内容:
- DHCP 服务器可用并在环境中运行。DHCP 服务器是集群外部的,应该成为客户的现有网络基础架构的一部分。
- DHCP 服务器被正确配置为为节点提供 IP 地址。
如果环境中 DHCP 服务器不可用,建议使用 Whereabouts IPAM CNI 插件。Whereabouts CNI 提供类似的 IP 地址管理功能,而无需外部 DHCP 服务器。
当没有外部 DHCP 服务器或首选静态 IP 地址管理时,请使用 Whereabouts CNI 插件。Whereabouts 插件包含一个协调器守护进程来管理过时的 IP 地址分配。
在整个容器生命周期中,必须定期更新 DHCP 租期,因此需要单独的守护进程 DHCP IPAM CNI 守护进程。要部署 DHCP IPAM CNI 守护进程,请修改 Cluster Network Operator (CNO)配置,以触发此守护进程的部署,作为二级网络设置的一部分。
4.1.2.1. 静态 IP 地址分配配置 复制链接链接已复制到粘贴板!
下表描述了静态 IP 地址分配的配置:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。值必须是 |
|
| 指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。 |
|
| 指定要在 pod 中配置的路由的一组对象。 |
|
| 可选:指定 DNS 配置的对象数组。 |
address
数组需要带有以下字段的对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
您指定的 IP 地址和网络前缀。例如:如果您指定 |
|
| 出口网络流量要路由到的默认网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
CIDR 格式的 IP 地址范围,如 |
|
| 网络流量路由的网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
| 用于发送 DNS 查询的一个或多个 IP 地址的数组。 |
|
|
要附加到主机名的默认域。例如,如果将域设置为 |
|
|
在 DNS 查找查询过程中,附加到非限定主机名(如 |
静态 IP 地址分配配置示例
4.1.2.2. 动态 IP 地址(DHCP)分配配置 复制链接链接已复制到粘贴板!
pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。
对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。
要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:
shim 网络附加定义示例
下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要值 |
以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。
动态 IP 地址(DHCP)分配配置示例
{ "ipam": { "type": "dhcp" } }
{
"ipam": {
"type": "dhcp"
}
}
4.1.3. 使用 Whereabouts 进行动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给二级网络。
Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition
CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。
4.1.3.1. 动态 IP 地址配置参数 复制链接链接已复制到粘贴板!
下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要 |
|
| CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。 |
|
| 可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。 |
|
| 可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。 |
4.1.3.2. 使用 Whereabouts 排除 IP 地址范围的动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
以下示例显示了使用 Whereabouts 的 NAD 文件中的动态地址分配配置:
Whereabouts 动态 IP 地址分配排除特定的 IP 地址范围
4.1.3.3. 使用 Whereabouts 带有重叠 IP 地址范围的动态 IP 地址分配 复制链接链接已复制到粘贴板!
以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。
NetworkAttachmentDefinition 1
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 2
的network_name
匹配。
NetworkAttachmentDefinition 2
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 1
的network_name
匹配。
4.2. 配置 SR-IOV 额外网络 复制链接链接已复制到粘贴板!
您可以通过创建一个 SriovIBNetwork
对象来配置使用 SR-IOV 硬件的额外网络。创建 SriovIBNetwork
对象时,SR-IOV Network Operator 会自动创建一个 NetworkAttachmentDefinition
对象。
如果一个 SriovIBNetwork
对象已被附加到状态为 running
的 pod,则不要修改或删除它。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个
SriovIBNetwork
对象,然后在<name>.yaml
文件中保存 YAML,其中<name>
是这个额外网络的名称。对象规格可能类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<name>
指定额外网络的名称。可选: 要确认与您在上一步中创建的
SriovIBNetwork
对象关联的NetworkAttachmentDefinition
对象是否存在,请输入以下命令。将<namespace>
替换为您在SriovIBNetwork
对象中指定的 networkNamespace。oc get net-attach-def -n <namespace>
$ oc get net-attach-def -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 基于 InfiniBand 的 SR-IOV 附加的运行时配置 复制链接链接已复制到粘贴板!
将 pod 附加到额外网络时,您可以指定运行时配置来为 pod 进行特定的自定义。例如,,您可以请求特定的 MAC 硬件地址。
您可以通过在 pod 规格中设置注解来指定运行时配置。注解键是 k8s.v1.cni.cncf.io/network
,它接受一个 JSON 对象来描述运行时配置。
以下 JSON 描述了基于 InfiniBand 的 SR-IOV 网络附加的运行时配置选项。
运行时配置示例
4.4. 将 pod 添加到二级网络 复制链接链接已复制到粘贴板!
您可以将 pod 添加到二级网络。pod 继续通过默认网络发送与集群相关的普通网络流量。
创建 pod 时,二级网络会附加到 pod。但是,如果 pod 已存在,则无法将二级网络附加到其中。
pod 必须与二级网络位于同一个命名空间中。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 登录到集群。
流程
为
Pod
对象添加注解。只能使用以下注解格式之一:要在不自定义的情况下附加二级网络,请使用以下格式添加注解。将
<network>
替换为要与 pod 关联的二级网络的名称:metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 要指定多个二级网络,请使用逗号分隔每个网络。逗号之间不可包括空格。如果您多次指定相同的二级网络,则该 pod 会将多个网络接口附加到该网络。
要通过自定义来附加二级网络,请添加具有以下格式的注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建 pod。将
<name>
替换为 pod 的名称。oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要确认
Pod
CR 中是否存在注解,请输入以下命令将<name>
替换为 pod 的名称。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,
example-pod
pod 附加到net1
二级网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-status
参数是对象的 JSON 数组。每个对象描述附加到 pod 的二级网络的状态。注解值保存为纯文本值。
4.4.1. 向 pod 公开 vfio-pci SR-IOV 设备的 MTU 复制链接链接已复制到粘贴板!
将 pod 添加到额外网络后,您可以检查 MTU 可供 SR-IOV 网络使用。
流程
运行以下命令,检查 pod 注解是否包含 MTU:
oc describe pod example-pod
$ oc describe pod example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 pod 中的
/etc/podnetinfo/
中是否有 MTU:oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
$ oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 为 SR-IOV 配置 RDMA 子系统 复制链接链接已复制到粘贴板!
远程直接内存访问(RDMA)允许在两个系统间直接访问内存,而无需涉及任一系统的操作系统。您可以在单根 I/O 虚拟化(SR-IOV)上配置 RDMA Container Network Interface (CNI),以启用容器间的高性能、低延迟通信。当您将 RDMA 与 SR-IOV 相结合时,您可以提供一个机制来公开 Mellanox 以太网设备的硬件计数器,以便在 Data Plane Development Kit (DPDK)应用程序中使用。
5.1. 配置 SR-IOV RDMA CNI 复制链接链接已复制到粘贴板!
在 SR-IOV 上配置 RDMA CNI。
这个过程只适用于 Mellanox 设备。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
流程
创建一个
SriovNetworkPoolConfig
CR,并将它保存为sriov-nw-pool.yaml
,如下例所示:SriovNetworkPoolConfig
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 RDMA 网络命名空间模式设置为
exclusive
。
运行以下命令来创建
SriovNetworkPoolConfig
资源:oc create -f sriov-nw-pool.yaml
$ oc create -f sriov-nw-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetworkNodePolicy
CR,并将它保存为sriov-node-policy.yaml
,如下例所示:SriovNetworkNodePolicy
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 激活 RDMA 模式。
运行以下命令来创建
SriovNetworkNodePolicy
资源:oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetwork
CR,并将它保存为sriov-network.yaml
,如下例所示:SriovNetwork
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建 RDMA 插件。
运行以下命令来创建
SriovNetwork
资源:oc create -f sriov-network.yaml
$ oc create -f sriov-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
创建
Pod
CR,并将它保存为sriov-test-pod.yaml
,如下例所示:运行时配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建测试 pod:
oc create -f sriov-test-pod.yaml
$ oc create -f sriov-test-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到测试 pod:
oc rsh testpod1 -n sriov-tests
$ oc rsh testpod1 -n sriov-tests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
hw-counters
目录的路径是否存在:ls /sys/bus/pci/devices/${PCIDEVICE_OPENSHIFT_IO_SRIOV_NIC_PF1}/infiniband/*/ports/1/hw_counters/
$ ls /sys/bus/pci/devices/${PCIDEVICE_OPENSHIFT_IO_SRIOV_NIC_PF1}/infiniband/*/ports/1/hw_counters/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
duplicate_request out_of_buffer req_cqe_flush_error resp_cqe_flush_error roce_adp_retrans roce_slow_restart_trans implied_nak_seq_err out_of_sequence req_remote_access_errors resp_local_length_error roce_adp_retrans_to rx_atomic_requests lifespan packet_seq_err req_remote_invalid_request resp_remote_access_errors roce_slow_restart rx_read_requests local_ack_timeout_err req_cqe_error resp_cqe_error rnr_nak_retry_err roce_slow_restart_cnps rx_write_requests
duplicate_request out_of_buffer req_cqe_flush_error resp_cqe_flush_error roce_adp_retrans roce_slow_restart_trans implied_nak_seq_err out_of_sequence req_remote_access_errors resp_local_length_error roce_adp_retrans_to rx_atomic_requests lifespan packet_seq_err req_remote_invalid_request resp_remote_access_errors roce_slow_restart rx_read_requests local_ack_timeout_err req_cqe_error resp_cqe_error rnr_nak_retry_err roce_slow_restart_cnps rx_write_requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 为 SR-IOV 网络配置接口级网络 sysctl 设置和 all-multicast 模式 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用连接到 SR-IOV 网络设备的 pod 的 tuning Container Network Interface (CNI) meta 插件更改接口级网络 sysctl 和几个接口属性,如 promiscuous 模式、all-multicast 模式、MTU 和 MAC 地址。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
6.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"
$ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用您需要的任何名称标记节点。
6.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
$ oc create namespace sysctl-tuning-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.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
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f policyoneflag-sriov-node-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置更新后,
sriov-network-operator
命名空间中的所有 pod 将变为Running
状态。要验证是否已配置了 SR-IOV 网络设备,请输入以下命令。将
<node_name>
替换为带有您刚才配置的 SR-IOV 网络设备的节点名称。预期输出显示Succeeded
。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
6.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
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f sriov-network-interface-sysctl.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 NetworkAttachmentDefinition
CR 是否已成功创建
运行以下命令,确认 SR-IOV Network Operator 创建了
NetworkAttachmentDefinition
CR: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>
替换为您在SriovNetwork
对象中指定的networkNamespace
的值。例如:sysctl-tuning-test
。预期输出显示 NAD CRD 的名称并创建期限(以分钟为单位)。
注意SR-IOV Network Operator 创建 CR 之前可能会有延迟。
验证额外 SR-IOV 网络附加是否成功
要验证 tuning CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:
创建
Pod
CR。将以下 YAML 保存为文件examplepod.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Pod
CR:oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 pod 是否已创建:
oc get pod -n sysctl-tuning-test
$ oc get pod -n sysctl-tuning-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到 pod:
oc rsh -n sysctl-tuning-test tunepod
$ oc rsh -n sysctl-tuning-test tunepod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证配置的 sysctl 标记的值。运行以下命令,查找
net.ipv4.conf.IFNAME.accept_redirects
的值:sysctl net.ipv4.conf.net1.accept_redirects
$ sysctl net.ipv4.conf.net1.accept_redirects
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 为与绑定 SR-IOV 接口标记关联的 pod 配置 sysctl 设置 复制链接链接已复制到粘贴板!
您可以为连接到绑定的 SR-IOV 网络设备的 pod 设置接口级网络 sysctl
设置。
在本例中,可以配置的特定网络接口级 sysctl
设置在绑定接口上设置。
sysctl-tuning-test
是本例中使用的命名空间。
使用以下命令来创建
sysctl-tuning-test
命名空间:oc create namespace sysctl-tuning-test
$ oc create namespace sysctl-tuning-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.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
替换为配置的名称。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f policyallflags-sriov-node-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置更新后,sriov-network-operator 命名空间中的所有 pod 将变为
Running
状态。要验证是否已配置了 SR-IOV 网络设备,请输入以下命令。将
<node_name>
替换为带有您刚才配置的 SR-IOV 网络设备的节点名称。预期输出显示Succeeded
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
6.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
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f sriov-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建绑定网络附加定义,如下例所示。将 YAML 保存为文件
sriov-bond-network-interface.yaml
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f sriov-bond-network-interface.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 NetworkAttachmentDefinition
CR 是否已成功创建
运行以下命令,确认 SR-IOV Network Operator 创建了
NetworkAttachmentDefinition
CR: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>
替换为您在配置网络附加时指定的 networkNamespace,如sysctl-tuning-test
。预期输出显示 NAD CRD 的名称以及创建年龄(以分钟为单位)。
注意SR-IOV Network Operator 创建 CR 之前可能会有延迟。
验证额外的 SR-IOV 网络资源是否成功
要验证 tuning CNI 是否已正确配置并附加额外的 SR-IOV 网络附加,请执行以下操作:
创建
Pod
CR。例如,将以下 YAML 保存为文件examplepod.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML:
oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 pod 是否已创建:
oc get pod -n sysctl-tuning-test
$ oc get pod -n sysctl-tuning-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到 pod:
oc rsh -n sysctl-tuning-test tunepod
$ oc rsh -n sysctl-tuning-test tunepod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证配置的
sysctl
标记的值。运行以下命令,查找net.ipv6.neigh.IFNAME.base_reachable_time_ms
的值:sysctl net.ipv6.neigh.bond0.base_reachable_time_ms
$ sysctl net.ipv6.neigh.bond0.base_reachable_time_ms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 关于 all-multicast 模式 复制链接链接已复制到粘贴板!
启用 all-multicast 模式(特别是在无根应用程序上下文中)非常重要。如果没有启用此模式,则需要为 Pod 的安全上下文约束(SCC )授予 NET_ADMIN
功能。如果您要允许 NET_ADMIN
功能授予 pod 权限,以便更改超出其特定要求的更改,您可能会暴露安全漏洞。
tuning CNI 插件支持更改几个接口属性,包括 all-multicast 模式。通过启用此模式,您可以在 SR-IOV 网络设备上配置的虚拟功能 (VF) 上运行的应用程序从其他 VF 上的应用程序接收多播流量,无论是附加到同一还是不同的物理功能。
6.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
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:如果支持 SR-IOV 的集群节点还没有标记,请添加
SriovNetworkNodePolicy.Spec.NodeSelector
标签。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。 运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f sriovnetpolicy-mlx.yaml
$ oc create -f sriovnetpolicy-mlx.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置更新后,
sriov-network-operator
命名空间中的所有 pod 会自动进入Running
状态。运行以下命令来创建
enable-allmulti-test
命名空间:oc create namespace enable-allmulti-test
$ oc create namespace enable-allmulti-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为额外 SR-IOV 网络附加创建
SriovNetwork
自定义资源 (CR) 并插入metaPlugins
配置,如下例所示,并将该文件保存为sriov-enable-all-multicast.yaml
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc create -f sriov-enable-all-multicast.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 NetworkAttachmentDefinition
CR
运行以下命令,确认 SR-IOV Network Operator 创建了
NetworkAttachmentDefinition
CR: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>
替换为您在SriovNetwork
对象中指定的networkNamespace
的值。在本例中,是enable-allmulti-test
。预期输出显示 NAD CR 的名称和创建年龄(以分钟为单位)。
注意SR-IOV Network Operator 创建 CR 之前可能会有延迟。
运行以下命令,显示 SR-IOV 网络资源的信息:
oc get sriovnetwork -n openshift-sriov-network-operator
$ oc get sriovnetwork -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证额外的 SR-IOV 网络附加
要验证 tuning CNI 是否已正确配置并附加了额外的 SR-IOV 网络附加,请按照以下步骤执行:
创建
Pod
CR。将以下 YAML 示例保存到名为examplepod.yaml
的文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Pod
CR:oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 pod 是否已创建:
oc get pod -n enable-allmulti-test
$ oc get pod -n enable-allmulti-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 47s
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到 pod:
oc rsh -n enable-allmulti-test samplepod
$ oc rsh -n enable-allmulti-test samplepod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,列出与 pod 关联的所有接口:
ip link
sh-4.4# ip link
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 为启用 SR-IOV 的工作负载配置 QinQ 支持 复制链接链接已复制到粘贴板!
QinQ (正式称为 802.1Q-in-802.1Q)是由 IEEE 802.1ad 定义的联网技术。IEEE 802.1ad 扩展了 IEEE 802.1Q-1998 标准,并通过向已使用 802.1Q 标记的数据包引入额外的 802.1Q 标签增强 VLAN 功能。此方法也称为 VLAN 堆栈或双 VLAN。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
7.1. 关于 802.1Q-in-802.1Q 支持 复制链接链接已复制到粘贴板!
在传统的 VLAN 设置中,帧通常包含一个 VLAN 标签,如 VLAN-100,以及其他元数据,如服务质量 (QoS) 位和协议信息。QinQ 引入了第二个 VLAN 标签,其中服务提供商为其使用指定外部标签,提供它们的灵活性,而内部标签则保留给客户的 VLAN 专用。
QinQ 通过使用双 VLAN 标记促进嵌套 VLAN 的创建,从而在网络环境中实现更精细的分段和流量隔离。这种方法对于您需要通过通用基础架构向多个客户提供基于 VLAN 的服务的服务供应商网络特别有用,同时确保流量隔离和隔离。
下图演示了 OpenShift Container Platform 如何使用 SR-IOV 和 QinQ 实现容器化工作负载的高级网络分段和隔离。
图显示双 VLAN 标记 (QinQ) 如何在支持 SR-IOV 的 worker 节点上工作。位于 pod 命名空间中的 SR-IOV 虚拟功能 (VF),ext0
由带有 VLAN ID 和 VLAN 协议的 SR-IOV Container Network Interface (CNI) 配置。这与 S-tag 对应。在 pod 中,VLAN CNI 使用主接口 ext0
创建一个子接口。此子接口使用 802.1Q 协议添加内部 VLAN ID,该协议对应于 C-tag。
这演示了 QinQ 如何在网络内启用更精细的流量分段和隔离。帧结构在右侧详细介绍,突出显示包含 VLAN 标签、EtherType、IP、TCP 和 Payload 部分的包含。QinQ 促进通过共享基础架构向多个客户提供基于 VLAN 的服务,同时确保流量隔离和隔离。
OpenShift Container Platform SR-IOV 解决方案支持在 SriovNetwork
自定义资源 (CR) 上设置 VLAN 协议。虚拟功能 (VF) 可以使用此协议来设置 VLAN 标签,也称为外部标签。然后,Pod 可以使用 VLAN CNI 插件来配置内部标签。
NIC | 802.1ad/802.1Q | 802.1Q/802.1Q |
---|---|---|
Intel X710 | 否 | 支持 |
Intel E810 | 支持 | 支持 |
Mellanox | 否 | 支持 |
7.2. 为启用 SR-IOV 的工作负载配置 QinQ 支持 复制链接链接已复制到粘贴板!
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
流程
使用以下内容创建一个名为
sriovnetpolicy-810-sriov-node-network.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f sriovnetpolicy-810-sriov-node-network.yaml
$ oc create -f sriovnetpolicy-810-sriov-node-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开一个单独的终端窗口,运行以下命令来监控
openshift-sriov-network-operator
命名空间中指定节点的 SR-IOV 网络节点状态的同步状态:watch -n 1 'oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath="{.status.syncStatus}"'
$ watch -n 1 'oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath="{.status.syncStatus}"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同步状态表示从
InProgress
更改为Succeeded
。创建一个
SriovNetwork
对象,并设置名为 S-tag 或Service Tag
的外部 VLAN,因为它属于基础架构。重要您必须在交换机的中继接口上配置 VLAN。另外,您可能需要进一步配置一些交换机来支持 QinQ 标记。
使用以下内容创建一个名为
nad-sriovnetwork-1ad-810.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc create -f nad-sriovnetwork-1ad-810.yaml
$ oc create -f nad-sriovnetwork-1ad-810.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用内部 VLAN 创建
NetworkAttachmentDefinition
对象。内部 VLAN 通常被称为 C-tag 或Customer Tag
,它属于 Network Function:使用以下内容,创建一个名为
nad-cvlan100.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 pod 中的 VF 接口。默认名称为
net1
,因为 pod 注解中没有设置名称。
运行以下命令来应用 YAML 文件:
oc apply -f nad-cvlan100.yaml
$ oc apply -f nad-cvlan100.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
按照以下步骤,在节点上验证 QinQ 是否活跃:
使用以下内容创建一个名为
test-qinq-pod.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建测试 pod:
oc create -f test-qinq-pod.yaml
$ oc create -f test-qinq-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在存在 pod 的目标节点上进入 debug 会话,运行以下命令显示网络接口
ens5f0
的信息:oc debug node/my-cluster-node -- bash -c "ip link show ens5f0"
$ oc debug node/my-cluster-node -- bash -c "ip link show ens5f0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的
vlan protocol 802.1ad
ID 表示接口支持带有协议 802.1ad (QinQ)的 VLAN 标记。VLAN ID 为 171。
第 8 章 配置高性能多播 复制链接链接已复制到粘贴板!
您可以在您的单根 I/O 虚拟化(SR-IOV)硬件网络中使用多播。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
8.1. 高性能多播 复制链接链接已复制到粘贴板!
OVN-Kubernetes 网络插件支持默认网络上的 pod 间的多播。目前,多播最适用于低带宽协调或服务发现。它不适用于高带宽的应用程序。对于流传输介质应用程序,如 IPTV 和多方视频会议,可以使用 Single Root I/O Virtualization(SR-IOV)硬件来提供接近原生的性能。
使用额外的 SR-IOV 接口进行多播时:
- pod 必须通过额外的 SR-IOV 接口发送或接收多播软件包。
- 连接 SR-IOV 接口的物理网络决定了多播路由和拓扑结构,不受 OpenShift Container Platform 的控制。
8.2. 为多播配置 SR-IOV 接口 复制链接链接已复制到粘贴板!
以下步骤为多播创建一个 SR-IOV 接口示例。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
您必须作为
cluster-admin
角色用户登录集群。
流程
创建一个
SriovNetworkNodePolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetwork
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建带有多播应用程序的 pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 只有在应用程序需要为 SR-IOV 接口分配多播 IP 地址时,才需要
NET_ADMIN
功能。否则,可以省略它。
第 9 章 使用 DPDK 和 RDMA 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持容器化 Data Plane Development Kit (DPDK) 应用程序。您可以使用单一根 I/O 虚拟化(SR-IOV)网络硬件和 Data Plane Development Kit (DPDK) 以及远程直接内存访问 (RDMA) 。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
9.1. 在 pod 中使用虚拟功能的示例 复制链接链接已复制到粘贴板!
您可以在附加了 SR-IOV VF 的 pod 中运行远程直接内存访问 (RDMA) 或 Data Plane Development Kit (DPDK) 应用程序。
本示例演示了在 RDMA 模式中使用虚拟功能 (VF) 的 pod:
使用 RDMA 模式的 Pod
规格
以下示例演示了在 DPDK 模式中使用 VF 的 pod:
使用 DPDK 模式的 Pod
规格
9.2. 在 DPDK 模式中使用 Intel NIC 的虚拟功能 复制链接链接已复制到粘贴板!
先决条件
-
安装 OpenShift CLI(
oc
)。 - 安装 SR-IOV Network Operator。
-
以具有
cluster-admin
特权的用户身份登录。
流程
创建以下
SriovNetworkNodePolicy
对象,然后在intel-dpdk-node-policy.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将虚拟功能(VF)的驱动器类型指定为
vfio-pci
。
注意如需了解
inSriovNetworkNodePolicy
的每个选项的详情,请参阅Configuring SR-IOV network devices
部分。当应用由
SriovNetworkNodePolicy
对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。它可能需要几分钟时间来应用配置更改。确保集群中有足够的可用节点,用以预先处理被驱除的工作负载。应用配置更新后,
openshift-sriov-network-operator
命名空间中的所有 pod 将变为Running
状态。运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f intel-dpdk-node-policy.yaml
$ oc create -f intel-dpdk-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
SriovNetwork
对象,然后在intel-dpdk-network.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为 ipam CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
注意如需
SriovNetwork
中的每个选项的详细说明,请参阅"Configuring SR-IOV additional network" 部分。一个可选的库 app-netutil 提供了多种 API 方法来收集有关容器父 pod 的网络信息。
运行以下命令来创建
SriovNetwork
对象:oc create -f intel-dpdk-network.yaml
$ oc create -f intel-dpdk-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
Pod
spec,然后在intel-dpdk-pod.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
target_namespace
,它与SriovNetwork
对象intel-dpdk-network
创建于的命令空间相同。如果要在其他命名空间中创建 pod,在Pod
spec 和SriovNetwork
对象中更改target_namespace
。 - 2
- 指定包含应用程序和应用程序使用的 DPDK 库的 DPDK 镜像。
- 3
- 指定容器内的应用程序进行大页分配、系统资源分配和网络接口访问所需的额外功能。
- 4
- 在
/mnt/huge
下将巨页卷挂载到 DPDK pod。巨页卷由 emptyDir 卷类型支持,medium 为Hugepages
。 - 5
- 可选:指定分配给 DPDK pod 的 DPDK 设备数。如果未明确指定,则此资源请求和限制将被 SR-IOV 网络资源注入程序自动添加。SR-IOV 网络资源注入程序是由 SR-IOV Operator 管理的准入控制器组件。它默认是启用的,可以通过把默认的
SriovOperatorConfig
CR 中的enableInjector
选项设置为false
来禁用它。 - 6
- 指定 CPU 数量。DPDK pod 通常需要从 kubelet 分配专用 CPU。这可以通过将 CPU Manager 策略设置为
static
,并创建带有有保障的
QoS 的 pod 来实现。 - 7
- 指定巨页大小
hugepages-1Gi
或hugepages-2Mi
以及分配给 DPDK pod 的巨页数量。单独配置2Mi
和1Gi
巨页。配置1Gi
巨页需要在节点中添加内核参数。例如:添加内核参数default_hugepagesz=1GB
,hugepagesz=1G
和hugepages=16
将在系统引导时分配16*1Gi
巨页。
运行以下命令来创建 DPDK pod:
oc create -f intel-dpdk-pod.yaml
$ oc create -f intel-dpdk-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. 在带有 Mellanox NIC 的 DPDK 模式中使用虚拟功能 复制链接链接已复制到粘贴板!
您可以创建一个网络节点策略,并在带有 Mellanox NIC 的 DPDK 模式中使用虚拟功能创建 Data Plane Development Kit (DPDK) pod。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已安装 Single Root I/O Virtualization (SR-IOV) Network Operator。
-
您已以具有
cluster-admin
权限的用户身份登录。
流程
将以下
SriovNetworkNodePolicy
YAML 配置保存到mlx-dpdk-node-policy.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如需了解
SriovNetworkNodePolicy
对象中的每个选项的详细说明,请参阅配置 SR-IOV 网络设备。当应用由
SriovNetworkNodePolicy
对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。它可能需要几分钟时间来应用配置更改。确保集群中有足够的可用节点,用以预先处理被驱除的工作负载。应用配置更新后,
openshift-sriov-network-operator
命名空间中的所有 pod 将变为Running
状态。运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f mlx-dpdk-node-policy.yaml
$ oc create -f mlx-dpdk-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下
SriovNetwork
YAML 配置保存到mlx-dpdk-network.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为 IP 地址管理 (IPAM) Container Network Interface (CNI) 插件指定一个配置对象作为 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
注意如需了解
SriovNetwork
对象中的每个选项的详细说明,请参阅配置 SR-IOV 网络设备。app-netutil
选项库提供了几个 API 方法,用于收集有关容器父 pod 的网络信息。运行以下命令来创建
SriovNetwork
对象:oc create -f mlx-dpdk-network.yaml
$ oc create -f mlx-dpdk-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下
Pod
YAML 配置保存到mlx-dpdk-pod.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
target_namespace
,它与SriovNetwork
对象mlx-dpdk-network
创建于的命令空间相同。要在不同命名空间中创建 pod,在Pod
spec 和SriovNetwork
对象中更改target_namespace
。 - 2
- 指定包含应用程序和应用程序使用的 DPDK 库的 DPDK 镜像。
- 3
- 指定容器内的应用程序进行大页分配、系统资源分配和网络接口访问所需的额外功能。
- 4
- 将巨页卷挂载到
/mnt/huge
下的 DPDK pod 中。巨页卷由emptyDir
卷类型支持,介质是Hugepages
。 - 5
- 可选:指定分配给 DPDK pod 的 DPDK 设备数。如果没有明确指定,则 SR-IOV 网络资源注入程序会自动添加此资源请求和限制。SR-IOV 网络资源注入程序是由 SR-IOV Operator 管理的准入控制器组件。它默认是启用的,可以通过把默认的
SriovOperatorConfig
CR 中的enableInjector
选项设置为false
来禁用它。 - 6
- 指定 CPU 数量。DPDK pod 通常需要从 kubelet 分配专用 CPU。要做到这一点,将 CPU Manager 策略设置为
static
,并创建带有Guaranteed
服务质量 (QoS) 的 pod。 - 7
- 指定巨页大小
hugepages-1Gi
或hugepages-2Mi
以及分配给 DPDK pod 的巨页数量。单独配置2Mi
和1Gi
巨页。配置1Gi
巨页需要在节点中添加内核参数。
运行以下命令来创建 DPDK pod:
oc create -f mlx-dpdk-pod.yaml
$ oc create -f mlx-dpdk-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.4. 使用TAP CNI 运行具有内核访问权限的 rootless DPDK 工作负载 复制链接链接已复制到粘贴板!
DPDK 应用程序可以使用 virtio-user
作为异常路径,将某些类型的数据包(如日志消息)注入内核进行处理。有关此功能的更多信息,请参阅 Virtio_user 作为例外路径。
在 OpenShift Container Platform 版本 4.14 及更高版本中,您可以使用非特权 pod 和 tap CNI 插件运行 DPDK 应用程序。要启用此功能,您需要在 SriovNetworkNodePolicy
对象中将 needVhostNet
参数设置为 true
来挂载 vhost-net
设备。
图 9.1. DPDK 和TAP 示例配置
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已安装 SR-IOV Network Operator。
-
您以具有
cluster-admin
权限的用户身份登录。 确保在所有节点上将
container_use_devices=on
设置为 root。注意使用 Machine Config Operator 设置此 SELinux 布尔值。
流程
创建一个文件,如
test-namespace.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建新的
Namespace
对象:oc apply -f test-namespace.yaml
$ oc apply -f test-namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个文件,如
sriov-node-network-policy.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f sriov-node-network-policy.yaml
$ oc create -f sriov-node-network-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
SriovNetwork
对象,然后在sriov-network-attachment.yaml
文件中保存 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如需
SriovNetwork
中的每个选项的详细说明,请参阅"Configuring SR-IOV additional network" 部分。一个可选的库
app-netutil
提供了多种 API 方法来收集有关容器父 pod 的网络信息。运行以下命令来创建
SriovNetwork
对象:oc create -f sriov-network-attachment.yaml
$ oc create -f sriov-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个文件,如
tap-example.yaml
,该文件定义网络附加定义,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定创建
SriovNetwork
对象的target_namespace
。
运行以下命令来创建
NetworkAttachmentDefinition
对象:oc apply -f tap-example.yaml
$ oc apply -f tap-example.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个文件,如
dpdk-pod-rootless.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
target_namespace
创建SriovNetwork
对象。如果要在其他命名空间中创建 pod,在Pod
spec 和SriovNetwork
对象中更改target_namespace
。 - 2
- 设置在这些卷中创建的卷挂载目录和文件的组所有权。
- 3
- 指定用于运行容器的主要组 ID。
- 4
- 指定包含应用程序和应用程序使用的 DPDK 库的 DPDK 镜像。
- 5
- 从容器的 securityContext 中删除所有功能 (
ALL
) 意味着容器在正常操作之外没有特殊的特权。 - 6
- 指定容器内的应用程序进行大页分配、系统资源分配和网络接口访问所需的额外功能。这些功能还必须使用
setcap
命令在二进制文件中设置。 - 7
- Mellanox 网络接口控制器(NIC)需要
NET_RAW
功能。 - 8
- 指定用于运行容器的用户 ID。
- 9
- 此设置表示 pod 中的容器或容器不应被授予对主机系统的特权访问权限。
- 10
- 此设置允许容器在可能已分配的初始非 root 特权外升级其特权。
- 11
- 此设置可确保容器以非 root 用户身份运行。这有助于强制实施最小特权的原则,限制对容器造成潜在的影响,并减少攻击面。
- 12
- 在
/mnt/huge
下将巨页卷挂载到 DPDK pod。巨页卷由 emptyDir 卷类型支持,medium 为Hugepages
。 - 13
- 可选:指定分配给 DPDK pod 的 DPDK 设备数。如果没有明确指定,则 SR-IOV 网络资源注入程序会自动添加此资源请求和限制。SR-IOV 网络资源注入程序是由 SR-IOV Operator 管理的准入控制器组件。它默认是启用的,可以通过把默认的
SriovOperatorConfig
CR 中的enableInjector
选项设置为false
来禁用它。 - 14
- 指定 CPU 数量。DPDK pod 通常需要从 kubelet 分配专用 CPU。这可以通过将 CPU Manager 策略设置为
static
,并创建带有有保障的
QoS 的 pod 来实现。 - 15
- 指定巨页大小
hugepages-1Gi
或hugepages-2Mi
以及分配给 DPDK pod 的巨页数量。单独配置2Mi
和1Gi
巨页。配置1Gi
巨页需要在节点中添加内核参数。例如:添加内核参数default_hugepagesz=1GB
,hugepagesz=1G
和hugepages=16
将在系统引导时分配16*1Gi
巨页。 - 16
- 如果您的性能配置集没有命名为
cnf-performance profile
,请将该字符串替换为正确的性能配置集名称。
运行以下命令来创建 DPDK pod:
oc create -f dpdk-pod-rootless.yaml
$ oc create -f dpdk-pod-rootless.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. 实现特定 DPDK 行率概述 复制链接链接已复制到粘贴板!
要实现特定的 Data Plane Development Kit (DPDK) 行率,部署 Node Tuning Operator 并配置单根 I/O 虚拟化 (SR-IOV)。您还必须为以下资源调整 DPDK 设置:
- 隔离的 CPU
- Hugepages
- 拓扑调度程序
在早期版本的 OpenShift Container Platform 中,Performance Addon Operator 用来实现自动性能优化,以便为 OpenShift Container Platform 应用程序实现低延迟性能。在 OpenShift Container Platform 4.11 及更新的版本中,这个功能是 Node Tuning Operator 的一部分。
DPDK 测试环境
下图显示了流量测试环境的组件:
- 流量生成器:可以生成高容量数据包流量的应用。
- SR-IOV 支持 NIC :与 SR-IOV 兼容的网络接口卡。该卡在物理接口上运行多个虚拟功能。
- 物理功能 (PF) :支持 SR-IOV 接口的网络适配器的 PCI Express (PCIe) 功能。
- 虚拟功能 (VF) :支持 SR-IOV 的网络适配器上的轻量级 PCIe 功能。VF 与网络适配器上的 PCIe PF 关联。VF 代表网络适配器的虚拟实例。
- 交换机 :网络交换机。节点也可以重新连接到回来。
-
testpmd
: DPDK 中包含的示例应用程序。testpmd
应用可用于在数据包转发模式下测试 DPDK。testpmd
应用程序也是如何使用 DPDK 软件开发套件 (SDK) 构建功能全面的应用程序的示例。 - worker 0 和 worker 1:OpenShift Container Platform 节点。
9.6. 使用 SR-IOV 和 Node Tuning Operator 实现 DPDK 行率 复制链接链接已复制到粘贴板!
您可以使用 Node Tuning Operator 配置隔离的 CPU、巨页和拓扑调度程序。然后,您可以使用 Node Tuning Operator 和单根 I/O 虚拟化 (SR-IOV) 来实现特定的 Data Plane Development Kit (DPDK) 行率。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已安装 SR-IOV Network Operator。
-
您已以具有
cluster-admin
权限的用户身份登录。 您已部署了独立的 Node Tuning Operator。
注意在以前版本的 OpenShift Container Platform 中,Performance Addon Operator 用来实现自动性能优化,以便为 OpenShift 应用程序实现低延迟性能。在 OpenShift Container Platform 4.11 及更新的版本中,这个功能是 Node Tuning Operator 的一部分。
流程
根据以下示例创建
PerformanceProfile
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果系统上启用了超线程,请分配与
isolated
和reserved
CPU 组的相关符号链接。如果系统包含多个非统一内存访问节点 (NUMA),请将两个 NUMA 中的 CPU 分配给这两个组。您还可以将 Performance Profile Creator 用于此任务。如需更多信息,请参阅创建性能配置集。 - 2
- 您还可以指定将队列设置为保留 CPU 数的设备列表。如需更多信息,请参阅使用 Node Tuning Operator 缩减 NIC 队列。
- 3
- 分配所需的巨页的数量和大小。您可以为巨页指定 NUMA 配置。默认情况下,系统会为系统上的每个 NUMA 节点分配一个偶数数量。如果需要,您可以请求对节点使用实时内核。如需更多信息,请参阅置备具有实时功能的 worker。
-
将
yaml
文件保存为mlx-dpdk-perfprofile-policy.yaml
。 使用以下命令应用性能配置集:
oc create -f mlx-dpdk-perfprofile-policy.yaml
$ oc create -f mlx-dpdk-perfprofile-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6.1. 用于容器应用程序的 DPDK 库 复制链接链接已复制到粘贴板!
一个可选的库 app-netutil
提供了几个 API 方法,用于从该 pod 中运行的容器内收集 pod 的网络信息。
此库可以将 SR-IOV 虚拟功能(VF)集成到 Data Plane Development Kit(DPDK)模式中。该程序库提供 Golang API 和 C API。
当前,采用三个 API 方法:
GetCPUInfo()
- 此函数决定了哪些 CPU 可供容器使用并返回相关列表。
GetHugepages()
-
此函数决定了每个容器在
Pod
spec 中请求的巨页内存量并返回相应的值。 GetInterfaces()
- 此函数决定了容器中的一组接口,并返回相关的列表。返回值包括每个接口的接口类型和特定于类型的数据。
库的存储库包括用于构建容器镜像 dpdk-app-centos
的示例 Dockerfile。根据容器集规格中的环境变量,容器镜像可以运行以下 DPDK 示例应用之一: l2fwd
、l3wd
或 testpmd
。容器镜像提供了一个将 app-netutil
库集成到容器镜像本身的示例。库也可以集成到 init 容器中。init 容器可以收集所需的数据,并将数据传递给现有的 DPDK 工作负载。
9.6.2. 用于虚拟功能的 SR-IOV Network Operator 示例 复制链接链接已复制到粘贴板!
您可以使用单根 I/O 虚拟化 (SR-IOV) Network Operator 从节点上分配和配置虚拟功能 (VF) 的虚拟功能(VF)。
如需有关部署 Operator 的更多信息,请参阅安装 SR-IOV Network Operator。有关配置 SR-IOV 网络设备的更多信息,请参阅配置 SR-IOV 网络设备。
在 Intel VF 和 Mellanox VF 上运行 Data Plane Development Kit (DPDK) 工作负载之间存在一些区别。本节为这两个 VF 类型提供对象配置示例。以下是用于在 Intel NIC 上运行 DPDK 应用程序的 sriovNetworkNodePolicy
对象示例:
以下是 Mellanox NIC 的 sriovNetworkNodePolicy
对象示例:
9.6.3. SR-IOV 网络 Operator 示例 复制链接链接已复制到粘贴板!
以下是 sriovNetwork
对象的示例定义。在这种情况下,Intel 和 Mellanox 配置是相同的:
9.6.4. DPDK 基础工作负载示例 复制链接链接已复制到粘贴板!
以下是数据平面开发套件 (DPDK) 容器的示例:
不要使用 SLEEP
启动容器集,然后执行到容器集以启动 testpmd 或 DPDK 工作负载。这可添加额外的中断,因为 exec
进程没有固定到任何 CPU。
9.6.5. testpmd 脚本示例 复制链接链接已复制到粘贴板!
以下是运行 testpmd
的示例脚本:
这个示例使用两个不同的 sriovNetwork
CR。环境变量包含分配给 pod 的虚拟功能 (VF) PCI 地址。如果您在 pod 定义中使用相同的网络,您必须分割 pciAddress
。配置流量生成器的正确 MAC 地址非常重要。这个示例使用自定义 MAC 地址。
9.7. 在带有 Mellanox NIC 的 RDMA 模式中使用虚拟功能 复制链接链接已复制到粘贴板!
RDMA over Converged Ethernet (RoCE) 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在 OpenShift Container Platform 上使用 RDMA 时,RDMA over Converged Ethernet (RoCE) 是唯一支持的模式。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 安装 SR-IOV Network Operator。
-
以具有
cluster-admin
特权的用户身份登录。
流程
创建以下
SriovNetworkNodePolicy
对象,然后在mlx-rdma-node-policy.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如需了解
inSriovNetworkNodePolicy
的每个选项的详情,请参阅Configuring SR-IOV network devices
部分。当应用由
SriovNetworkNodePolicy
对象中指定的配置时,SR-IOV Operator 可能会排空节点,并在某些情况下会重启节点。它可能需要几分钟时间来应用配置更改。确保集群中有足够的可用节点,用以预先处理被驱除的工作负载。应用配置更新后,
openshift-sriov-network-operator
命名空间中的所有 pod 将变为Running
状态。运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f mlx-rdma-node-policy.yaml
$ oc create -f mlx-rdma-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
SriovNetwork
对象,然后在mlx-rdma-network.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为 ipam CNI 插件指定一个配置对象做为一个 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
注意如需
SriovNetwork
中的每个选项的详细说明,请参阅"Configuring SR-IOV additional network" 部分。一个可选的库 app-netutil 提供了多种 API 方法来收集有关容器父 pod 的网络信息。
运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f mlx-rdma-network.yaml
$ oc create -f mlx-rdma-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下
Pod
spec,然后在mlx-rdma-pod.yaml
文件中保存 YAML。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
target_namespace
,它与SriovNetwork
对象mlx-rdma-network
创建于的命令空间相同。如果要在其他命名空间中创建 pod,在Pod
spec 和SriovNetwork
对象中更改target_namespace
。 - 2
- 指定包含应用程序和应用程序使用的 RDMA 库的 RDMA 镜像。
- 3
- 指定容器内的应用程序进行大页分配、系统资源分配和网络接口访问所需的额外功能。
- 4
- 在
/mnt/huge
下将巨页卷挂载到 RDMA pod。巨页卷由 emptyDir 卷类型支持,medium 为Hugepages
。 - 5
- 指定 CPU 数量。RDMA pod 通常需要从 kubelet 分配专用 CPU。这可以通过将 CPU Manager 策略设置为
static
,并创建带有有保障的
QoS 的 pod 来实现。 - 6
- 指定巨页大小
hugepages-1Gi
或hugepages-2Mi
以及分配给 RDMA pod 的巨页数量。单独配置2Mi
和1Gi
巨页。配置1Gi
巨页需要在节点中添加内核参数。
运行以下命令来创建 RDMA pod:
oc create -f mlx-rdma-pod.yaml
$ oc create -f mlx-rdma-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.8. 在 OpenStack 上使用 OVS-DPDK 的集群测试 pod 模板 复制链接链接已复制到粘贴板!
以下 testpmd
pod 演示了使用巨页、保留 CPU 和 SR-IOV 端口创建容器。
testpmd
pod 示例
第 10 章 使用 pod 级别绑定 复制链接链接已复制到粘贴板!
在 pod 级别的绑定对于启用需要高可用性和更多吞吐量的 pod 内的工作负载至关重要。使用 pod 级别绑定,您可以在内核模式接口上从多个根 I/O 虚拟化(SR-IOV)虚拟功能接口创建绑定接口。SR-IOV 虚拟功能传递到 pod,并附加到内核驱动程序中。
需要 pod 级别绑定的一个场景是从不同物理功能的多个 SR-IOV 虚拟功能创建绑定接口。可以利用主机上的两个不同物理功能创建绑定接口,以便在 pod 级别上实现高可用性。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
有关创建 SR-IOV 网络、网络策略、网络附加定义和 pod 等任务的指导,请参阅配置 SR-IOV 网络设备。
10.1. 从两个 SR-IOV 接口配置绑定接口 复制链接链接已复制到粘贴板!
绑定可让多个网络接口聚合到一个逻辑 "bonded" 接口。绑定 Container Network Interface (Bond-CNI) 将绑定功能引入容器中。
Bond-CNI 可使用单根 I/O 虚拟化 (SR-IOV) 虚拟功能创建,并将它们放在容器网络命名空间中。
OpenShift Container Platform 仅支持使用 SR-IOV 虚拟功能的 Bond-CNI。SR-IOV Network Operator 提供了管理虚拟功能所需的 SR-IOV CNI 插件。不支持其他 CNI 或接口类型。
先决条件
- 必须安装 SR-IOV Network Operator,并配置为获取容器中的虚拟功能。
- 要配置 SR-IOV 接口,必须为每个接口创建一个 SR-IOV 网络和策略。
- SR-IOV Network Operator 根据定义的 SR-IOV 网络和策略,为每个 SR-IOV 接口创建一个网络附加定义。
-
linkState
设置为 SR-IOV 虚拟功能的默认值auto
。
10.1.1. 创建绑定网络附加定义 复制链接链接已复制到粘贴板!
现在,SR-IOV 虚拟功能可用,您可以创建一个绑定网络附加定义。
- 1
- cni-type 始终设置为
bond
。 - 2
mode
属性指定绑定模式。注意支持的绑定模式有:
-
balance-rr
- 0 -
active-backup
- 1 -
balance-xor
- 2
对于
balance-rr
或balance-xor
模式,您必须为 SR-IOV 虚拟功能将trust
模式设置为on
。-
- 3
- active-backup 模式的
failover
属性是必需的,必须设为 1。 - 4
linksInContainer=true
标志告知 Bond CNI 在容器内找到所需的接口。默认情况下,Bond CNI 会查找主机上的这些接口,该接口无法与 SRIOV 和 Multus 集成。- 5
links
部分定义将用于创建绑定的接口。默认情况下,Multus 将附加的接口命名为 "net",再加上一个连续的数字。
10.1.2. 使用绑定接口创建 pod 复制链接链接已复制到粘贴板!
使用名为 example
podbonding.yaml
的 YAML 文件创建 pod 来测试设置,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 注意网络注解:它包含两个 SR-IOV 网络附加,以及一个绑定网络附加。绑定附加使用两个 SR-IOV 接口作为绑定的端口接口。
运行以下命令来应用 yaml:
oc apply -f podbonding.yaml
$ oc apply -f podbonding.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令检查 pod 接口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果在 pod 注解中没有配置接口名称,接口名称会自动分配为
net<n>
,其中<n>
以1
开始。可选: 如果要为 example
bond0
设置一个特定的接口名称,请编辑k8s.v1.cni.cncf.io/networks
注解,并将bond0
设为接口名称,如下所示:annotations: k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1@bond0
annotations: k8s.v1.cni.cncf.io/networks: demo/sriovnet1, demo/sriovnet2, demo/bond-net1@bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 11 章 配置硬件卸载 (offloading) 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在兼容节点上配置硬件卸载,以提高数据处理性能并减少主机 CPU 的负载。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
11.1. 关于硬件卸载 复制链接链接已复制到粘贴板!
Open vSwitch 硬件卸载是一种处理网络任务的方法,方法是将它们从 CPU 中分离出来,并将它们卸载到网络接口控制器上的专用处理器。因此,集群可从更快的数据传输速度、CPU 工作负载减少并降低计算成本中受益。
此功能的关键元素是网络接口控制器的现代类,称为 SmartNIC。SmartNIC 是一个网络接口控制器,它可以处理计算密集型网络处理任务。与专用图形卡可提高图形性能的方式相同,T SmartNIC 可改进网络性能。在各个情形中,专用处理器提高了特定类型的处理任务的性能。
在 OpenShift Container Platform 中,您可以为具有兼容 SmartNIC 的裸机节点配置硬件卸载。SR-IOV Network Operator 配置并启用硬件卸载。
硬件卸载并不适用于所有工作负载或应用程序类型。只支持以下两种通信类型:
- pod 到 pod
- Pod 到服务,其中服务是一个由常规 pod 支持的 ClusterIP 服务
在所有情况下,只有在将 pod 和服务分配给具有兼容 SmartNIC 的节点时,硬件卸载才会发生。假设节点上带有硬件卸载的 pod 会尝试与常规节点上的服务进行通信。常规节点上,所有处理都会在内核中进行,因此 pod 到服务通信的整体性能仅限于该常规节点的最大性能。硬件卸载与 DPDK 应用程序不兼容。
在节点上启用硬件卸载,但没有配置 pod 使用,可能会导致 pod 流量的吞吐量性能降低。您无法为 OpenShift Container Platform 管理的 pod 配置硬件卸载。
11.2. 支持的设备 复制链接链接已复制到粘贴板!
在以下网络接口控制器上支持硬件卸载:
制造商 | model | 供应商 ID | 设备 ID |
---|---|---|---|
Mellanox | MT27800 系列 [ConnectX-5] | 15b3 | 1017 |
Mellanox | MT28880 系列 [ConnectX-5 Ex] | 15b3 | 1019 |
Mellanox | MT2892 系列 [ConnectX-6 Dx] | 15b3 | 101d |
Mellanox | MT2894 系列 [ConnectX-6 Lx] | 15b3 | 101f |
Mellanox | ConnectX-6 NIC 模式中的 MT42822 BlueField-2 | 15b3 | a2d6 |
11.3. 先决条件 复制链接链接已复制到粘贴板!
- 集群至少有一个裸机带有网络接口控制器,支持进行硬件卸载。
- 已安装 SR-IOV Network Operator。
- 集群使用 OVN-Kubernetes 网络插件。
-
在 OVN-Kubernetes 网络插件配置中,
gatewayConfig.routingViaHost
字段被设置为false
。
11.4. 将 SR-IOV Network Operator 设置为 systemd 模式 复制链接链接已复制到粘贴板!
要支持硬件卸载,您必须首先将 SR-IOV Network Operator 设置为 systemd
模式。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
创建一个
SriovOperatorConfig
自定义资源 (CR) 以部署所有 SR-IOV Operator 组件:创建名为
sriovOperatorConfig.yaml
的文件,其中包含以下 YAML:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建资源:
oc apply -f sriovOperatorConfig.yaml
$ oc apply -f sriovOperatorConfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.5. 为硬件卸载配置机器配置池 复制链接链接已复制到粘贴板!
要启用硬件卸载,您可以创建一个专用的机器配置池,并将其配置为使用 SR-IOV Network Operator。
先决条件
-
SR-IOV Network Operator 安装并设置为
systemd
模式。
流程
为您要使用硬件卸载的机器创建机器配置池。
将节点添加到机器配置池。使用池的节点角色标签标记每个节点:
oc label node worker-2 node-role.kubernetes.io/mcp-offloading=""
$ oc label node worker-2 node-role.kubernetes.io/mcp-offloading=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要验证是否创建了新池,请运行以下命令:
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将此机器配置池添加到
SriovNetworkPoolConfig
自定义资源中:创建一个文件,如
sriov-pool-config.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于硬件卸载的机器配置池的名称。
应用配置:
oc create -f <SriovNetworkPoolConfig_name>.yaml
$ oc create -f <SriovNetworkPoolConfig_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您应用由
SriovNetworkPoolConfig
对象中指定的配置时,SR-IOV Operator 会排空并重启机器配置池中的节点。它可能需要几分钟时间来应用配置更改。
11.6. 配置 SR-IOV 网络节点策略 复制链接链接已复制到粘贴板!
您可以通过创建 SR-IOV 网络节点策略来为节点创建 SR-IOV 网络设备配置。要启用硬件卸载,您必须使用值 "switchdev"
定义 .spec.eSwitchMode
字段。
以下流程为带有硬件卸载的网络接口控制器创建 SR-IOV 接口。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
创建一个文件,如
sriov-node-policy.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用策略的配置:
oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您应用由
SriovNetworkPoolConfig
对象中指定的配置时,SR-IOV Operator 会排空并重启机器配置池中的节点。它可能需要几分钟时间来应用配置更改。
11.6.1. OpenStack 的 SR-IOV 网络节点策略示例 复制链接链接已复制到粘贴板!
以下示例描述了在 Red Hat OpenStack Platform (RHOSP) 上使用硬件卸载的网络接口控制器 (NIC) 的 SR-IOV 接口。
用于 RHOSP 上带有硬件卸载的 NIC 的 SR-IOV 接口
11.7. 使用虚拟功能提高网络流量性能 复制链接链接已复制到粘贴板!
按照以下步骤,为 OVN-Kubernetes 管理端口分配虚拟功能,并提高其网络流量性能。
此流程会导致创建两个池:第一个池具有 OVN-Kubernetes 使用的虚拟功能,第二个由剩余的虚拟功能组成。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
运行以下命令,将
network.operator.openshift.io/smart-nic
标签添加到带有 SmartNIC 的每个 worker 节点:oc label node <node-name> network.operator.openshift.io/smart-nic=
$ oc label node <node-name> network.operator.openshift.io/smart-nic=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc get nodes
命令获取可用节点的列表。为管理端口创建一个名为
sriov-node-mgmt-vf-policy.yaml
的策略,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
sriov-node-policy.yaml
的策略,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意sriov-node-mgmt-vf-policy.yaml
文件具有与sriov-node-policy.yaml
文件不同的pfNames
和resourceName
键的值。为这两个策略应用配置:
oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f sriov-node-mgmt-vf-policy.yaml
$ oc create -f sriov-node-mgmt-vf-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群中创建 Cluster Network Operator (CNO) ConfigMap 以进行管理配置:
创建名为
hardware-offload-config.yaml
的 ConfigMap,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 ConfigMap 的配置:
oc create -f hardware-offload-config.yaml
$ oc create -f hardware-offload-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.8. 创建网络附加定义 复制链接链接已复制到粘贴板!
在定义机器配置池和 SR-IOV 网络节点策略后,您可以为您指定的网络接口卡创建网络附加定义。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
创建一个文件,如
net-attach-def.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用网络附加定义的配置:
oc create -f net-attach-def.yaml
$ oc create -f net-attach-def.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,以查看是否存在新定义:
oc get net-attach-def -A
$ oc get net-attach-def -A
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME AGE net-attach-def net-attach-def 43h
NAMESPACE NAME AGE net-attach-def net-attach-def 43h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.9. 在 pod 中添加网络附加定义 复制链接链接已复制到粘贴板!
创建机器配置池后,SriovNetworkPoolConfig
和 SriovNetworkNodePolicy
自定义资源以及网络附加定义后,您可以通过在 pod 规格中添加网络附加定义来将这些配置应用到 pod。
流程
在 pod 规格中,添加
.metadata.annotations.k8s.v1.cni.cncf.io/networks
字段,并为硬件卸载指定您创建的网络附加定义:.... metadata: annotations: v1.multus-cni.io/default-network: net-attach-def/net-attach-def
.... metadata: annotations: v1.multus-cni.io/default-network: net-attach-def/net-attach-def
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 该值必须是您为硬件卸载而创建的网络附加定义的名称和命名空间。
第 12 章 将 Bluefield-2 从 DPU 切换到 NIC 复制链接链接已复制到粘贴板!
您可以将 Bluefield-2 网络设备从数据处理单元 (DPU) 模式切换到网络接口控制器 (NIC) 模式。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
12.1. 将 Bluefield-2 从 DPU 模式切换到 NIC 模式 复制链接链接已复制到粘贴板!
使用以下步骤将 Bluefield-2 从数据处理单元 (DPU) 模式切换到网络接口控制器 (NIC) 模式。
目前,只支持将 Bluefield-2 从 DPU 切换到 NIC 模式。不支持从 NIC 模式切换到 DPU 模式。
先决条件
- 已安装 SR-IOV Network Operator。如需更多信息,请参阅"安装 SR-IOV Network Operator"。
- 您已将 Bluefield-2 更新至最新的固件。如需更多信息,请参阅 NVIDIA BlueField-2 的固件。
流程
输入以下命令为每个计算节点添加以下标签。您必须为每个计算节点运行命令。
oc label node <node_name> node-role.kubernetes.io/sriov=
$ oc label node <node_name> node-role.kubernetes.io/sriov=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其中:
node_name
- 引用计算节点的名称。
为 SR-IOV Network Operator 创建机器配置池,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下
machineconfig.yaml
文件应用到计算节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选:可以选择性地指定特定卡的 PCI 地址,如
ExecStart=/bin/bash -c '/etc/default/switch_in_sriov_config_daemon.sh nic 0000:5e:00.0 || echo done'
。默认情况下会选择第一个设备。如果有多个设备,您必须指定要使用的 PCI 地址。在将 Bluefield-2 从 DPU 模式切换到 NIC 模式的所有节点上,PCI 地址必须相同。
- 等待计算节点重启。重启后,计算节点上的 Bluefield-2 网络设备切换到 NIC 模式。
- 可选:您可能需要重启主机硬件,因为最新的 Bluefield-2 固件版本需要硬件重启来切换到 NIC 模式。
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.