6.3. Node Tuning Operator の使用
Red Hat OpenShift Service on AWS は、クラスター上のノードのパフォーマンスを向上させる Node Tuning Operator をサポートしています。ノード調整設定を作成する前に、カスタム調整仕様を作成する必要があります。
Node Tuning Operator は、TuneD デーモンを調整することでノードレベルのチューニングを管理し、Performance Profile コントローラーを使用して低レイテンシーのパフォーマンスを実現するのに役立ちます。ほとんどの高パフォーマンスアプリケーションでは、一定レベルのカーネルのチューニングが必要です。Node Tuning Operator は、ノードレベルの sysctl の統一された管理インターフェイスをユーザーに提供し、ユーザーが指定するカスタムチューニングを追加できるよう柔軟性を提供します。
Operator は、コンテナー化された Red Hat OpenShift Service on AWS の TuneD デーモンを Kubernetes デーモンセットとして管理します。これにより、カスタムチューニング仕様が、デーモンが認識する形式でクラスターで実行されるすべてのコンテナー化された TuneD デーモンに渡されます。デーモンは、ノードごとに 1 つずつ、クラスターのすべてのノードで実行されます。
コンテナー化された TuneD デーモンによって適用されるノードレベルの設定は、プロファイルの変更をトリガーするイベントで、または終了シグナルの受信および処理によってコンテナー化された TuneD デーモンが正常に終了する際にロールバックされます。
Node Tuning Operator は、Performance Profile コントローラーを使用して自動チューニングを実装し、Red Hat OpenShift Service on AWS アプリケーションの低レイテンシーパフォーマンスを実現します。
クラスター管理者は、以下のようなノードレベルの設定を定義するパフォーマンスプロファイルを設定します。
- カーネルを kernel-rt に更新します。
- ハウスキーピング用の CPU を選択します。
- 実行中のワークロード用の CPU を選択します。
Node Tuning Operator は、バージョン 4.1 以降の標準の Red Hat OpenShift Service on AWS インストールに含まれています。
Red Hat OpenShift Service on AWS の以前のバージョンでは、OpenShift アプリケーションの低レイテンシーパフォーマンスを実現する自動チューニングを実装するために Performance Addon Operator が使用されていました。Red Hat OpenShift Service on AWS 4.11 以降では、この機能は Node Tuning Operator の一部です。
6.3.1. カスタムチューニング仕様 リンクのコピーリンクがクリップボードにコピーされました!
Operator のカスタムリソース (CR) には 2 つの重要なセクションがあります。1 つ目のセクションの profile:
は TuneD プロファイルおよびそれらの名前のリストです。2 つ目の recommend:
は、プロファイル選択ロジックを定義します。
複数のカスタムチューニング仕様は、Operator の namespace に複数の CR として共存できます。新規 CR の存在または古い CR の削除は Operator によって検出されます。既存のカスタムチューニング仕様はすべてマージされ、コンテナー化された TuneD デーモンの適切なオブジェクトは更新されます。
管理状態
Operator 管理の状態は、デフォルトの Tuned CR を調整して設定されます。デフォルトで、Operator は Managed 状態であり、spec.managementState
フィールドはデフォルトの Tuned CR に表示されません。Operator Management 状態の有効な値は以下のとおりです。
- Managed: Operator は設定リソースが更新されるとそのオペランドを更新します。
- Unmanaged: Operator は設定リソースへの変更を無視します。
- Removed: Operator は Operator がプロビジョニングしたオペランドおよびリソースを削除します。
プロファイルデータ
profile:
セクションは、TuneD プロファイルおよびそれらの名前をリスト表示します。
推奨プロファイル
profile:
選択ロジックは、CR の recommend:
セクションによって定義されます。recommend:
セクションは、選択基準に基づくプロファイルの推奨項目のリストです。
recommend: <recommend-item-1> # ... <recommend-item-n>
recommend:
<recommend-item-1>
# ...
<recommend-item-n>
リストの個別項目:
- 1
- オプション:
- 2
- キー/値の
MachineConfig
ラベルのディクショナリー。キーは一意である必要があります。 - 3
- 省略する場合は、優先度の高いプロファイルが最初に一致するか、
machineConfigLabels
が設定されていない限り、プロファイルの一致が想定されます。 - 4
- オプションのリスト。
- 5
- プロファイルの順序付けの優先度。数値が小さいほど優先度が高くなります (
0
が最も高い優先度になります)。 - 6
- 一致に適用する TuneD プロファイル。例:
tuned_profile_1
- 7
- オプションのオペランド設定。
- 8
- TuneD デーモンのデバッグオンまたはオフを有効にします。オプションは、オンの場合は
true
、オフの場合はfalse
です。デフォルトはfalse
です。 - 9
- TuneD デーモンの
reapply_sysctl
機能をオンまたはオフにします。オプションは on でtrue
、オフの場合はfalse
です。
<match>
は、以下のように再帰的に定義されるオプションの一覧です。
- label: <label_name> value: <label_value> type: <label_type> <match>
- label: <label_name>
value: <label_value>
type: <label_type>
<match>
<match>
が省略されない場合、ネストされたすべての <match>
セクションが true
に評価される必要もあります。そうでない場合には false
が想定され、それぞれの <match>
セクションのあるプロファイルは適用されず、推奨されません。そのため、ネスト化 (子の <match>
セクション) は論理 AND 演算子として機能します。これとは逆に、<match>
一覧のいずれかの項目が一致する場合は、<match>
の一覧全体が true
に評価されます。そのため、リストは論理 OR 演算子として機能します。
machineConfigLabels
が定義されている場合は、マシン設定プールベースのマッチングが指定の recommend:
一覧の項目に対してオンになります。<mcLabels>
はマシン設定のラベルを指定します。マシン設定は、プロファイル <tuned_profile_name>
にカーネル起動パラメーターなどのホスト設定を適用するために自動的に作成されます。この場合は、マシン設定セレクターが <mcLabels>
に一致するすべてのマシン設定プールを検索し、プロファイル <tuned_profile_name>
を確認されるマシン設定プールが割り当てられるすべてのノードに設定する必要があります。マスターロールとワーカーのロールの両方を持つノードをターゲットにするには、マスターロールを使用する必要があります。
リスト項目の match
および machineConfigLabels
は論理 OR 演算子によって接続されます。match
項目は、最初にショートサーキット方式で評価されます。そのため、true
と評価される場合、machineConfigLabels
項目は考慮されません。
マシン設定プールベースのマッチングを使用する場合は、同じハードウェア設定を持つノードを同じマシン設定プールにグループ化することが推奨されます。この方法に従わない場合は、TuneD オペランドが同じマシン設定プールを共有する 2 つ以上のノードの競合するカーネルパラメーターを計算する可能性があります。
例: ノードまたは Pod のラベルベースのマッチング
上記のコンテナー化された TuneD デーモンの CR は、プロファイルの優先順位に基づいてその recommend.conf
ファイルに変換されます。最も高い優先順位 (10
) を持つプロファイルは openshift-control-plane-es
であるため、これが最初に考慮されます。指定されたノードで実行されるコンテナー化された TuneD デーモンは、同じノードに tuned.openshift.io/elasticsearch
ラベルが設定された Pod が実行されているかどうかを確認します。これがない場合は、<match>
セクション全体が false
として評価されます。このラベルを持つこのような Pod がある場合に、<match>
セクションが true
に評価されるようにするには、ノードラベルを node-role.kubernetes.io/master
または node-role.kubernetes.io/infra
にする必要もあります。
優先順位が 10
のプロファイルのラベルが一致した場合は、openshift-control-plane-es
プロファイルが適用され、その他のプロファイルは考慮されません。ノード/Pod ラベルの組み合わせが一致しない場合は、2 番目に高い優先順位プロファイル (openshift-control-plane
) が考慮されます。このプロファイルは、コンテナー化された TuneD Pod が node-role.kubernetes.io/master
または node-role.kubernetes.io/infra
ラベルを持つノードで実行される場合に適用されます。
最後に、プロファイル openshift-node
には最低の優先順位である 30
が設定されます。これには <match>
セクションがないため、常に一致します。これは、より高い優先順位の他のプロファイルが指定されたノードで一致しない場合に openshift-node
プロファイルを設定するために、最低の優先順位のノードが適用される汎用的な (catch-all) プロファイルとして機能します。
例: マシン設定プールベースのマッチング
ノードの再起動を最小限にするには、ターゲットノードにマシン設定プールのノードセレクターが一致するラベルを使用してラベルを付け、上記の Tuned CR を作成してから、最後にカスタムのマシン設定プール自体を作成します。
クラウドプロバイダー固有の TuneD プロファイル
この機能により、すべてのクラウドプロバイダー固有のノードに、Red Hat OpenShift Service on AWS クラスター上の特定のクラウドプロバイダーに合わせて特別に調整された TuneD プロファイルを簡単に割り当てることができます。これは、追加のノードラベルを追加したり、ノードをマシン設定プールにグループ化したりせずに実行できます。
この機能は、<cloud-provider>://<cloud-provider-specific-id>
という形式の spec.providerID
ノードオブジェクト値を利用し、NTO オペランドコンテナーに値 <cloud-provider>
を持つファイル /var/lib/ocp-tuned/provider
を書き込みます。その後、このファイルのコンテンツは TuneD により、プロバイダー provider-<cloud-provider>
プロファイル (存在する場合) を読み込むために使用されます。
openshift-control-plane
および openshift-node
プロファイルの両方の設定を継承する openshift
プロファイルは、条件付きプロファイルの読み込みを使用してこの機能を使用するよう更新されるようになりました。現時点で、NTO や TuneD にクラウドプロバイダー固有のプロファイルは含まれていません。ただし、すべてのクラウドプロバイダー固有のクラスターノードに適用されるカスタムプロファイル provider-<cloud-provider>
を作成できます。
GCE クラウドプロバイダープロファイルの例
プロファイルの継承により、provider-<cloud-provider>
プロファイルで指定された設定は、openshift
プロファイルとその子プロファイルによって上書きされます。
6.3.2. ノードのチューニング設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS (ROSA) CLI (rosa
) を使用してチューニング設定を作成できます。
前提条件
- ROSA CLI の最新バージョンをダウンロードしている。
- 最新バージョンのクラスターがある。
- ノードチューニング用に設定された仕様ファイルがある。
手順
次のコマンドを実行して、チューニング設定を作成します。
rosa create tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
$ rosa create tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec.json
ファイルへのパスを指定する必要があります。指定しない場合、コマンドはエラーを返します。出力例
I: Tuning config 'sample-tuning' has been created on cluster 'cluster-example'. I: To view all tuning configs, run 'rosa list tuning-configs -c cluster-example'
$ I: Tuning config 'sample-tuning' has been created on cluster 'cluster-example'. $ I: To view all tuning configs, run 'rosa list tuning-configs -c cluster-example'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを使用して、アカウントによって適用されている既存のチューニング設定を確認できます。
rosa list tuning-configs -c <cluster_name> [-o json]
$ rosa list tuning-configs -c <cluster_name> [-o json]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定リストに必要な出力のタイプを指定できます。
出力タイプを指定しないと、チューニング設定の ID と名前が表示されます。
出力タイプを指定しない場合の出力例
ID NAME 20468b8e-edc7-11ed-b0e4-0a580a800298 sample-tuning
ID NAME 20468b8e-edc7-11ed-b0e4-0a580a800298 sample-tuning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow json
などの出力タイプを指定すると、チューニング設定を JSON テキストとして受け取ります。注記次の JSON 出力には、読みやすくするために改行が含まれています。この JSON 出力は、JSON 文字列内の改行を削除しない限り無効です。
JSON 出力を指定した場合の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. ノードのチューニング設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS (ROSA) CLI (rosa
) を使用して、ノードチューニング設定を表示し、更新できます。
前提条件
- ROSA CLI の最新バージョンをダウンロードしている。
- 最新バージョンのクラスターがある。
- クラスターにノード調整設定が追加されている。
手順
チューニング設定を表示するには、
rosa describe
コマンドを使用します。rosa describe tuning-config -c <cluster_id>
$ rosa describe tuning-config -c <cluster_id>
1 --name <name_of_tuning>
2 [-o json]
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow この仕様ファイルの次の項目は次のとおりです。
出力タイプを指定しない場合の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 出力を指定した場合の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow チューニング設定を確認した後、
rosa edit
コマンドを使用して既存の設定を編集します。rosa edit tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
$ rosa edit tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドでは、
spec.json
ファイルを使用して設定を編集します。
検証
rosa describe
コマンドを再度実行して、spec.json
ファイルに加えた変更がチューニング設定で更新されていることを確認します。rosa describe tuning-config -c <cluster_id> --name <name_of_tuning>
$ rosa describe tuning-config -c <cluster_id> --name <name_of_tuning>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. ノードのチューニング設定の削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS (ROSA) CLI (rosa
) を使用して、チューニング設定を削除できます。
マシンプールで参照されているチューニング設定は削除できません。チューニング設定を削除する前に、すべてのマシンプールからチューニング設定を削除する必要があります。
前提条件
- ROSA CLI の最新バージョンをダウンロードしている。
- 最新バージョンのクラスターがある。
- クラスターに、削除したいノードチューニング設定がある。
手順
チューニング設定を削除するには、次のコマンドを実行します。
rosa delete tuning-config -c <cluster_id> <name_of_tuning>
$ rosa delete tuning-config -c <cluster_id> <name_of_tuning>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター上のチューニング設定が削除されました。
出力例
? Are you sure you want to delete tuning config sample-tuning on cluster sample-cluster? Yes I: Successfully deleted tuning config 'sample-tuning' from cluster 'sample-cluster'
? Are you sure you want to delete tuning config sample-tuning on cluster sample-cluster? Yes I: Successfully deleted tuning config 'sample-tuning' from cluster 'sample-cluster'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow