第 5 章 配置命名空间的 SR-IOV 资源
Namespaced SriovNetwork Resources 允许应用程序所有者在其命名空间中直接创建和管理自己的 SriovNetwork 资源,而不依赖于集群管理员在共享 Operator 命名空间中进行配置。此方法简化了权限,提高安全性,并在应用程序之间更好地分离。
5.1. 命名空间 SriovNetwork 资源简介 复制链接链接已复制到粘贴板!
SR-IOV 网络可以直接在应用程序命名空间中创建和管理。此功能为应用程序所有者提供对网络配置的精细控制,从而简化其工作流。
这个方法提供了几个改进用户体验的关键优势:
-
增加了 Autonomy 和 Control: 应用程序所有者可直接控制其网络配置,使集群管理员无需代表他们创建
SriovNetwork
对象。 - 增强安全性:通过允许用户管理自己命名空间中的资源,该功能可提高安全性,并在应用程序之间进行更好的隔离。这也有助于避免其他应用的 NetworkAttachmentDefinition 对象的意外错误配置。
-
简化权限 :直接在其自己的命名空间中管理
SriovNetwork
资源简化了用户权限。这简化了工作流,并减少了开发人员的操作开销。
5.1.1. 在应用程序命名空间中配置 SriovNetwork 复制链接链接已复制到粘贴板!
当 SriovNetwork 自定义资源(CR)部署到应用程序命名空间中时,不要定义或填充 spec.networkNamespace
字段。在这种情况下,将会在与 SriovNetwork CR 相同的命名空间中创建 NetworkAttachmentDefinition。
如果定义了 spec.networkNamespace
字段,SR-IOV Network Operator Webhook 会拒绝在应用程序命名空间中创建 SriovNetwork
资源。
按照以下步骤在应用程序命名空间中创建 SriovNetwork
资源,并将 pod 附加到额外网络。
先决条件
在应用程序所有者可以配置命名空间 SriovNetwork 资源前,集群管理员必须完成以下步骤:
-
SR-IOV Network Operator 安装在
openshift-sriov-network-operator
命名空间中。 - 带有 SR-IOV 硬件的节点为 Operator 标识节点。
作为应用程序所有者,您需要在应用程序命名空间中具有管理员特权。
流程
通过创建 SR-IOV 网络节点策略,为节点指定 SR-IOV 网络设备配置。
SriovNetworkNodePolicy
对象在openshift-sriov-network-operator
命名空间中创建,以定义节点的 SR-IOV 网络设备配置。Intel DPK 配置示例如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建应用程序命名空间。例如,运行以下命令来创建名为
sriov-app
的命名空间:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 YAML 文件,如
sriovnetwork.yaml
,在应用程序命名空间中定义SriovNetwork
对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Namespace : 值必须与应用程序命名空间的名称匹配,如
sriov-app
。 -
resourceName
:此值必须与集群管理员创建的SriovNetworkNodePolicy
中定义的spec.resourceName
匹配,本例中为intelnics
。
-
Namespace : 值必须与应用程序命名空间的名称匹配,如
应用 YAML 文件,在应用程序命名空间中创建
SriovNetwork
对象。oc create -f sriovnetwork.yaml
$ oc create -f sriovnetwork.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用程序所有者创建 SriovNetwork 资源后,他们可以创建使用新定义的网络的 pod。您可以通过在 pod 的 YAML 清单中添加特定的注解,将 pod 附加到额外网络。
创建一个 YAML 文件,如
test-pod.yaml
,以定义使用新网络附加的 pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Namespace :创建 pod 的命名空间。
这必须与
SriovNetwork
对象创建的命名空间相同。 -
annotations
:k8s.v1.cni.cncf.io/networks
指定 pod 连接到的额外网络。该值必须与SriovNetwork
对象的metadata.name
匹配。
-
Namespace :创建 pod 的命名空间。
运行以下命令应用 YAML 文件,以在应用程序命名空间中创建 pod:
oc create -f test-pod.yaml
$ oc create -f test-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证 NetworkAttachmentDefinition 是否已创建在同一命名空间中:
oc get net-attach-def -n sriov-app
$ oc get net-attach-def -n sriov-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
sriov-app
是创建SriovNetwork
对象的应用程序命名空间。输出示例
NAME AGE test-network 2m
NAME AGE test-network 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令描述 pod,验证 pod 是否正在运行并获取其网络状态:
oc describe pod test-pod -n sriov-app
$ oc describe pod test-pod -n sriov-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
sriov-app
是创建 pod 的应用程序命名空间。在输出中,查找
k8s.v1.cni.cncf.io/network-status
注解。这将显示网络的名称,以及分配给该接口上 pod 的 IP。运行以下命令,检查 pod 是否有额外的网络接口:
oc exec -it test-pod -n sriov-app -- ip a
$ oc exec -it test-pod -n sriov-app -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 除了默认的 eth0 接口外,还查找二级网络接口,如
net1
或eth1
。net1
接口应具有来自您在 SriovNetwork 对象中定义的子网的 IP 地址,如10.0.0.0/24
。这将确认 pod 正在使用新的网络附加定义。