3.7. 排除 NUMA 感知调度的 SR-IOV 网络拓扑


要将 SR-IOV 网络资源的 Non-Uniform Memory Access (NUMA)节点排除到拓扑管理器,您可以在 SriovNetworkNodePolicy 自定义资源中配置 excludeTopology 规格。在 NUMA 感知 pod 调度过程中,使用此配置来实现更灵活的 SR-IOV 网络部署。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您已将 CPU Manager 策略配置为 static。有关 CPU Manager 的更多信息,请参阅附加资源部分。
  • 您已将 Topology Manager 策略配置为 single-numa-node
  • 已安装 SR-IOV Network Operator。

流程

  1. 创建 SriovNetworkNodePolicy CR:

    1. 将以下 YAML 保存到 sriov-network-node-policy.yaml 文件中,替换 YAML 中的值以匹配您的环境:

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: <policy_name>
        namespace: openshift-sriov-network-operator
      spec:
        resourceName: sriovnuma0 
      1
      
        nodeSelector:
          kubernetes.io/hostname: <node_name>
        numVfs: <number_of_Vfs>
        nicSelector: 
      2
      
          vendor: "<vendor_ID>"
          deviceID: "<device_ID>"
        deviceType: netdevice
        excludeTopology: true 
      3
      Copy to Clipboard Toggle word wrap
      1
      SR-IOV 网络设备插件的资源名称。此 YAML 使用示例 resourceName 值。
      2
      使用网络接口控制器(NIC 选择器)识别要配置的 Operator 的设备。
      3
      要将 SR-IOV 网络资源的 NUMA 节点排除到拓扑管理器,请将值设为 true。默认值为 false
      注意

      如果许多 SriovNetworkNodePolicy 资源以相同的 SR-IOV 网络资源为目标,则 SriovNetworkNodePolicy 资源必须具有与 excludeTopology 规格相同的值。否则,冲突策略将被拒绝。

    2. 运行以下命令来创建 SriovNetworkNodePolicy 资源。成功输出列出了 SriovNetworkNodePolicy 资源的名称 以及创建 的状态。

      $ oc create -f sriov-network-node-policy.yaml
      Copy to Clipboard Toggle word wrap
  2. 创建 SriovNetwork CR:

    1. 将以下 YAML 保存到 sriov-network.yaml 文件中,替换 YAML 中的值以匹配您的环境:

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: sriov-numa-0-network 
      1
      
        namespace: openshift-sriov-network-operator
      spec:
        resourceName: sriovnuma0 
      2
      
        networkNamespace: <namespace> 
      3
      
        ipam: |- 
      4
      
          {
            "type": "<ipam_type>",
          }
      Copy to Clipboard Toggle word wrap
      1
      sriov-numa-0-network 替换为 SR-IOV 网络资源的名称。
      2
      指定上一步中的 SriovNetworkNodePolicy CR 的资源名称。此 YAML 使用示例 resourceName 值。
      3
      输入 SR-IOV 网络资源的命名空间。
      4
      输入 SR-IOV 网络的 IP 地址管理配置。
    2. 运行以下命令来创建 SriovNetwork 资源。成功输出列出了 SriovNetwork 资源的名称 以及创建 的状态。

      $ oc create -f sriov-network.yaml
      Copy to Clipboard Toggle word wrap
  3. 创建 pod 并从上一步中分配 SR-IOV 网络资源:

    1. 将以下 YAML 保存到 sriov-network-pod.yaml 文件中,替换 YAML 中的值以匹配您的环境:

      apiVersion: v1
      kind: Pod
      metadata:
        name: <pod_name>
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "sriov-numa-0-network", 
      1
      
              }
            ]
      spec:
        containers:
        - name: <container_name>
          image: <image>
          imagePullPolicy: IfNotPresent
          command: ["sleep", "infinity"]
      Copy to Clipboard Toggle word wrap
      1
      这是使用 SriovNetworkNodePolicy 资源的 SriovNetwork 资源的名称。
    2. 运行以下命令来创建 Pod 资源。预期输出显示 Pod 资源的名称 以及创建 的状态。

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

验证

  1. 运行以下命令,将 <pod_name> 替换为 pod 的名称来验证 pod 的状态:

    $ oc get pod <pod_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                     READY   STATUS    RESTARTS   AGE
    test-deployment-sriov-76cbbf4756-k9v72   1/1     Running   0          45h
    Copy to Clipboard Toggle word wrap

  2. 打开目标 pod 的 debug 会话,以验证 SR-IOV 网络资源是否已部署到与内存和 CPU 资源不同的节点上。

    1. 运行以下命令,使用 pod 打开 debug 会话,将 <pod_name> 替换为目标 pod 名称。

      $ oc debug pod/<pod_name>
      Copy to Clipboard Toggle word wrap
    2. /host 设为 debug shell 中的根目录。debug pod 从 pod 中的 /host 中的主机挂载 root 文件系统。将根目录改为 /host,您可以从主机文件系统中运行二进制文件:

      $ chroot /host
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,查看有关 CPU 分配的信息:

      $ lscpu | grep NUMA
      Copy to Clipboard Toggle word wrap

      输出示例

      NUMA node(s):                    2
      NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,...
      NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,...
      Copy to Clipboard Toggle word wrap

      $ cat /proc/self/status | grep Cpus
      Copy to Clipboard Toggle word wrap

      输出示例

      Cpus_allowed:	ffff
      Cpus_allowed_list:	1,3,5,7
      Copy to Clipboard Toggle word wrap

      预期输出显示分配给 NUMA 节点的 CPU (1、3、5 和 7),如 NUMA node1。SR-IOV 网络资源可以使用另一个 NUMA 节点的 NIC,如 NUMA node0。请注意,ffff 十六进制值代表运行进程的 CPU 内核。

      $ cat  /sys/class/net/net1/device/numa_node
      Copy to Clipboard Toggle word wrap

      预期输出显示 NUMA 节点的数量,如 0。

      注意

      如果将 excludeTopology 规格设为 True,则所需资源可能存在于同一个 NUMA 节点上。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat