8.6. 将虚拟机连接到 SR-IOV 网络
您可以通过执行以下步骤将虚拟机 (VM) 连接到单根 I/O 虚拟化 (SR-IOV) 网络:
8.6.1. 配置 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>。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 为 CR 对象指定一个名称。
- 2
- 指定 SR-IOV Operator 安装到的命名空间。
- 3
- 指定 SR-IOV 设备插件的资源名称。您可以为一个资源名称创建多个SriovNetworkNodePolicy对象。
- 4
- 指定节点选择器来选择要配置哪些节点。只有所选节点上的 SR-IOV 网络设备才会被配置。SR-IOV Container Network Interface(CNI)插件和设备插件仅在所选节点上部署。
- 5
- 可选:指定一个0到99之间的整数。较小的数值具有较高的优先权,优先级10高于优先级99。默认值为99。
- 6
- 可选:为虚拟功能(VF)的最大传输单位 (MTU) 指定一个值。最大 MTU 值可能因不同的 NIC 型号而有所不同。
- 7
- 为 SR-IOV 物理网络设备指定要创建的虚拟功能 (VF) 的数量。对于 Intel 网络接口控制器(NIC),VF 的数量不能超过该设备支持的 VF 总数。对于 Mellanox NIC,VF 的数量不能超过127。
- 8
- nicSelector映射为 Operator 选择要配置的以太网设备。您不需要为所有参数指定值。建议您以足够的准确度来识别以太网适配器,以便尽量减小意外选择其他以太网设备的可能性。如果指定了- rootDevices,则必须同时为- vendor、- deviceID或- pfNames指定一个值。如果同时指定了- pfNames和- rootDevices,请确保它们指向同一个设备。
- 9
- 可选:指定 SR-IOV 网络设备的厂商十六进制代码。允许的值只能是8086或15b3。
- 10
- 可选:指定 SR-IOV 网络设备的设备十六进制代码。允许的值只能是158b、1015、1017。
- 11
- 可选:参数接受包括以太网设备的一个或多个物理功能 (PF) 的数组。
- 12
- 参数接受一个包括一个或多个 PCI 总线地址,用于以太网设备的物理功能的数组。使用以下格式提供地址:0000:02:00.1。
- 13
- OpenShift Virtualization 中的虚拟功能需要vfio-pci驱动程序类型。
- 14
- 可选:指定是否启用远程直接访问(RDMA)模式。对于 Mellanox 卡,请将isRdma设置为false。默认值为false。
 注意- 如果将 - RDMA标记设定为- true,您可以继续使用启用了 RDMA 的 VF 作为普通网络设备。设备可在其中的一个模式中使用。
- 
							可选:将 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 
8.6.2. 配置 SR-IOV 额外网络
					您可以通过创建一个 SriovNetwork 对象来配置使用 SR-IOV 硬件的额外网络。
				
					创建 SriovNetwork 对象时,SR-IOV Network Operator 会自动创建一个 NetworkAttachmentDefinition 对象。
				
						如果一个 SriovNetwork 对象已被附加到状态为 running 的 Pod 或虚拟机上,则不能修改或删除它。
					
先决条件
- 
							安装 OpenShift CLI(oc)。
- 
							以具有 cluster-admin特权的用户身份登录。
流程
- 
							创建以下 SriovNetwork对象,然后在<name>-sriov-network.yaml文件中保存 YAML。用这个额外网络的名称替换<name>。
- 1
- 将<name>替换为对象的名称。SR-IOV Network Operator 创建一个名称相同的NetworkAttachmentDefinition对象。
- 2
- 指定 SR-IOV Network Operator 安装到的命名空间。
- 3
- 将<sriov_resource_name>替换为来自为这个额外网络定义 SR-IOV 硬件的SriovNetworkNodePolicy对象的.spec.resourceName参数的值。
- 4
- 将<target_namespace>替换为 SriovNetwork 的目标命名空间。只有目标命名空间中的 pod 或虚拟机可以附加到 SriovNetwork。
- 5
- 可选:使用额外网络的虚拟 LAN (VLAN) ID 替换<vlan>。它需要是一个从0到4095范围内的一个整数值。默认值为0。
- 6
- 可选:将<spoof_check>替换为 VF 的 spoof 检查模式。允许的值是字符串"on"和"off"。重要指定的值必须由引号包括,否则 SR-IOV Network Operator 将拒绝 CR。 
- 7
- 可选:将<link_state>替换为 Virtual Function (VF) 的链接状态。允许的值是enable、disable和auto。
- 8
- 可选:将<max_tx_rate>替换为 VF 的最大传输率(以 Mbps 为单位)。
- 9
- 可选:将<min_tx_rate>替换为 VF 的最小传输率(以 Mbps 为单位)。这个值应该总是小于或等于最大传输率。注意Intel NIC 不支持 minTxRate参数。如需更多信息,请参阅 BZ#1772847。
- 10
- 可选:将<vlan_qos>替换为 VF 的 IEEE 802.1p 优先级级别。默认值为0。
- 11
- 可选:将<trust_vf>替换为 VF 的信任模式。允许的值是字符串"on"和"off"。重要指定的值必须由引号包括,否则 SR-IOV Network Operator 将拒绝 CR。 
- 12
- 可选:将<capabilities>替换为为这个网络配置的功能。
- 运行以下命令来创建对象。用这个额外网络的名称替换 - <name>。- oc create -f <name>-sriov-network.yaml - $ oc create -f <name>-sriov-network.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选: 要确认与您在上一步中创建的 - SriovNetwork对象关联的- NetworkAttachmentDefinition对象是否存在,请输入以下命令。将- <namespace>替换为您在- SriovNetwork对象中指定的命名空间。- oc get net-attach-def -n <namespace> - $ oc get net-attach-def -n <namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
8.6.3. 使用命令行将虚拟机连接到 SR-IOV 网络
您可以通过在虚拟机配置中包含网络详情将虚拟机 (VM) 连接到 SR-IOV 网络。
流程
- 将 SR-IOV 网络详情添加到虚拟机配置的 - spec.domain.devices.interfaces和- spec.networks小节中,如下例所示:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 应用虚拟机配置: - oc apply -f <vm_sriov>.yaml - $ oc apply -f <vm_sriov>.yaml- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 虚拟机 YAML 文件的名称。
 
8.6.4. 使用 Web 控制台将虚拟机连接到 SR-IOV 网络
您可以通过在虚拟机配置中包含网络详情将虚拟机连接到 SR-IOV 网络。
先决条件
- 您必须为网络创建网络附加定义。
流程
- 
							进入到 Virtualization VirtualMachines。 
- 点虚拟机查看 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Network interfaces 选项卡。
- 点 Add network interface。
- 输入接口名称。
- 从 Network 列表中选择 SR-IOV 网络附加定义。
- 
							从 Type 列表中选择 SR-IOV。
- 可选:添加网络 Model 或 Mac 地址。
- 点击 Save。
- 重启或实时迁移虚拟机以应用更改。