第18章 パフォーマンスプロファイルを使用した低レイテンシーを実現するための Hosted Control Plane のチューニング
低レイテンシーを実現するために、パフォーマンスプロファイルを適用して Hosted Control Plane をチューニングします。パフォーマンスプロファイルを使用すると、インフラストラクチャーおよびアプリケーションコンテナーの CPU を制限したり、レイテンシーの影響を受けやすいプロセスに対して huge page、ハイパースレッディング、CPU パーティションを設定できます。
18.1. Hosted Control Plane のパフォーマンスプロファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
Performance Profile Creator (PPC) ツールを使用して、クラスターパフォーマンスプロファイルを作成できます。PPC は Node Tuning Operator の機能です。
PPC は、クラスターに関する情報とユーザー指定の設定を組み合わせて、ハードウェア、トポロジー、ユースケースに適したパフォーマンスプロファイルを生成します。
以下は、クラスターでパフォーマンスプロファイルを作成して適用するための大まかなワークフローです。
-
must-gatherコマンドを使用してクラスターに関する情報を収集します。 - PPC ツールを使用してパフォーマンスプロファイルを作成します。
- パフォーマンスプロファイルをクラスターに適用します。
18.1.1. PPC 用に Hosted Control Plane クラスターに関するデータを収集する リンクのコピーリンクがクリップボードにコピーされました!
Performance Profile Creator (PPC) ツールには must-gather データが必要です。クラスター管理者は、must-gather コマンドを実行し、クラスターに関する情報を取得します。
前提条件
-
管理クラスターへの
cluster-adminロールアクセス権がある。 -
OpenShift CLI (
oc) がインストールされている。
手順
次のコマンドを実行して、管理クラスターの
kubeconfigファイルをエクスポートします。$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>次のコマンドを実行して、すべての namespace のノードプールをすべてリスト表示します。
$ 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リソースが定義されている管理クラスター内の namespace であるclustersが表示されます。 -
NodePoolリソースの名前 (例:democluster-us-east-1a)。 -
この
NodePoolが属するHostedCluster。たとえば、democlusterなどです。
-
出力には、
管理クラスターで次のコマンドを実行して、利用可能なシークレットをリスト表示します。
$ 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-kubeconfig例
$ 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>例
$ 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 を実行する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Podman と Performance Profile Creator (PPC) ツールを使用してパフォーマンスプロファイルを作成できます。
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 を使用できます。Hosted Control Plane では、Tuned オブジェクトを含む config map を作成し、ノードプールでその config map を参照することで、低レイテンシーのチューニングを設定できます。この場合の Tuned オブジェクトは、ノードプール内のノードに適用するパフォーマンスプロファイルを定義する PerformanceProfile オブジェクトです。
手順
次のコマンドを実行して、管理クラスターの
kubeconfigファイルをエクスポートします。$ export MGMT_KUBECONFIG=<path_to_mgmt_kubeconfig>次のコマンドを実行して、管理クラスターに
ConfigMapオブジェクトを作成します。$ oc --kubeconfig="$MGMT_KUBECONFIG" apply -f my-hosted-cp-performance-profile.yaml次のコマンドを実行して、
clustersnamespace の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:注記複数のノードプールで同じプロファイルを参照できます。Hosted Control Plane では、Node Tuning Operator により、
Tunedカスタムリソースを区別するために、リソースの名前にノードプール名と namespace のハッシュが追加されます。変更を加えると、設定の変更が必要であることがシステムによって検出され、そのプール内のノードのローリング更新が開始し、新しい設定が適用されます。
検証
次のコマンドを実行して、すべての namespace のノードプールをすべてリスト表示します。
$ 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-democlusternamespace 内のすべての config map をリスト表示します。$ 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オブジェクトが定義されているか、どのプロファイルが各ノードに適用されているかを確認できます。次のコマンドを実行して、管理クラスターで使用可能なシークレットをリスト表示します。
$ 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-kubeconfig例
$ 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