12.5. 配置单个 NUMA 节点策略


NUMA Resources Operator 要求在集群中配置单个 NUMA 节点策略。这可以通过创建并应用性能配置集或配置 KubeletConfig 来实现。

注意

配置单个 NUMA 节点策略的首选方法是应用性能配置集。您可以使用 Performance Profile Creator (PPC) 工具来创建性能配置集。如果在集群中创建了性能配置集,它会自动创建 KubeletConfigtuned 配置集等其他调优组件。

有关创建性能配置集的更多信息,请参阅"添加资源"部分中的"关于 Performance Profile Creator"。

12.5.1. 为 NUMA 感知调度程序管理高可用性(HA)

重要

管理高可用性只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

NUMA Resources Operator 根据 NUMAResourcesScheduler 自定义资源(CR)中的 spec.replicas 字段管理 NUMA 感知二级调度程序的高可用性。默认情况下,NUMA Resources Operator 会自动为每个 control plane 节点创建一个调度程序副本来启用 HA 模式,最多有三个副本。

以下清单演示了这种默认行为。要自动启用副本检测,请省略 replicas 字段。

apiVersion: nodetopology.openshift.io/v1
kind: NUMAResourcesScheduler
metadata:
  name: example-auto-ha
spec:
  imageSpec: 'registry.redhat.io/openshift4/noderesourcetopology-scheduler-rhel9:v4.20'
  # The 'replicas' field is not included, enabling auto-detection.
Copy to Clipboard Toggle word wrap

您可以使用以下选项之一控制调度程序行为:

  • 自定义副本数量。
  • 禁用 NUMA 感知调度。

12.5.1.1. 自定义调度程序副本

通过更新 NUMAResourcesScheduler 自定义资源中的 spec.replicas 字段来设置特定数量的调度程序副本。这会覆盖默认的 HA 行为。

流程

  1. 使用以下 YAML 创建 NUMAResourcesScheduler CR,如 custom-ha.yaml,将副本数设置为 2:

    apiVersion: nodetopology.openshift.io/v1
    kind: NUMAResourcesScheduler
    metadata:
      name: example-custom
    spec:
      imageSpec: 'registry.redhat.io/openshift4/noderesourcetopology-scheduler-rhel9:v4.20'
      replicas: 2
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令部署 NUMA 感知 pod 调度程序:

    $ oc apply -f custom-ha.yaml
    Copy to Clipboard Toggle word wrap

12.5.1.2. 禁用 NUMA 感知调度

禁用 NUMA 感知调度程序,停止所有正在运行的调度程序 pod,并防止新调度程序启动。

流程

  1. nro-disable-scheduler.yaml 文件中保存以下最小所需的 YAML。通过将 spec.replicas 字段设置为 0 来禁用调度程序。

    apiVersion: nodetopology.openshift.io/v1
    kind: NUMAResourcesScheduler
    metadata:
      name: example-disable
    spec:
      imageSpec: 'registry.redhat.io/openshift4/noderesourcetopology-scheduler-rhel9:v4.20'
      replicas: 0
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令禁用 NUMA 感知 pod 调度程序:

    $ oc apply -f nro-disable-scheduler.yaml
    Copy to Clipboard Toggle word wrap

12.5.1.3. 验证调度程序高可用性(HA)状态

验证 NUMA 感知调度程序的状态,以确保它根据您的配置使用预期的副本数。

流程

  1. 运行以下命令仅列出调度程序 pod:

    $ oc get pods -n openshift-numaresources -l app=secondary-scheduler
    Copy to Clipboard Toggle word wrap

    预期输出

    使用默认 HA 模式,pod 数量等于 control-plane 节点的数量。标准 HA OpenShift Container Platform 集群通常有三个 control-plane 节点,因此显示三个 pod:

    NAME                                   READY   STATUS    RESTARTS   AGE
    secondary-scheduler-5b8c9d479d-2r4p5   1/1     Running   0          5m
    secondary-scheduler-5b8c9d479d-k2f3p   1/1     Running   0          5m
    secondary-scheduler-5b8c9d479d-q8c7b   1/1     Running   0          5m
    Copy to Clipboard Toggle word wrap
    • 如果 自定义副本,则 pod 的数量与您设置的值匹配。
    • 如果您禁用了调度程序, 则没有正在运行的带有此标签的 pod。

      注意

      对 NUMA 感知调度程序强制执行 3 个副本的限制。在托管的 control plane 集群中,调度程序 pod 在 hosted-cluster 的 worker 节点上运行。

  2. 运行以下命令,验证副本数及其状态:

    $ oc get deployment secondary-scheduler -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
    secondary-scheduler   3/3     3            3           5m
    Copy to Clipboard Toggle word wrap

    在这个输出中,3/3 表示 3 个副本已经从预期的 3 个副本中就绪。

  3. 如需更详细的信息,请运行以下命令:

    $ oc describe deployment secondary-scheduler -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    输出示例

    Replicas 行显示为 3 个副本配置的部署,所有 3 个更新且可用。

    Replicas:        3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    Copy to Clipboard Toggle word wrap

12.5.2. 性能配置集示例

此 YAML 示例显示使用性能配置集创建器(PPC) 工具创建的性能配置集:

apiVersion: performance.openshift.io/v2
kind: PerformanceProfile
metadata:
  name: performance
spec:
  cpu:
    isolated: "3"
    reserved: 0-2
  machineConfigPoolSelector:
    pools.operator.machineconfiguration.openshift.io/worker: "" 
1

  nodeSelector:
    node-role.kubernetes.io/worker: ""
  numa:
    topologyPolicy: single-numa-node 
2

  realTimeKernel:
    enabled: true
  workloadHints:
    highPowerConsumption: true
    perPodPowerManagement: false
    realTime: true
Copy to Clipboard Toggle word wrap
1
这个值需要与您要配置 NUMA Resources Operator 的 MachineConfigPool 值匹配。例如,您可以创建一个名为 worker-cnfMachineConfigPool 对象,它指定电信工作负载在其中运行的一组节点。MachineConfigPool 的值必须与稍后在"创建 NUMAResourcesOperator 自定义资源"中配置的 NUMAResourcesOperator CR 中的 machineConfigPoolSelector 值匹配。
2
确保 topologyPolicy 字段被设置为 single-numa-node,方法是在运行 PPC 工具时将 topology-manager-policy 参数设置为 single-numa-node
注意

对于托管的 control plane 集群,MachineConfigPoolSelector 并没有任何功能上的效果。节点关联由特定的 NodePool 对象决定。

12.5.3. 创建 KubeletConfig CR

配置单个 NUMA 节点策略的建议方法是应用性能配置集。另一种方法是创建并应用 KubeletConfig 自定义资源 (CR),如下所示。

流程

  1. 创建 KubeletConfig 自定义资源 (CR) 来为机器配置集配置 pod admittance 策略:

    1. 将以下 YAML 保存到 nro-kubeletconfig.yaml 文件中:

      apiVersion: machineconfiguration.openshift.io/v1
      kind: KubeletConfig
      metadata:
        name: worker-tuning
      spec:
        machineConfigPoolSelector:
          matchLabels:
            pools.operator.machineconfiguration.openshift.io/worker: "" 
      1
      
        kubeletConfig:
          cpuManagerPolicy: "static" 
      2
      
          cpuManagerReconcilePeriod: "5s"
          reservedSystemCPUs: "0,1" 
      3
      
          memoryManagerPolicy: "Static" 
      4
      
          evictionHard:
            memory.available: "100Mi"
          kubeReserved:
            memory: "512Mi"
          reservedMemory:
            - numaNode: 0
              limits:
                memory: "1124Mi"
          systemReserved:
            memory: "512Mi"
          topologyManagerPolicy: "single-numa-node" 
      5
      Copy to Clipboard Toggle word wrap
      1
      确保此标签与稍后在"创建 NUMAResourcesOperator 自定义资源"中配置的 NUMAResourcesOperator CR 中的 machineConfigPoolSelector 设置匹配。
      2
      对于 cpuManagerPolicystatic 必须使用小写 s
      3
      根据您的节点上的 CPU 进行调整。
      4
      对于 memoryManagerPolicyStatic 必须使用大写 S
      5
      topologyManagerPolicy 必须设置为 single-numa-node
      注意

      对于托管的 control plane 集群,MachineConfigPoolSelector 设置并没有任何功能上的效果。节点关联由特定的 NodePool 对象决定。要为托管的 control plane 集群应用 KubeletConfig,您必须创建一个包含配置的 ConfigMap,然后在 NodePoolspec.config 字段中引用该 ConfigMap

    2. 运行以下命令来创建 KubeletConfig CR:

      $ oc create -f nro-kubeletconfig.yaml
      Copy to Clipboard Toggle word wrap
      注意

      应用性能配置集或 KubeletConfig 会自动触发节点重新引导。如果没有触发重启,您可以通过查看处理节点组的 KubeletConfig 中的标签来排除此问题。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat