第 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 标识节点。

作为应用程序所有者,您需要在应用程序命名空间中具有管理员特权。

流程

  1. 通过创建 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
    Copy to Clipboard Toggle word wrap
  2. 创建应用程序命名空间。例如,运行以下命令来创建名为 sriov-app 的命名空间:

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: Namespace
    metadata:
        name: sriov-app
    EOF
    Copy to Clipboard Toggle word wrap
  3. 创建一个 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
    Copy to Clipboard Toggle word wrap
    • Namespace : 值必须与应用程序命名空间的名称匹配,如 sriov-app
    • resourceName :此值必须与集群管理员创建的 SriovNetworkNodePolicy 中定义的 spec.resourceName 匹配,本例中为 intelnics
  4. 应用 YAML 文件,在应用程序命名空间中创建 SriovNetwork 对象。

    $ oc create -f sriovnetwork.yaml
    Copy to Clipboard Toggle word wrap

    应用程序所有者创建 SriovNetwork 资源后,他们可以创建使用新定义的网络的 pod。您可以通过在 pod 的 YAML 清单中添加特定的注解,将 pod 附加到额外网络。

  5. 创建一个 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"]
    Copy to Clipboard Toggle word wrap
    • Namespace :创建 pod 的命名空间。这必须与 SriovNetwork 对象创建的命名空间相同。
    • annotations:k8s.v1.cni.cncf.io/networks 指定 pod 连接到的额外网络。该值必须与 SriovNetwork 对象的 metadata.name 匹配。
  6. 运行以下命令应用 YAML 文件,以在应用程序命名空间中创建 pod:

    $ oc create -f test-pod.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证 NetworkAttachmentDefinition 是否已创建在同一命名空间中:

    $ oc get net-attach-def -n sriov-app
    Copy to Clipboard Toggle word wrap

    其中 sriov-app 是创建 SriovNetwork 对象的应用程序命名空间。

    输出示例

    NAME           AGE
    test-network   2m
    Copy to Clipboard Toggle word wrap

  2. 使用以下命令描述 pod,验证 pod 是否正在运行并获取其网络状态:

    $ oc describe pod test-pod -n sriov-app
    Copy to Clipboard Toggle word wrap

    其中 sriov-app 是创建 pod 的应用程序命名空间。

    在输出中,查找 k8s.v1.cni.cncf.io/network-status 注解。这将显示网络的名称,以及分配给该接口上 pod 的 IP。

  3. 运行以下命令,检查 pod 是否有额外的网络接口:

    $ oc exec -it test-pod -n sriov-app -- ip a
    Copy to Clipboard Toggle word wrap

    除了默认的 eth0 接口外,还查找二级网络接口,如 net1eth1net1 接口应具有来自您在 SriovNetwork 对象中定义的子网的 IP 地址,如 10.0.0.0/24。这将确认 pod 正在使用新的网络附加定义。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat