13.7.2. 将 pod 添加到额外网络
您可以将 pod 添加到额外网络。pod 继续通过默认网络发送与集群相关的普通网络流量。
创建 pod 时会附加额外网络。但是,如果 pod 已存在,您无法为其附加额外网络。
pod 必须与额外网络处于相同的命名空间。
SR-IOV 网络资源注入器会自动将 resource
字段添加到 pod 中的第一个容器中。
如果您在 Data Plane Development Kit(DPDK)模式中使用 Intel 网络接口控制器(NIC),则只有 pod 中的第一个容器被配置为访问 NIC。如果在 SriovNetworkNodePolicy
对象中的 deviceType
设置为 vfio-pci,则会为 DPDK 模式配置 SR-
IOV 额外网络。
您可以解决此问题,方法是确保需要访问 NIC 的容器是 Pod
对象中定义的第一个容器,或者禁用 Network Resource Injector。如需更多信息,请参阅 BZ# 953。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 登录到集群。
- 安装 SR-IOV Operator。
-
创建
SriovNetwork
对象或SriovIBNetwork
对象以将 pod 附加到。
流程
为
Pod
对象添加注解。只能使用以下注解格式之一:要在没有自定义的情况下附加额外网络,请使用以下格式添加注解。将
<network>
替换为要与 pod 关联的额外网络的名称:metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...] 1
- 1
- 要指定多个额外网络,请使用逗号分隔各个网络。逗号之间不可包括空格。如果您多次指定同一额外网络,则该 pod 会将多个网络接口附加到该网络。
要通过自定义来附加额外网络,请添加具有以下格式的注解:
metadata: annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "<network>", 1 "namespace": "<namespace>", 2 "default-route": ["<default-route>"] 3 } ]
运行以下命令来创建 pod。将
<name>
替换为 pod 的名称。$ oc create -f <name>.yaml
可选: 要确认
Pod
CR 中是否存在注解,请输入以下命令将<name>
替换为 pod 的名称。$ oc get pod <name> -o yaml
在以下示例中,
example-pod
pod 附加到net1
额外网络:$ oc get pod example-pod -o yaml apiVersion: v1 kind: Pod metadata: annotations: k8s.v1.cni.cncf.io/networks: macvlan-bridge k8s.v1.cni.cncf.io/networks-status: |- 1 [{ "name": "openshift-sdn", "interface": "eth0", "ips": [ "10.128.2.14" ], "default": true, "dns": {} },{ "name": "macvlan-bridge", "interface": "net1", "ips": [ "20.2.2.100" ], "mac": "22:2f:60:a5:f8:00", "dns": {} }] name: example-pod namespace: default spec: ... status: ...
- 1
k8s.v1.cni.cncf.io/networks-status
参数是对象的 JSON 数组。每个对象描述附加到 pod 的额外网络的状态。注解值保存为纯文本值。