第 18 章 使用性能配置集调整托管的 control plane 以实现低延迟


通过应用性能配置集来调整托管 control plane 以实现低延迟。使用性能配置集,您可以限制基础架构和应用程序容器的 CPU,并为对延迟敏感的进程配置巨页、Hyper-Threading 和 CPU 分区。

18.1. 为托管 control plane 创建性能配置集

您可以使用 Performance Profile Creator (PPC) 工具创建集群性能配置集。PPC 是 Node Tuning Operator 的功能。

PPC 将有关集群的信息与用户提供的配置相结合,以生成适合您的硬件、拓扑和用例的性能配置集。

以下是在集群中创建和应用性能配置集的高级工作流:

  1. 使用 must-gather 命令收集有关集群的信息。
  2. 使用 PPC 工具创建性能配置集。
  3. 将性能配置集应用到集群。

18.1.1. 为 PPC 收集托管 control plane 集群的数据

Performance Profile Creator(PPC)工具需要 must-gather 数据。作为集群管理员,运行 must-gather 命令来捕获集群的信息。

先决条件

  • 有对管理集群的 cluster-admin 角色访问权限。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 运行以下命令导出管理集群 kubeconfig 文件:

    $ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,列出所有命名空间中的所有节点池:

    $ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE   NAME                     CLUSTER       DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    democluster-us-east-1a   democluster   1               1               False         False        4.17.0    False             True
    Copy to Clipboard Toggle word wrap

    • 输出显示了定义 NodePool 资源的管理集群中的命名空间集群
    • NodePool 资源的名称,如 democluster-us-east-1a
    • NodePool 所属的 HostedCluster。例如,democluster
  3. 在受管集群中,运行以下命令来列出可用的 secret:

    $ oc get secrets -n clusters
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                              TYPE                      DATA   AGE
    builder-dockercfg-25qpp           kubernetes.io/dockercfg   1      128m
    default-dockercfg-mkvlz           kubernetes.io/dockercfg   1      128m
    democluster-admin-kubeconfig      Opaque                    1      127m
    democluster-etcd-encryption-key   Opaque                    1      128m
    democluster-kubeadmin-password    Opaque                    1      126m
    democluster-pull-secret           Opaque                    1      128m
    deployer-dockercfg-8lfpd          kubernetes.io/dockercfg   1      128m
    Copy to Clipboard Toggle word wrap

  4. 运行以下命令,提取托管集群的 kubeconfig 文件:

    $ oc get secret <secret_name> -n <cluster_namespace> -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

    Example

    $ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

  5. 要为托管集群创建 must-gather 捆绑包,请打开终端窗口并运行以下命令:

    1. 导出托管的集群 kubeconfig 文件:

      $ export HC_KUBECONFIG=<path_to_hosted_cluster_kubeconfig>
      Copy to Clipboard Toggle word wrap

      Example

      $ export HC_KUBECONFIG=~/hostedcpkube/hosted-cluster-kubeconfig
      Copy to Clipboard Toggle word wrap

    2. 进入存储 must-gather 数据的目录。
    3. 为托管集群收集故障排除数据:

      $ oc --kubeconfig="$HC_KUBECONFIG" adm must-gather
      Copy to Clipboard Toggle word wrap
    4. 从工作目录中刚刚创建的 must-gather 目录创建一个压缩文件。例如,在使用 Linux 操作系统的计算机上运行以下命令:

      $ tar -czvf must-gather.tar.gz must-gather.local.1203869488012141147
      Copy to Clipboard Toggle word wrap

作为集群管理员,您可以使用带有 Performance Profile Creator (PPC) 工具的 Podman 来创建性能配置集。

有关 PPC 参数的更多信息,请参阅"Performance Profile Creator 参数"。

PPC 工具被设计为托管的集群感知。当它检测到来自 must-gather 数据的托管集群时,它会自动执行以下操作:

  • 识别没有机器配置池(MCP)。
  • 使用节点池作为计算节点配置的真实来源,而不是 MCP。
  • 除非要以特定池为目标,否则不需要明确指定 node-pool-name 值。
重要

PPC 使用托管集群中的 must-gather 数据来创建性能配置集。如果您对集群进行任何更改,如重新标记针对性能配置的节点,则必须在再次运行 PPC 前重新创建 must-gather 数据。

先决条件

  • 使用具有 cluster-admin 角色的用户访问集群。
  • 已安装托管集群。
  • 安装 Podman 和 OpenShift CLI (oc)。
  • 访问 Node Tuning Operator 镜像。
  • 访问集群的 must-gather 数据。

流程

  1. 在托管的集群中,运行以下命令使用 Podman 向 registry.redhat.io 进行身份验证:

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
    Username: <user_name>
    Password: <password>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,在托管集群上创建性能配置集。这个示例使用示例 PPC 参数和值:

    $ podman run --entrypoint performance-profile-creator \
        -v /path/to/must-gather:/must-gather:z \
    1
    
        registry.redhat.io/openshift4/ose-cluster-node-tuning-rhel9-operator:v4.19 \
        --must-gather-dir-path /must-gather \
        --reserved-cpu-count=2 \
    2
    
        --rt-kernel=false \
    3
    
        --split-reserved-cpus-across-numa=false \ 
    4
    
        --topology-manager-policy=single-numa-node \
    5
    
        --node-pool-name=democluster-us-east-1a \
        --power-consumption-mode=ultra-low-latency \
    6
    
        --offlined-cpu-count=1 \
    7
    
        > my-hosted-cp-performance-profile.yaml
    Copy to Clipboard Toggle word wrap
    1
    将创建 oc adm must-gather 的输出的本地目录挂载到容器中。
    2
    指定两个保留的 CPU。
    3
    禁用实时内核。
    4
    禁用跨 NUMA 节点的保留 CPU 分割。
    5
    指定 NUMA 拓扑策略。如果安装 NUMA Resources Operator,则必须将其设置为 single-numa-node
    6
    以增加功耗的成本指定最小延迟。
    7
    指定一个离线 CPU。

    输出示例

    level=info msg="Nodes names targeted by democluster-us-east-1a pool are: ip-10-0-129-110.ec2.internal "
    level=info msg="NUMA cell(s): 1"
    level=info msg="NUMA cell 0 : [0 2 1 3]"
    level=info msg="CPU(s): 4"
    level=info msg="2 reserved CPUs allocated: 0,2 "
    level=info msg="1 isolated CPUs allocated: 1"
    level=info msg="Additional Kernel Args based on configuration: []
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令,查看创建的 YAML 文件:

    $ cat my-hosted-cp-performance-profile
    Copy to Clipboard Toggle word wrap

    输出示例

    ---
    apiVersion: v1
    data:
      tuning: |
        apiVersion: performance.openshift.io/v2
        kind: PerformanceProfile
        metadata:
          creationTimestamp: null
          name: performance
        spec:
          cpu:
            isolated: "1"
            offlined: "3"
            reserved: 0,2
          net:
            userLevelNetworking: false
          nodeSelector:
            node-role.kubernetes.io/worker: ""
          numa:
            topologyPolicy: single-numa-node
          realTimeKernel:
            enabled: false
          workloadHints:
            highPowerConsumption: true
            perPodPowerManagement: false
            realTime: true
        status: {}
    kind: ConfigMap
    metadata:
      name: performance
      namespace: clusters
    Copy to Clipboard Toggle word wrap

18.1.3. 在托管集群中配置低延迟性能优化

要使用托管集群中的节点中的性能配置集设置低延迟,您可以使用 Node Tuning Operator。在托管的 control plane 中,您可以通过创建包含 Tuned 对象并在节点池中引用这些配置映射的配置映射来配置低延迟性能优化。在这种情况下,tuned 对象是一个 PerformanceProfile 对象,它定义了您要应用到节点池中的节点的性能配置集。

流程

  1. 运行以下命令导出管理集群 kubeconfig 文件:

    $ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,在管理集群中创建 ConfigMap 对象:

    $ oc --kubeconfig="$MGMT_KUBECONFIG" apply -f my-hosted-cp-performance-profile.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,编辑 clusters 命名空间中的 NodePool 对象,添加 spec.tuningConfig 字段和在该字段中创建性能配置集的名称:

    $ oc edit np -n clusters
    Copy to Clipboard Toggle word wrap
    apiVersion: hypershift.openshift.io/v1beta1
    kind: NodePool
    metadata:
      annotations:
        hypershift.openshift.io/nodePoolCurrentConfig: 2f752a2c
        hypershift.openshift.io/nodePoolCurrentConfigVersion: 998aa3ce
        hypershift.openshift.io/nodePoolPlatformMachineTemplate: democluster-us-east-1a-3dff55ec
      creationTimestamp: "2025-04-09T09:41:55Z"
      finalizers:
      - hypershift.openshift.io/finalizer
      generation: 1
      labels:
        hypershift.openshift.io/auto-created-for-infra: democluster
      name: democluster-us-east-1a
      namespace: clusters
      ownerReferences:
      - apiVersion: hypershift.openshift.io/v1beta1
        kind: HostedCluster
        name: democluster
        uid: af77e390-c289-433c-9d29-3aee8e5dc76f
      resourceVersion: "53056"
      uid: 11efa47c-5a7b-476c-85cf-a274f748a868
    spec:
      tuningConfig:
      - name: performance
      arch: amd64
      clusterName: democluster
      management:
    Copy to Clipboard Toggle word wrap
    注意

    您可以在多个节点池中引用同一配置集。在托管的 control plane 中,Node Tuning Operator 会将节点池名称和命名空间的哈希值附加到 Tuned 自定义资源的名称中,以区分它们。进行更改后,系统会检测到需要配置更改,并启动该池中节点的滚动更新以应用新配置。

验证

  1. 运行以下命令,列出所有命名空间中的所有节点池:

    $ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE   NAME                     CLUSTER       DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    democluster-us-east-1a   democluster   1               1               False         False        4.17.0    False             True
    Copy to Clipboard Toggle word wrap

    注意

    UPDATINGCONFIG 字段指示节点池是否在更新其配置过程中。在更新过程中,节点池状态中的 UPDATINGCONFIG 字段将变为 True。只有在 UPDATINGCONFIG 字段返回到 False 时,新配置才会被视为完全应用。

  2. 运行以下命令,列出 clusters-democluster 命名空间中的所有配置映射:

    $ oc --kubeconfig="$MGMT_KUBECONFIG" get cm -n clusters-democluster
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                                 DATA   AGE
    aggregator-client-ca                                 1      69m
    auth-config                                          1      68m
    aws-cloud-config                                     1      68m
    aws-ebs-csi-driver-trusted-ca-bundle                 1      66m
    ...                                                  1      67m
    kubelet-client-ca                                    1      69m
    kubeletconfig-performance-democluster-us-east-1a     1      22m
    ...
    ovnkube-identity-cm                                  2      66m
    performance-democluster-us-east-1a                   1      22m
    ...
    tuned-performance-democluster-us-east-1a             1      22m
    Copy to Clipboard Toggle word wrap

    输出显示 kubeletconfig kubeletconfig-performance-democluster-us-east-1a 和性能配置集 performance-democluster-us-east-1a。Node Tuning Operator 将 Tuned 对象同步到托管的集群中。您可以验证定义了哪些 Tuned 对象,以及将哪些配置集应用到每个节点。

  3. 运行以下命令,列出管理集群中的可用 secret:

    $ oc get secrets -n clusters
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                              TYPE                      DATA   AGE
    builder-dockercfg-25qpp           kubernetes.io/dockercfg   1      128m
    default-dockercfg-mkvlz           kubernetes.io/dockercfg   1      128m
    democluster-admin-kubeconfig      Opaque                    1      127m
    democluster-etcd-encryption-key   Opaque                    1      128m
    democluster-kubeadmin-password    Opaque                    1      126m
    democluster-pull-secret           Opaque                    1      128m
    deployer-dockercfg-8lfpd          kubernetes.io/dockercfg   1      128m
    Copy to Clipboard Toggle word wrap

  4. 运行以下命令,提取托管集群的 kubeconfig 文件:

    $ oc get secret <secret_name> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

    Example

    $ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

  5. 运行以下命令导出托管集群 kubeconfig :

    $ export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令,验证 kubeletconfig 是否在托管集群中镜像:

    $ oc --kubeconfig="$HC_KUBECONFIG" get cm -n openshift-config-managed | grep kubelet
    Copy to Clipboard Toggle word wrap

    输出示例

    kubelet-serving-ca                            			1   79m
    kubeletconfig-performance-democluster-us-east-1a		1   15m
    Copy to Clipboard Toggle word wrap

  7. 运行以下命令,验证在托管集群中是否设置了 single-numa-node 策略:

    $ oc --kubeconfig="$HC_KUBECONFIG" get cm kubeletconfig-performance-democluster-us-east-1a -o yaml -n openshift-config-managed | grep single
    Copy to Clipboard Toggle word wrap

    输出示例

        topologyManagerPolicy: single-numa-node
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat