18.4. 配置 SR-IOV InfiniBand 网络附加
您可以为集群中的单根 I/O 虚拟化(SR-IOV)设备配置 InfiniBand(IB)网络附加。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
18.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)支持。
18.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 
18.4.1.2. 配置网络附加的 IP 地址分配
IP 地址管理 (IPAM) Container Network Interface (CNI) 插件为其他 CNI 插件提供 IP 地址。
您可以使用以下 IP 地址分配类型:
- 静态分配。
- 通过 DHCP 服务器进行动态分配。您指定的 DHCP 服务器必须可从额外网络访问。
- 通过 Whereabouts IPAM CNI 插件进行动态分配。
18.4.1.2.1. 静态 IP 地址分配配置
下表描述了静态 IP 地址分配的配置:
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
											 | 
											 | 
											IPAM 地址类型。值必须是  | 
| 
											 | 
											 | 指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。 | 
| 
											 | 
											 | 指定要在 pod 中配置的路由的一组对象。 | 
| 
											 | 
											 | 可选:指定 DNS 配置的对象数组。 | 
							address 数组需要带有以下字段的对象:
						
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
											 | 
											 | 
											您指定的 IP 地址和网络前缀。例如,如果您指定了  | 
| 
											 | 
											 | 出口网络流量要路由到的默认网关。 | 
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
											 | 
											 | 
											CIDR 格式的 IP 地址范围,如  | 
| 
											 | 
											 | 路由网络流量的网关。 | 
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
											 | 
											 | 发送 DNS 查询的一个或多个 IP 地址的数组。 | 
| 
											 | 
											 | 
											要附加到主机名的默认域。例如,如果将域设置为  | 
| 
											 | 
											 | 
											在 DNS 查找查询过程中,附加到非限定主机名(如  | 
静态 IP 地址分配配置示例
18.4.1.2.2. 动态 IP 地址(DHCP)分配配置
pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。
对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。
要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:
shim 网络附加定义示例
- 1
- 为集群指定动态 IP 地址(DHCP)分配。
下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
											 | 
											 | 
											IPAM 地址类型。需要值  | 
以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。
动态 IP 地址(DHCP)分配配置示例
{
  "ipam": {
    "type": "dhcp"
  }
}
{
  "ipam": {
    "type": "dhcp"
  }
}18.4.1.2.3. 使用 Whereabouts 进行动态 IP 地址分配配置
Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给额外网络。
							Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。
						
18.4.1.2.3.1. 动态 IP 地址配置对象
下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
												 | 
												 | 
												IPAM 地址类型。需要  | 
| 
												 | 
												 | CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。 | 
| 
												 | 
												 | 可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。 | 
| 
												 | 
												 | 可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。 | 
18.4.1.2.3.2. 使用 Whereabouts 的动态 IP 地址分配配置
以下示例显示了使用 Whereabouts 的动态地址分配配置:
Whereabouts 动态 IP 地址分配
18.4.1.2.3.3. 使用 Whereabouts 带有重叠 IP 地址范围的动态 IP 地址分配
以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。
NetworkAttachmentDefinition 1
- 1
- 可选。如果设置,必须与NetworkAttachmentDefinition 2的network_name匹配。
NetworkAttachmentDefinition 2
- 1
- 可选。如果设置,必须与NetworkAttachmentDefinition 1的network_name匹配。
18.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 
18.4.3. 基于 InfiniBand 的 SR-IOV 附加的运行时配置
将 pod 附加到额外网络时,您可以指定运行时配置来为 pod 进行特定的自定义。例如,,您可以请求特定的 MAC 硬件地址。
					您可以通过在 pod 规格中设置注解来指定运行时配置。注解键是 k8s.v1.cni.cncf.io/network,它接受一个 JSON 对象来描述运行时配置。
				
以下 JSON 描述了基于 InfiniBand 的 SR-IOV 网络附加的运行时配置选项。
运行时配置示例
18.4.4. 将 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 
- 可选: 要确认 - PodCR 中是否存在注解,请输入以下命令将- <name>替换为 pod 的名称。- oc get pod <name> -o yaml - $ oc get pod <name> -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 在以下示例中, - example-podpod 附加到- net1额外网络:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- k8s.v1.cni.cncf.io/network-status参数是对象的 JSON 数组。每个对象描述附加到 pod 的额外网络的状态。注解值保存为纯文本值。