第 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 配置示例如下:apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: intel-dpdk-node-policy namespace: openshift-sriov-network-operator spec: resourceName: intelnics nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: 10 numVfs: 4 nicSelector: vendor: "8086" deviceID: "158b" pfNames: [""] deviceType: netdevice创建应用程序命名空间。例如,运行以下命令来创建名为
sriov-app的命名空间:$ cat <<EOF | oc create -f - apiVersion: v1 kind: Namespace metadata: name: sriov-app EOF创建一个 YAML 文件,如
sriovnetwork.yaml,在应用程序命名空间中定义SriovNetwork对象。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: test-network namespace: sriov-app spec: resourceName: intelnics ipam: type: host-local subnet: "10.0.0.0/24" routes: - dst: "0.0.0.0/0" gw: "10.0.0.1" vlan: 10-
namespace: 值必须与应用程序命名空间的名称匹配,如sriov-app。 -
resourceName:此值必须与集群管理员创建的SriovNetworkNodePolicy中定义的spec.resourceName匹配,本例中为intelnics。
-
应用 YAML 文件,在应用程序命名空间中创建
SriovNetwork对象。$ oc create -f sriovnetwork.yaml应用程序所有者创建 SriovNetwork 资源后,他们可以创建使用新定义的网络的 pod。您可以通过在 pod 的 YAML 清单中添加特定的注解,将 pod 附加到额外网络。
创建一个 YAML 文件,如
test-pod.yaml,以定义使用新网络附加的 pod:apiVersion: v1 kind: Pod metadata: name: test-pod namespace: sriov-app annotations: k8s.v1.cni.cncf.io/networks: test-network spec: containers: - name: test-pod-container image: centos/tools command: ["/bin/bash", "-c", "sleep 3600"]-
namespace:创建 pod 的命名空这必须与SriovNetwork对象创建的命名空间相同。 -
annotations:k8s.v1.cni.cncf.io/networks指定 pod 连接到的额外网络。该值必须与SriovNetwork对象的metadata.name匹配。
-
运行以下命令应用 YAML 文件,以在应用程序命名空间中创建 pod:
$ oc create -f test-pod.yaml
验证
运行以下命令,验证 NetworkAttachmentDefinition 是否已创建在同一命名空间中:
$ oc get net-attach-def -n sriov-app其中
sriov-app是创建SriovNetwork对象的应用程序命名空间。输出示例
NAME AGE test-network 2m使用以下命令描述 pod,验证 pod 是否正在运行并获取其网络状态:
$ oc describe pod test-pod -n sriov-app其中
sriov-app是创建 pod 的应用程序命名空间。在输出中,查找
k8s.v1.cni.cncf.io/network-status注解。这将显示网络的名称,以及分配给该接口上 pod 的 IP。运行以下命令,检查 pod 是否有额外的网络接口:
$ oc exec -it test-pod -n sriov-app -- ip a除了默认的 eth0 接口外,还查找二级网络接口,如
net1或eth1。net1接口应具有来自您在 SriovNetwork 对象中定义的子网的 IP 地址,如10.0.0.0/24。这将确认 pod 正在使用新的网络附加定义。