12.6. 调度 NUMA 感知工作负载
运行对延迟敏感工作负载的集群通常具有性能配置集,以帮助最小化工作负载延迟并优化性能。NUMA 感知调度程序根据可用的节点 NUMA 资源部署工作负载,并遵循应用到节点的任何性能配置集设置。NUMA 感知部署和工作负载的性能配置集相结合,确保以最大化性能的方式调度工作负载。
				要使 NUMA Resources Operator 完全可正常工作,您必须部署 NUMAResourcesOperator 自定义资源和 NUMA 感知辅助 pod 调度程序。
			
12.6.1. 创建 NUMAResourcesOperator 自定义资源 复制链接链接已复制到粘贴板!
					安装 NUMA Resources Operator 后,创建 NUMAResourcesOperator 自定义资源 (CR) 来指示 NUMA Resources Operator 安装支持 NUMA 感知调度程序所需的所有集群基础架构,包括守护进程集和 API。
				
先决条件
- 
							安装 OpenShift CLI(
oc)。 - 
							以具有 
cluster-admin特权的用户身份登录。 - 安装 NUMA Resources Operator。
 
流程
创建
NUMAResourcesOperator自定义资源:将以下最小所需的 YAML 文件示例保存为
nrop.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - 这必须与您要配置 NUMA Resources Operator 的
MachineConfigPool资源匹配。例如,您可能已创建了名为worker-cnf的MachineConfigPool资源,它指定了一组应该运行电信工作负载的节点。每个NodeGroup必须与一个MachineConfigPool完全匹配。不支持NodeGroup匹配多个MachineConfigPool的配置。 
运行以下命令来创建
NUMAResourcesOperatorCR:oc create -f nrop.yaml
$ oc create -f nrop.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
可选: 要为多个机器配置池(MCP)启用 NUMA 感知调度,请为每个池定义单独的
NodeGroup。例如,在NUMAResourcesOperatorCR 中为worker-cnf、worker-ht和worker-other定义三个NodeGroups,如下例所示:具有多个
NodeGroups的NUMAResourcesOperatorCR 的 YAML 定义示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
验证
运行以下命令,验证 NUMA Resources Operator 是否已成功部署:
oc get numaresourcesoperators.nodetopology.openshift.io
$ oc get numaresourcesoperators.nodetopology.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE numaresourcesoperator 27s
NAME AGE numaresourcesoperator 27sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 几分钟后,运行以下命令验证所需资源是否已成功部署:
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE pod/numaresources-controller-manager-7d9d84c58d-qk2mr 1/1 Running 0 12m pod/numaresourcesoperator-worker-7d96r 2/2 Running 0 97s pod/numaresourcesoperator-worker-crsht 2/2 Running 0 97s pod/numaresourcesoperator-worker-jp9mw 2/2 Running 0 97s
NAME READY STATUS RESTARTS AGE pod/numaresources-controller-manager-7d9d84c58d-qk2mr 1/1 Running 0 12m pod/numaresourcesoperator-worker-7d96r 2/2 Running 0 97s pod/numaresourcesoperator-worker-crsht 2/2 Running 0 97s pod/numaresourcesoperator-worker-jp9mw 2/2 Running 0 97sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
12.6.2. 为托管 control plane 创建 NUMAResourcesOperator 自定义资源 复制链接链接已复制到粘贴板!
					安装 NUMA Resources Operator 后,创建 NUMAResourcesOperator 自定义资源 (CR)。CR 指示 NUMA Resources Operator 安装支持在托管 control plane 上的 NUMA 感知调度程序所需的所有集群基础架构,包括守护进程集和 API。
				
为托管 control plane 创建 NUMAResourcesOperator 自定义资源只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 
							安装 OpenShift CLI(
oc)。 - 
							以具有 
cluster-admin特权的用户身份登录。 - 安装 NUMA Resources Operator。
 
流程
运行以下命令导出管理集群 kubeconfig 文件:
export KUBECONFIG=<path-to-management-cluster-kubeconfig>
$ export KUBECONFIG=<path-to-management-cluster-kubeconfig>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为您的集群查找
node-pool-name:oc --kubeconfig="$MGMT_KUBECONFIG" get np -A
$ oc --kubeconfig="$MGMT_KUBECONFIG" get np -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters democluster-us-east-1a democluster 1 1 False False 4.19.0 False False
NAMESPACE NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE clusters democluster-us-east-1a democluster 1 1 False False 4.19.0 False FalseCopy to Clipboard Copied! Toggle word wrap Toggle overflow node-pool-name是输出中的NAME字段。在本例中,node-pool-name是democluster-us-east-1a。创建名为
nrop-hcp.yaml的 YAML 文件,至少包含以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 poolName是在第 2 步中获取的node-pool-name。
在受管集群中,运行以下命令来列出可用的 secret:
oc get secrets -n clusters
$ oc get secrets -n clustersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,提取托管集群的
kubeconfig文件:oc get secret <SECRET_NAME> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig$ oc get secret <SECRET_NAME> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig$ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令导出托管集群
kubeconfig文件:export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>
$ export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在托管集群中运行以下命令来创建
NUMAResourcesOperatorCR:oc create -f nrop-hcp.yaml
$ oc create -f nrop-hcp.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
验证
运行以下命令,验证 NUMA Resources Operator 是否已成功部署:
oc get numaresourcesoperators.nodetopology.openshift.io
$ oc get numaresourcesoperators.nodetopology.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE numaresourcesoperator 27s
NAME AGE numaresourcesoperator 27sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 几分钟后,运行以下命令验证所需资源是否已成功部署:
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE pod/numaresources-controller-manager-7d9d84c58d-qk2mr 1/1 Running 0 12m pod/numaresourcesoperator-democluster-7d96r 2/2 Running 0 97s pod/numaresourcesoperator-democluster-crsht 2/2 Running 0 97s pod/numaresourcesoperator-democluster-jp9mw 2/2 Running 0 97s
NAME READY STATUS RESTARTS AGE pod/numaresources-controller-manager-7d9d84c58d-qk2mr 1/1 Running 0 12m pod/numaresourcesoperator-democluster-7d96r 2/2 Running 0 97s pod/numaresourcesoperator-democluster-crsht 2/2 Running 0 97s pod/numaresourcesoperator-democluster-jp9mw 2/2 Running 0 97sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
12.6.3. 部署 NUMA 感知辅助 pod 调度程序 复制链接链接已复制到粘贴板!
安装 NUMA Resources Operator 后,按照以下步骤部署 NUMA 感知二级 pod 调度程序。
流程
创建
NUMAResourcesScheduler自定义资源来部署 NUMA 感知自定义 pod 调度程序:将以下最小 YAML 保存到
nro-scheduler.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - 在断开连接的环境中,请确保通过以下方法配置此镜像的解析:
- 
													创建 
ImageTagMirrorSet自定义资源 (CR)。如需更多信息,请参阅"添加资源"部分中的"配置镜像 registry 存储库镜像"。 - 将 URL 设置为断开连接的 registry。
 
 - 
													创建 
 
运行以下命令来创建
NUMAResourcesSchedulerCR:oc create -f nro-scheduler.yaml
$ oc create -f nro-scheduler.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在托管的 control plane 集群中,在托管的 control plane 节点上运行这个命令。
几秒钟后,运行以下命令确认已成功部署所需资源:
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
12.6.4. 使用 NUMA 感知调度程序调度工作负载 复制链接链接已复制到粘贴板!
					现在,安装了 topo-aware-scheduler,会应用 NUMAResourcesOperator 和 NUMAResourcesScheduler CR,并且集群具有匹配的性能配置集或 kubeletconfig,您可以使用部署 CR 使用 NUMA 感知调度程序来调度工作负载,该 CR 可以指定最低所需的资源来处理工作负载。
				
以下示例部署使用 NUMA 感知调度示例工作负载。
先决条件
- 
							安装 OpenShift CLI(
oc)。 - 
							以具有 
cluster-admin特权的用户身份登录。 
流程
运行以下命令,获取集群中部署的 NUMA 感知调度程序名称:
oc get numaresourcesschedulers.nodetopology.openshift.io numaresourcesscheduler -o json | jq '.status.schedulerName'
$ oc get numaresourcesschedulers.nodetopology.openshift.io numaresourcesscheduler -o json | jq '.status.schedulerName'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
"topo-aware-scheduler"
"topo-aware-scheduler"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
DeploymentCR,它使用名为topo-aware-scheduler的调度程序,例如:将以下 YAML 保存到
nro-deployment.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 schedulerName必须与集群中部署的 NUMA 感知调度程序的名称匹配,如topo-aware-scheduler。
运行以下命令来创建
DeploymentCR:oc create -f nro-deployment.yaml
$ oc create -f nro-deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
验证
验证部署是否成功:
oc get pods -n openshift-numaresources
$ oc get pods -n openshift-numaresourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
topo-aware-scheduler是否在调度部署的 pod:oc describe pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources
$ oc describe pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m45s topo-aware-scheduler Successfully assigned openshift-numaresources/numa-deployment-1-6c4f5bdb84-wgn6g to worker-1
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m45s topo-aware-scheduler Successfully assigned openshift-numaresources/numa-deployment-1-6c4f5bdb84-wgn6g to worker-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意请求的资源超过可用于调度的部署将失败,并显示
MinimumReplicasUnavailable错误。当所需资源可用时,部署会成功。Pod 会一直处于Pending状态,直到所需资源可用。验证是否为节点列出了预期的分配资源。
运行以下命令,识别运行部署 pod 的节点:
oc get pods -n openshift-numaresources -o wide
$ oc get pods -n openshift-numaresources -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES numa-deployment-1-6c4f5bdb84-wgn6g 0/2 Running 0 82m 10.128.2.50 worker-1 <none> <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES numa-deployment-1-6c4f5bdb84-wgn6g 0/2 Running 0 82m 10.128.2.50 worker-1 <none> <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用运行部署 Pod 的节点的名称。
oc describe noderesourcetopologies.topology.node.k8s.io worker-1
$ oc describe noderesourcetopologies.topology.node.k8s.io worker-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - 由于已分配给有保证 pod 的资源,
可用的容量会减少。 
通过保证 pod 使用的资源从
noderesourcetopologies.topology.node.k8s.io中列出的可用节点资源中减去。
对具有
Best-effort或Burstable服务质量 (qosClass) 的pod 的资源分配不会反映在noderesourcetopologies.topology.node.k8s.io下的 NUMA 节点资源中。如果 pod 消耗的资源没有反映在节点资源计算中,请验证 pod 的Guaranteed具有qosClass,且 CPU 请求是一个整数值,而不是十进制值。您可以运行以下命令来验证 pod 是否具有Guaranteed的qosClass:oc get pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources -o jsonpath="{ .status.qosClass }"$ oc get pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources -o jsonpath="{ .status.qosClass }"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Guaranteed
GuaranteedCopy to Clipboard Copied! Toggle word wrap Toggle overflow