第 18 章 使用性能配置集调整托管的 control plane 以实现低延迟
通过应用性能配置集来调整托管 control plane 以实现低延迟。使用性能配置集,您可以限制基础架构和应用程序容器的 CPU,并为对延迟敏感的进程配置巨页、Hyper-Threading 和 CPU 分区。
18.1. 为托管 control plane 创建性能配置集 复制链接链接已复制到粘贴板!
您可以使用 Performance Profile Creator (PPC) 工具创建集群性能配置集。PPC 是 Node Tuning Operator 的功能。
PPC 将有关集群的信息与用户提供的配置相结合,以生成适合您的硬件、拓扑和用例的性能配置集。
以下是在集群中创建和应用性能配置集的高级工作流:
-
使用
must-gather命令收集有关集群的信息。 - 使用 PPC 工具创建性能配置集。
- 将性能配置集应用到集群。
18.1.1. 为 PPC 收集托管 control plane 集群的数据 复制链接链接已复制到粘贴板!
Performance Profile Creator(PPC)工具需要 must-gather 数据。作为集群管理员,运行 must-gather 命令来捕获集群的信息。
先决条件
-
有对管理集群的
cluster-admin角色访问权限。 -
已安装 OpenShift CLI(
oc)。
流程
运行以下命令导出管理集群
kubeconfig文件:$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>运行以下命令,列出所有命名空间中的所有节点池:
$ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A输出示例
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-
输出显示了定义
NodePool资源的管理集群中的命名空间集群。 -
NodePool资源的名称,如democluster-us-east-1a。 -
此
NodePool所属的HostedCluster。例如,democluster。
-
输出显示了定义
在受管集群中,运行以下命令来列出可用的 secret:
$ oc get secrets -n clusters输出示例
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运行以下命令,提取托管集群的
kubeconfig文件:$ oc get secret <secret_name> -n <cluster_namespace> -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfigExample
$ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig要为托管集群创建
must-gather捆绑包,请打开终端窗口并运行以下命令:导出托管的集群
kubeconfig文件:$ export HC_KUBECONFIG=<path_to_hosted_cluster_kubeconfig>Example
$ export HC_KUBECONFIG=~/hostedcpkube/hosted-cluster-kubeconfig-
进入存储
must-gather数据的目录。 为托管集群收集故障排除数据:
$ oc --kubeconfig="$HC_KUBECONFIG" adm must-gather从工作目录中刚刚创建的
must-gather目录创建一个压缩文件。例如,在使用 Linux 操作系统的计算机上运行以下命令:$ tar -czvf must-gather.tar.gz must-gather.local.1203869488012141147
18.1.2. 使用 Podman 在托管集群中运行 Performance Profile Creator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用带有 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数据。
流程
在托管的集群中,运行以下命令使用 Podman 向
registry.redhat.io进行身份验证:$ podman login registry.redhat.ioUsername: <user_name> Password: <password>运行以下命令,在托管集群上创建性能配置集。这个示例使用示例 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输出示例
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: []运行以下命令,查看创建的 YAML 文件:
$ cat my-hosted-cp-performance-profile输出示例
--- 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
18.1.3. 在托管集群中配置低延迟性能优化 复制链接链接已复制到粘贴板!
要使用托管集群中的节点中的性能配置集设置低延迟,您可以使用 Node Tuning Operator。在托管的 control plane 中,您可以通过创建包含 Tuned 对象并在节点池中引用这些配置映射的配置映射来配置低延迟性能优化。在这种情况下,tuned 对象是一个 PerformanceProfile 对象,它定义了您要应用到节点池中的节点的性能配置集。
流程
运行以下命令导出管理集群
kubeconfig文件:$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>运行以下命令,在管理集群中创建
ConfigMap对象:$ oc --kubeconfig="$MGMT_KUBECONFIG" apply -f my-hosted-cp-performance-profile.yaml运行以下命令,编辑
clusters命名空间中的NodePool对象,添加spec.tuningConfig字段和在该字段中创建性能配置集的名称:$ oc edit np -n clustersapiVersion: 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:注意您可以在多个节点池中引用同一配置集。在托管的 control plane 中,Node Tuning Operator 会将节点池名称和命名空间的哈希值附加到
Tuned自定义资源的名称中,以区分它们。进行更改后,系统会检测到需要配置更改,并启动该池中节点的滚动更新以应用新配置。
验证
运行以下命令,列出所有命名空间中的所有节点池:
$ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A输出示例
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注意UPDATINGCONFIG字段指示节点池是否在更新其配置过程中。在更新过程中,节点池状态中的UPDATINGCONFIG字段将变为True。只有在UPDATINGCONFIG字段返回到False时,新配置才会被视为完全应用。运行以下命令,列出
clusters-democluster命名空间中的所有配置映射:$ oc --kubeconfig="$MGMT_KUBECONFIG" get cm -n clusters-democluster输出示例
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输出显示 kubeletconfig
kubeletconfig-performance-democluster-us-east-1a和性能配置集performance-democluster-us-east-1a。Node Tuning Operator 将Tuned对象同步到托管的集群中。您可以验证定义了哪些Tuned对象,以及将哪些配置集应用到每个节点。运行以下命令,列出管理集群中的可用 secret:
$ oc get secrets -n clusters输出示例
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运行以下命令,提取托管集群的
kubeconfig文件:$ oc get secret <secret_name> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfigExample
$ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig运行以下命令导出托管集群 kubeconfig :
$ export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>运行以下命令,验证 kubeletconfig 是否在托管集群中镜像:
$ oc --kubeconfig="$HC_KUBECONFIG" get cm -n openshift-config-managed | grep kubelet输出示例
kubelet-serving-ca 1 79m kubeletconfig-performance-democluster-us-east-1a 1 15m运行以下命令,验证在托管集群中是否设置了
single-numa-node策略:$ oc --kubeconfig="$HC_KUBECONFIG" get cm kubeletconfig-performance-democluster-us-east-1a -o yaml -n openshift-config-managed | grep single输出示例
topologyManagerPolicy: single-numa-node