This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.17.7. 将 pod 添加到额外网络
您可以将 pod 添加到现有的单根 I/O 虚拟化(SR-IOV)网络。
17.7.1. 网络附加的运行时配置 复制链接链接已复制到粘贴板!
将 pod 附加到额外网络时,您可以指定运行时配置来为 pod 进行特定的自定义。例如,,您可以请求特定的 MAC 硬件地址。
您可以通过在 pod 规格中设置注解来指定运行时配置。注解键是 k8s.v1.cni.cncf.io/networks
,它接受描述运行时配置的 JSON 对象。
17.7.1.1. 基于以太网的 SR-IOV 附加的运行时配置 复制链接链接已复制到粘贴板!
以下 JSON 描述了基于以太网的 SR-IOV 网络附加的运行时配置选项。
运行时配置示例
17.7.1.2. 基于 InfiniBand 的 SR-IOV 附加的运行时配置 复制链接链接已复制到粘贴板!
以下 JSON 描述了基于 InfiniBand 的 SR-IOV 网络附加的运行时配置选项。
运行时配置示例
17.7.2. 将 pod 添加到额外网络 复制链接链接已复制到粘贴板!
您可以将 pod 添加到额外网络。pod 继续通过默认网络发送与集群相关的普通网络流量。
创建 pod 时会附加额外网络。但是,如果 pod 已存在,您无法为其附加额外网络。
pod 必须与额外网络处于相同的命名空间。
SR-IOV Network Resource Injector 会自动将 resource
字段添加到 pod 中的第一个容器中。
如果您在 Data Plane Development Kit(DPDK)模式下使用 Intel 网络接口控制器(NIC),则只有 pod 中的第一个容器被配置为访问 NIC。如果在 SriovNetworkNodePolicy
对象中将 deviceType
设置为 vfio-pci
,则您的 SR-IOV 额外网络被配置为 DPDK 模式。
您可以通过确保需要访问 NIC 的容器是 Pod
对象定义的第一个容器,或者禁用 Network Resource Injector(Network Resource Injector)来解决此问题。如需更多信息,请参阅 BZ#1990953。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 登录到集群。
- 安装 SR-IOV Operator。
-
创建
SriovNetwork
对象或SriovIBNetwork
对象以将 pod 附加到。
流程
为
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/networks-status
参数是对象的 JSON 数组。每个对象描述附加到 pod 的额外网络的状态。注解值保存为纯文本值。
17.7.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 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