12.6. NUMA 対応ワークロードのスケジューリング
通常、遅延の影響を受けやすいワークロードを実行するクラスターは、ワークロードの遅延を最小限に抑え、パフォーマンスを最適化するのに役立つパフォーマンスプロファイルを備えています。NUMA 対応スケジューラーは、使用可能なノードの NUMA リソースと、ノードに適用されるパフォーマンスプロファイル設定に基づいき、ワークロードをデプロイします。NUMA 対応デプロイメントとワークロードのパフォーマンスプロファイルを組み合わせることで、パフォーマンスを最大化するようにワークロードがスケジュールされます。
NUMA Resources Operator を完全に動作させるには、NUMAResourcesOperator
カスタムリソースと NUMA 対応のセカンダリー Pod スケジューラーをデプロイする必要があります。
12.6.1. NUMAResourcesOperator カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
NUMA Resources Operator をインストールしたら、NUMAResourcesOperator
カスタムリソース (CR) を作成します。この CR は、デーモンセットや API など、NUMA 対応スケジューラーをサポートするために必要なすべてのクラスターインフラストラクチャーをインストールするように NUMA Resources Operator に指示します。
前提条件
-
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
は 1 つのMachineConfigPool
に完全に一致する必要があります。NodeGroup
が複数のMachineConfigPool
に一致する設定はサポートされていません。
以下のコマンドを実行して、
NUMAResourcesOperator
CR を作成します。oc create -f nrop.yaml
$ oc create -f nrop.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション: 複数のマシン設定プール (MCP) に対して NUMA 対応スケジューリングを有効にするには、プールごとに個別の
NodeGroup
を定義します。たとえば、次の例に示すように、NUMAResourcesOperator
CR で、worker-cnf
、worker-ht
、およびworker-other
の 3 つのNodeGroup
を定義します。複数の
NodeGroups
を含むNUMAResourcesOperator
CR の YAML 定義の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、NUMA Resources Operator が正常にデプロイされたことを確認します。
oc get numaresourcesoperators.nodetopology.openshift.io
$ oc get numaresourcesoperators.nodetopology.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE numaresourcesoperator 27s
NAME AGE numaresourcesoperator 27s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 数分後、次のコマンドを実行して、必要なリソースが正常にデプロイされたことを確認します。
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresources
Copy 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 97s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.6.2. Hosted Control Plane 用の NUMAResourcesOperator カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
NUMA Resources Operator をインストールした後、NUMAResourcesOperator
カスタムリソース (CR) を作成します。CR は、デーモンセットや API など、Hosted Control Plane 上の NUMA 対応スケジューラーをサポートするために必要なすべてのクラスターインフラストラクチャーをインストールするように NUMA Resources Operator に指示します。
Hosted Control Plane 用の NUMAResourcesOperator カスタムリソースの作成は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
-
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 -A
Copy 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 False
Copy 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
です。
管理クラスターで次のコマンドを実行して、利用可能なシークレットをリスト表示します。
oc get secrets -n clusters
$ oc get secrets -n clusters
Copy 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-kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
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-kubeconfig
Copy 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 ホステッドクラスターで次のコマンドを実行して、
NUMAResourcesOperator
CR を作成します。oc create -f nrop-hcp.yaml
$ oc create -f nrop-hcp.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、NUMA Resources Operator が正常にデプロイされたことを確認します。
oc get numaresourcesoperators.nodetopology.openshift.io
$ oc get numaresourcesoperators.nodetopology.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE numaresourcesoperator 27s
NAME AGE numaresourcesoperator 27s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 数分後、次のコマンドを実行して、必要なリソースが正常にデプロイされたことを確認します。
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresources
Copy 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 97s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.6.3. NUMA 対応のセカンダリー Pod スケジューラーのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
NUMA Resources Operator をインストールした後、次の手順に従って NUMA 対応のセカンダリー Pod スケジューラーをデプロイします。
手順
NUMA 対応のカスタム Pod スケジューラーをデプロイする
NUMAResourcesScheduler
カスタムリソースを作成します。次の最小限必要な YAML を
nro-scheduler.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 非接続環境では、次のいずれかの方法でこのイメージの解像度を設定してください。
-
ImageTagMirrorSet
カスタムリソース (CR) を作成する。詳細は、「関連情報」セクションの「イメージレジストリーのリポジトリーミラーリングの設定」を参照してください。 - 切断されたレジストリーへの URL を設定する。
-
次のコマンドを実行して、
NUMAResourcesScheduler
CR を作成します。oc create -f nro-scheduler.yaml
$ oc create -f nro-scheduler.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Hosted Control Plane クラスターでは、Hosted Control Plane ノードでこのコマンドを実行します。
数秒後、次のコマンドを実行して、必要なリソースのデプロイメントが成功したことを確認します。
oc get all -n openshift-numaresources
$ oc get all -n openshift-numaresources
Copy 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 対応スケジューラーでワークロードをスケジュールできます。
次のデプロイメント例では、サンプルワークロードに 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 topo-aware-scheduler
という名前のスケジューラーを使用するDeployment
CR を作成します。次に例を示します。以下の YAML を
nro-deployment.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
schedulerName
は、クラスターにデプロイされている NUMA 対応のスケジューラーの名前 (topo-aware-scheduler
など) と一致する必要があります。
次のコマンドを実行して、
Deployment
CR を作成します。oc create -f nro-deployment.yaml
$ oc create -f nro-deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
デプロイメントが正常に行われたことを確認します。
oc get pods -n openshift-numaresources
$ oc get pods -n openshift-numaresources
Copy 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-numaresources
Copy 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-1
Copy 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 wide
Copy 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-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 保証された Pod に割り当てられたリソースが原因で、
Available
な容量が減少しています。
保証された Pod によって消費されるリソースは、
noderesourcetopologies.topology.node.k8s.io
にリスト表示されている使用可能なノードリソースから差し引かれます。
Best-effort
またはBurstable
のサービス品質 (qosClass
) を持つ Pod のリソース割り当てが、noderesourcetopologies.topology.node.k8s.io
の NUMA ノードリソースに反映されていません。Pod の消費リソースがノードリソースの計算に反映されない場合は、Pod のqosClass
がGuaranteed
で、CPU 要求が 10 進値ではなく整数値であることを確認してください。次のコマンドを実行すると、Pod のqosClass
がGuaranteed
であることを確認できます。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
Guaranteed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow