ノード
OpenShift Container Platform でのノードの設定および管理
概要
第1章 ノードの概要 リンクのコピーリンクがクリップボードにコピーされました!
1.1. ノードについて リンクのコピーリンクがクリップボードにコピーされました!
ノードは、Kubernetes クラスター内の仮想マシンまたはベアメタルマシンです。ワーカーノードは、Pod としてグループ化されたアプリケーションコンテナーをホストします。コントロールプレーンノードは、Kubernetes クラスターを制御するために必要なサービスを実行します。OpenShift Container Platform では、コントロールプレーンノードには、OpenShift Container Platform クラスターを管理するための Kubernetes サービス以上のものが含まれています。
クラスター内に安定した正常なノードを持つことは、ホストされたアプリケーションがスムーズに機能するための基本です。OpenShift Container Platform では、ノードを表す Node オブジェクトを介して Node にアクセス、管理、およびモニターできます。OpenShift CLI (oc) または Web コンソールを使用して、ノードで以下の操作を実行できます。
ノードの次のコンポーネントは、Pod の実行を維持し、Kubernetes ランタイム環境を提供するロールを果たします。
- コンテナーランタイム
- コンテナーランタイムはコンテナーの実行を担当します。OpenShift Container Platform は、クラスター内の各 Red Hat Enterprise Linux CoreOS (RHCOS) ノードに CRI-O コンテナーランタイムをデプロイします。Windows Machine Config Operator (WMCO) は、Windows ノードに containerd ランタイムをデプロイします。
- Kubelet
- Kubelet はノード上で実行され、コンテナーマニフェストを読み取ります。定義されたコンテナーが開始され、実行されていることを確認します。kubelet プロセスは、作業の状態とノードサーバーを維持します。Kubelet は、ネットワークルールとポートフォワーディングを管理します。kubelet は、Kubernetes によってのみ作成されたコンテナーを管理します。
- DNS
- クラスター DNS は、Kubernetes サービスの DNS レコードを提供する DNS サーバーです。Kubernetes により開始したコンテナーは、DNS 検索にこの DNS サーバーを自動的に含めます。
1.1.1. 読み取り操作 リンクのコピーリンクがクリップボードにコピーされました!
読み取り操作により、管理者または開発者は OpenShift Container Platform クラスター内のノードに関する情報を取得できます。
- クラスター内のすべてのノードを一覧表示します。
- メモリーと CPU の使用率、ヘルス、ステータス、経過時間など、ノードに関する情報を取得します。
- ノードで実行されている Pod を一覧表示します。
1.1.2. エンハンスメント操作 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform を使用すると、ノードへのアクセスと管理以上のことができます。管理者は、ノードで次のタスクを実行して、クラスターをより効率的でアプリケーションに適したものにし、開発者により良い環境を提供できます。
- Node Tuning Operator を使用して、ある程度のカーネルチューニングを必要とする高性能アプリケーションのノードレベルのチューニングを管理します。
- ノードで TLS セキュリティープロファイルを有効にして、kubelet と Kubernetes API サーバー間の通信を保護します。
- デーモンセットを使用して、ノードでバックグラウンドタスクを自動的に実行します。デーモンセットを作成して使用し、共有ストレージを作成したり、すべてのノードでロギング Pod を実行したり、すべてのノードに監視エージェントをデプロイしたりできます。
- ガベージコレクションを使用してノードリソースを解放します。終了したコンテナーと、実行中の Pod によって参照されていないイメージを削除することで、ノードが効率的に実行されていることを確認できます。
- ノードのセットにカーネル引数を追加します。
- ネットワークエッジにワーカーノード (リモートワーカーノード) を持つように OpenShift Container Platform クラスターを設定します。OpenShift Container Platform クラスターにリモートワーカーノードを配置する際の課題と、リモートワーカーノードで Pod を管理するための推奨されるアプローチは、ネットワークエッジでのリモートワーカーノードの使用 を参照してください。
1.2. Pod について リンクのコピーリンクがクリップボードにコピーされました!
Pod は、ノードに一緒にデプロイされる 1 つ以上のコンテナーです。クラスター管理者は、Pod を定義し、スケジューリングの準備ができている正常なノードで実行するように割り当て、管理することができます。コンテナーが実行されている限り、Pod は実行されます。Pod を定義して実行すると、Pod を変更することはできません。Pod を操作するときに実行できる操作は次のとおりです。
1.2.1. 読み取り操作 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、次のタスクを通じてプロジェクト内の Pod に関する情報を取得できます。
- レプリカと再起動の数、現在のステータス、経過時間などの情報を含む、プロジェクトに関連付けられている Pod を一覧表示 します。
- CPU、メモリー、ストレージ消費量などの Pod 使用状況の統計を表示 します。
1.2.2. 管理操作 リンクのコピーリンクがクリップボードにコピーされました!
以下のタスクのリストは、管理者が OpenShift Container Platform クラスターで Pod を管理する方法の概要を示しています。
OpenShift Container Platform で利用可能な高度なスケジューリング機能を使用して、Pod のスケジューリングを制御します。
- Pod アフィニティー、ノードアフィニティー、アンチアフィニティー などのノードと Pod 間のバインディングルール。
- ノードラベルとセレクター。
- taint および toleration。
- Pod トポロジー分散制約。
- 二次スケジューリング。
- スケジューラーが Pod をより適切なノードに再スケジュールできるように、特定のストラテジーに基づいて Pod を退避するように descheduler を設定 します。
- Pod コントローラーと再起動ポリシーを使用して、再起動後の Pod の動作を設定します。
- Pod で送信トラフィックと受信トラフィックの両方を制限 します。
- Pod テンプレートを持つ任意のオブジェクトにボリュームを追加および削除します。ボリュームは、Pod 内のすべてのコンテナーで使用できるマウントされたファイルシステムです。コンテナーストレージは一時的なものです。ボリュームを使用すると、コンテナーデータを永続化できます。
1.2.3. エンハンスメント操作 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform で利用可能なさまざまなツールと機能を使用して、Pod をより簡単かつ効率的に操作できます。次の操作では、これらのツールと機能を使用して Pod をより適切に管理します。
| 操作 | ユーザー | 詳細情報 |
|---|---|---|
| Horizontal Pod Autoscaler を作成して使用。 | 開発者 | Horizontal Pod Autoscaler を使用して、実行する Pod の最小数と最大数、および Pod がターゲットとする CPU 使用率またはメモリー使用率を指定できます。Horizontal Pod Autoscaler を使用すると、Pod を自動的にスケーリング できます。 |
| 管理者および開発者 | 管理者は、垂直 Pod オートスケーラーを使用して、リソースとワークロードのリソース要件を監視することにより、クラスターリソースをより適切に使用します。 開発者は、垂直 Pod オートスケーラーを使用して、各 Pod に十分なリソースがあるノードに Pod をスケジュールすることにより、需要が高い時に Pod が稼働し続けるようにします。 | |
| デバイスプラグインを使用して外部リソースへのアクセスを提供。 | 管理者 | デバイスプラグイン は、ノード (kubelet の外部) で実行される gRPC サービスであり、特定のハードウェアリソースを管理します。デバイスプラグインをデプロイ して、クラスター間でハードウェアデバイスを使用するための一貫性のある移植可能なソリューションを提供できます。 |
|
| 管理者 |
一部のアプリケーションでは、パスワードやユーザー名などの機密情報が必要です。 |
1.3. コンテナーについて リンクのコピーリンクがクリップボードにコピーされました!
コンテナーは、OpenShift Container Platform アプリケーションの基本ユニットであり、依存関係、ライブラリー、およびバイナリーとともにパッケージ化されたアプリケーションコードで構成されます。コンテナーは、複数の環境、および物理サーバー、仮想マシン (VM)、およびプライベートまたはパブリッククラウドなどの複数のデプロイメントターゲット間に一貫性をもたらします。
Linux コンテナーテクノロジーは、実行中のプロセスを分離し、指定されたリソースのみへのアクセスを制限するための軽量メカニズムです。管理者は、Linux コンテナーで次のようなさまざまなタスクを実行できます。
OpenShift Container Platform は、Init コンテナー と呼ばれる特殊なコンテナーを提供します。Init コンテナーは、アプリケーションコンテナーの前に実行され、アプリケーションイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。Pod の残りの部分がデプロイされる前に、Init コンテナーを使用してタスクを実行できます。
ノード、Pod、およびコンテナーで特定のタスクを実行する以外に、OpenShift Container Platform クラスター全体を操作して、クラスターの効率とアプリケーション Pod の高可用性を維持できます。
1.4. ノードでの Pod の自動スケーリング リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform には、ノード上の Pod の数と Pod に割り当てられたリソースの自動スケーリングに使用できる 3 つのツールがあります。
- Horizontal Pod Autoscaler
Horizontal Pod Autoscaler (HPA) は、レプリケーションコントローラーまたはデプロイメント設定のスケールを、そのレプリケーションコントローラーまたはデプロイメント設定に属する Pod から収集されたメトリクスに基づき自動的に増減できます。
詳細は、Horizontal Pod Autoscaler を使用した Pod の自動スケーリング を参照してください。
- カスタムメトリクスオートスケーラー
カスタムメトリクスオートスケーラーは、CPU やメモリーに基づくだけではないカスタムメトリクスに基づき、デプロイメント、ステートフルセット、カスタムリソース、またはジョブの Pod 数を自動的に増減できます。
詳細は、Custom Metrics Autoscaler Operator の概要 を参照してください。
- Vertical Pod Autoscaler
Vertical Pod Autoscaler (VPA) は、Pod 内のコンテナーの履歴および現在の CPU とメモリーリソースを自動的に確認し、確認された使用値に基づいてリソース制限および要求を更新できます。
詳細は、vertical pod autoscaler を使用した Pod リソースレベルの自動調整 を参照してください。
1.5. OpenShift Container Platform のノードの一般用語集 リンクのコピーリンクがクリップボードにコピーされました!
この用語集では、ノード のコンテンツで使用される一般的な用語を定義しています。
- コンテナー
- これは、ソフトウェアとそのすべての依存関係を構成する軽量で実行可能なイメージです。コンテナーはオペレーティングシステムを仮想化するため、データセンターからパブリックまたはプライベートクラウド、さらには開発者のラップトップまで、どこでもコンテナーを実行できます。
- デーモンセット
- Pod のレプリカが OpenShift Container Platform クラスター内の対象となるノードで実行されるようにします。
- egress
- Pod からのネットワークのアウトバウンドトラフィックを介して外部とデータを共有するプロセス。
- ガベージコレクション
- 終了したコンテナーや実行中の Pod によって参照されていないイメージなどのクラスターリソースをクリーンアップするプロセス。
- Horizontal Pod Autoscaler (HPA)
- Kubernetes API リソースおよびコントローラーとして実装されます。HPA を使用して、実行する Pod の最小数と最大数を指定できます。Pod がターゲットとする CPU またはメモリーの使用率を指定することもできます。HPA は、特定の CPU またはメモリーのしきい値を超えると、Pod をスケールアウトおよびスケールインします。
- Ingress
- Pod への着信トラフィック。
- ジョブ
- 完了するまで実行されるプロセス。ジョブは 1 つ以上の Pod オブジェクトを作成し、指定された Pod が正常に完了するようにします。
- ラベル
- キーと値のペアであるラベルを使用して、Pod などのオブジェクトのサブセットを整理および選択できます。
- Node
- OpenShift Container Platform クラスター内のワーカーマシン。ノードは、仮想マシン (VM) または物理マシンのいずれかになります。
- Node Tuning Operator
- Node Tuning Operator を使用すると、TuneD デーモンを使用してノードレベルのチューニングを管理できます。これにより、カスタムチューニング仕様が、デーモンが認識する形式でクラスターで実行されるすべてのコンテナー化された TuneD デーモンに渡されます。デーモンは、ノードごとに 1 つずつ、クラスターのすべてのノードで実行されます。
- Self Node Remediation Operator
- Operator はクラスターノードで実行され、異常なノードを特定して再起動します。
- Pod
- OpenShift Container Platform クラスターで実行されている、ボリュームや IP アドレスなどの共有リソースを持つ 1 つ以上のコンテナー。Pod は、定義、デプロイ、および管理される最小のコンピュート単位です。
- toleration
- taint が一致するノードまたはノードグループで Pod をスケジュールできる (必須ではない) ことを示します。toleration を使用して、スケジューラーが一致する taint を持つ Pod をスケジュールできるようにすることができます。
- taint
- キー、値、および Effect で構成されるコアオブジェクト。taint と toleration が連携して、Pod が無関係なノードでスケジュールされないようにします。
第2章 Pod の使用 リンクのコピーリンクがクリップボードにコピーされました!
2.1. Pod の使用 リンクのコピーリンクがクリップボードにコピーされました!
Pod は 1 つのホストにデプロイされる 1 つ以上のコンテナーであり、定義され、デプロイされ、管理される最小のコンピュート単位です。
2.1.1. Pod について リンクのコピーリンクがクリップボードにコピーされました!
Pod はコンテナーに対してマシンインスタンス (物理または仮想) とほぼ同じ機能を持ちます。各 Pod は独自の内部 IP アドレスで割り当てられるため、そのポートスペース全体を所有し、Pod 内のコンテナーはそれらのローカルストレージおよびネットワークを共有できます。
Pod にはライフサイクルがあります。それらは定義された後にノードで実行されるために割り当てられ、コンテナーが終了するまで実行されるか、その他の理由でコンテナーが削除されるまで実行されます。ポリシーおよび終了コードによっては、Pod は終了後に削除されるか、コンテナーのログへのアクセスを有効にするために保持される可能性があります。
OpenShift Container Platform は Pod をほとんどがイミュータブルなものとして処理します。Pod が実行中の場合は Pod に変更を加えることができません。OpenShift Container Platform は既存 Pod を終了し、これを変更された設定、ベースイメージのいずれかまたはその両方で再作成して変更を実装します。Pod は拡張可能なものとしても処理されますが、再作成時に状態を維持しません。そのため、Pod はユーザーが直接管理するのではなく、通常は上位レベルのコントローラーによって管理される必要があります。
OpenShift Container Platform ノードホストごとの Pod の最大数については、クラスターの制限を参照してください。
レプリケーションコントローラーによって管理されないベア Pod はノードの中断時に再スケジュールされません。
2.1.2. Pod 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、Pod の Kubernetes の概念を活用しています。これはホスト上に共にデプロイされる 1 つ以上のコンテナーであり、定義され、デプロイされ、管理される最小のコンピュート単位です。
以下は Pod の定義例です。これは数多くの Pod の機能を示していますが、それらのほとんどは他のトピックで説明されるため、ここではこれらを簡単に説明します。
Pod オブジェクト定義 (YAML)
- 1
- Pod には 1 つまたは複数のラベルで "タグ付け" することができ、このラベルを使用すると、一度の操作で Pod グループの選択や管理が可能になります。これらのラベルは、キー/値形式で
metadataハッシュに保存されます。 - 2
- Pod 再起動ポリシーと使用可能な値の
Always、OnFailure、およびNeverです。デフォルト値はAlwaysです。 - 3
- OpenShift Container Platform は、コンテナーが特権付きコンテナーとして実行されるか、選択したユーザーとして実行されるかどうかを指定するセキュリティーコンテキストを定義します。デフォルトのコンテキストには多くの制限がありますが、管理者は必要に応じてこれを変更できます。
- 4
containersは、1 つ以上のコンテナー定義の配列を指定します。- 5
- コンテナーは、コンテナー内に外部ストレージボリュームをマウントする場所を指定します。
- 6
- Pod に提供するボリュームを指定します。ボリュームは指定されたパスにマウントされます。コンテナーのルート (
/) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合に、ホストシステムを破壊する可能性があります (例: ホストの/dev/ptsファイル)。ホストをマウントするには、/hostを使用するのが安全です。 - 7
- Pod 内の各コンテナーは、独自のコンテナーイメージからインスタンス化されます。
- 8
- Pod は、コンテナーで使用できるストレージボリュームを定義します。
ファイル数が多い永続ボリュームを Pod に割り当てる場合、それらの Pod は失敗するか、起動に時間がかかる場合があります。詳細は、When using Persistent Volumes with high file counts in OpenShift, why do pods fail to start or take an excessive amount of time to achieve "Ready" state? を参照してください。
この Pod 定義には、Pod が作成され、ライフサイクルが開始された後に OpenShift Container Platform によって自動的に設定される属性が含まれません。Kubernetes Pod ドキュメント には、Pod の機能および目的の詳細が記載されています。
2.1.3. リソース要求および制限について リンクのコピーリンクがクリップボードにコピーされました!
Pod の仕様 (「Pod 設定の例」を参照) または Pod の制御オブジェクトの仕様を使用すると、Pod の CPU およびメモリーの要求と制限を指定できます。
CPU およびメモリーの 要求 は、Pod の実行に必要なリソースの最小量を指定するものです。これは、OpenShift Container Platform が十分なリソースを持つノードに Pod をスケジュールするのに役立ちます。
CPU とメモリーの 制限 は、Pod が消費できるリソースの最大量を定義するものです。これは、Pod がリソースを過剰に消費して同じノード上の他の Pod に影響を与える可能性を防ぎます。
CPU およびメモリーの要求と制限は、次の原則に従って処理されます。
CPU 制限は、CPU スロットリングを使用して適用されます。コンテナーが CPU 制限に近づくと、コンテナーの制限として指定された CPU へのアクセスをカーネルが制限します。したがって、CPU 制限はカーネルによって適用されるハード制限です。OpenShift Container Platform では、コンテナーが CPU 制限を長時間超過することが許される場合があります。ただし、コンテナーランタイムは、CPU 使用率が高すぎる場合でも Pod またはコンテナーを終了しません。
CPU の制限と要求は CPU 単位で測定されます。1 つの CPU ユニットは、ノードが物理ホストであるか、物理マシン内で実行されている仮想マシンであるかに応じて、1 つの物理 CPU コアまたは 1 つの仮想コアに相当します。小数の要求も許可されます。たとえば、CPU 要求を
0.5にしてコンテナーを定義すると、1.0CPU を要求した場合の半分の CPU 時間を要求することになります。CPU ユニットの場合、0.1は100mに相当します。これは 100 millicpu または 100 ミリコア として読み取られます。CPU リソースは常に絶対的なリソース量であり、相対的な量ではありません。注記デフォルトでは、Pod に割り当てることができる CPU の最小量は 10 mCPU です。Pod の仕様では、10 mCPU 未満のリソース制限を要求できます。その場合も、Pod には 10 mCPU が割り当てられます。
メモリー制限は、カーネルにより、Out of Memory (OOM) による強制終了を使用して適用されます。コンテナーがメモリー制限を超えるメモリーを使用する場合、カーネルはそのコンテナーを終了できます。ただし、終了はカーネルがメモリーの逼迫を検出した場合にのみ実行されます。そのため、メモリーを過剰に割り当てるコンテナーがすぐに強制終了されないことがあります。つまり、メモリー制限はリアクティブに適用されます。コンテナーはメモリー制限を超えるメモリーを使用することがあります。その場合、コンテナーが強制終了される可能性があります。
メモリーは、数量を表す
E、P、T、G、M、またはkのいずれかの接尾辞を使用して、単純な整数または固定小数点数として表すことができます。対応する 2 のべき乗の単位 (Ei、Pi、Ti、Gi、Mi、またはKi) を使用することもできます。
Pod が実行されているノードに十分なリソースがある場合、コンテナーは要求よりも多くの CPU またはメモリーリソースを使用する可能性があります。ただし、コンテナーは対応する制限を超えることはできません。たとえば、コンテナーのメモリー要求を 256 MiB に設定し、そのコンテナーが 8GiB のメモリーを持つノードにスケジュールされた Pod 内にあり、そのノードに他の Pod がない場合、コンテナーは要求された 256 MiB より多くのメモリーを使用しようとする可能性があります。
この動作は CPU およびメモリーの制限には適用されません。CPU およびメモリーの制限は、kubelet とコンテナーランタイムによって適用され、カーネルによって強制されます。Linux ノードでは、カーネルが cgroups を使用して制限を適用します。
Linux ワークロードの場合、huge page リソースを指定できます。huge page は Linux 固有の機能です。この機能が有効な場合、ノードのカーネルが、デフォルトのページサイズよりもはるかに大きいメモリーブロックを割り当てます。たとえば、デフォルトのページサイズが 4 KiB のシステムで、より大きな制限を指定できます。huge page の詳細は、「huge page」を参照してください。
2.2. Pod の表示 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、クラスター Pod を表示し、その健全性をチェックして、クラスターの全体的な健全性を評価できます。特定のプロジェクトに関連付けられている Pod のリストを表示したり、Pod に関する使用状況統計を表示したりすることもできます。Pod を定期的に表示すると、問題を早期に検出し、リソースの使用状況を追跡し、クラスターの安定性を確保するのに役立ちます。
2.2.1. プロジェクトでの Pod の表示 リンクのコピーリンクがクリップボードにコピーされました!
CPU、メモリー、ストレージ消費量などの Pod の使用状況に関する統計情報を表示して、コンテナーのランタイム環境を監視し、効率的なリソース使用を確保できます。
手順
次のコマンドを入力してプロジェクトに変更します。
oc project <project_name>
$ oc project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して Pod のリストを取得します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE console-698d866b78-bnshf 1/1 Running 2 165m console-698d866b78-m87pm 1/1 Running 2 165m
NAME READY STATUS RESTARTS AGE console-698d866b78-bnshf 1/1 Running 2 165m console-698d866b78-m87pm 1/1 Running 2 165mCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Pod の IP アドレスと Pod が配置されているノードを表示するには、
-o wideフラグを追加します。以下に例を示します。oc get pods -o wide
$ oc get pods -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE console-698d866b78-bnshf 1/1 Running 2 166m 10.128.0.24 ip-10-0-152-71.ec2.internal <none> console-698d866b78-m87pm 1/1 Running 2 166m 10.129.0.23 ip-10-0-173-237.ec2.internal <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE console-698d866b78-bnshf 1/1 Running 2 166m 10.128.0.24 ip-10-0-152-71.ec2.internal <none> console-698d866b78-m87pm 1/1 Running 2 166m 10.129.0.23 ip-10-0-173-237.ec2.internal <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2. Pod の使用状況に関する統計の表示 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーのランタイム環境を提供する、Pod に関する使用状況の統計を表示できます。これらの使用状況の統計には CPU、メモリー、およびストレージの消費量が含まれます。
前提条件
-
使用状況の統計を表示するには、
cluster-reader権限が必要です。 - 使用状況の統計を表示するには、メトリクスをインストールしている必要があります。
手順
次のコマンドを入力して使用状況の統計情報を表示します。
oc adm top pods -n <namespace>
$ oc adm top pods -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CPU(cores) MEMORY(bytes) console-7f58c69899-q8c8k 0m 22Mi console-7f58c69899-xhbgg 0m 25Mi downloads-594fcccf94-bcxk8 3m 18Mi downloads-594fcccf94-kv4p6 2m 15Mi
NAME CPU(cores) MEMORY(bytes) console-7f58c69899-q8c8k 0m 22Mi console-7f58c69899-xhbgg 0m 25Mi downloads-594fcccf94-bcxk8 3m 18Mi downloads-594fcccf94-kv4p6 2m 15MiCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ラベル付き Pod の使用状況の統計情報を表示するには、
--selector=''ラベルを追加します。フィルタリングするラベルクエリー (=、==、!=など) を選択する必要があることに注意してください。以下に例を示します。oc adm top pod --selector='<pod_name>'
$ oc adm top pod --selector='<pod_name>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.3. リソースログの表示 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift CLI (oc) または Web コンソールでリソースのログを表示できます。デフォルトでは、ログは最後 (または末尾) から表示されます。リソースのログを表示すると、問題のトラブルシューティングやリソースの動作の監視に役立ちます。
2.2.3.1. Web コンソールを使用してリソースログを表示する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用してリソースログを表示するには、次の手順に従います。
手順
OpenShift Container Platform コンソールで Workloads → Pods に移動するか、調査するリソースから Pod に移動します。
注記ビルドなどの一部のリソースには、直接クエリーする Pod がありません。このような場合は、リソースの Details ページで Logs リンクを特定できます。
- ドロップダウンメニューからプロジェクトを選択します。
- 調査する Pod の名前をクリックします。
- Logs をクリックします。
2.2.3.2. CLI を使用してリソースログを表示する リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインインターフェイス (CLI) を使用してリソースログを表示するには、次の手順を使用します。
前提条件
-
OpenShift CLI (
oc) へのアクセスがある。
手順
次のコマンドを入力して、特定の Pod のログを表示します。
oc logs -f <pod_name> -c <container_name>
$ oc logs -f <pod_name> -c <container_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各項目の説明:
-f- オプション: ログに書き込まれている内容に沿って出力することを指定します。
<pod_name>- Pod の名前を指定します。
<container_name>- オプション: コンテナーの名前を指定します。Pod に複数のコンテナーがある場合は、コンテナー名を指定する必要があります。
以下に例を示します。
oc logs -f ruby-57f7f4855b-znl92 -c ruby
$ oc logs -f ruby-57f7f4855b-znl92 -c rubyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、特定のリソースのログを表示します。
oc logs <object_type>/<resource_name>
$ oc logs <object_type>/<resource_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc logs deployment/ruby
$ oc logs deployment/rubyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. OpenShift Container Platform クラスターでの Pod の設定 リンクのコピーリンクがクリップボードにコピーされました!
管理者として、Pod に対して効率的なクラスターを作成し、維持することができます。
クラスターの効率性を維持することにより、1 回のみ実行するように設計された Pod をいつ再起動するか、Pod が利用できる帯域幅をいつ制限するか、中断時に Pod をどのように実行させ続けるかなど、Pod が終了するときの動作をツールとして使用して必要な数の Pod が常に実行されるようにし、開発者により良い環境を提供することができます。
2.3.1. 再起動後の Pod の動作方法の設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod 再起動ポリシーは、Pod のコンテナーの終了時に OpenShift Container Platform が応答する方法を決定します。このポリシーは Pod のすべてのコンテナーに適用されます。
以下の値を使用できます。
-
Always- Pod で正常に終了したコンテナーの再起動を継続的に試みます。指数関数的なバックオフ遅延 (10 秒、20 秒、40 秒) は 5 分に制限されています。デフォルトはAlwaysです。 -
OnFailure: Pod で失敗したコンテナーの継続的な再起動を、5 分を上限として指数関数のバックオフ遅延 (10 秒、20 秒、40 秒) で試行します。 -
Never: Pod で終了したコンテナーまたは失敗したコンテナーの再起動を試行しません。Pod はただちに失敗し、終了します。
いったんノードにバインドされた Pod は別のノードにはバインドされなくなります。これは、Pod がノードの失敗後も存続するにはコントローラーが必要であることを示しています。
| 条件 | コントローラーのタイプ | 再起動ポリシー |
|---|---|---|
| 終了することが期待される Pod (バッチ計算など) | ジョブ |
|
| 終了しないことが期待される Pod (Web サーバーなど) | レプリケーションコントローラー |
|
| マシンごとに 1 回実行される Pod | デーモンセット | すべて |
Pod のコンテナーが失敗し、再起動ポリシーが OnFailure に設定される場合、Pod はノード上に留まり、コンテナーが再起動します。コンテナーを再起動させない場合には、再起動ポリシーの Never を使用します。
Pod 全体が失敗すると、OpenShift Container Platform は新規 Pod を起動します。開発者は、アプリケーションが新規 Pod で再起動される可能性に対応しなくてはなりません。とくに、アプリケーションは、一時的なファイル、ロック、以前の実行で生じた未完成の出力などを処理する必要があります。
Kubernetes アーキテクチャーでは、クラウドプロバイダーからの信頼性のあるエンドポイントが必要です。クラウドプロバイダーが停止している場合、kubelet は OpenShift Container Platform が再起動されないようにします。
基礎となるクラウドプロバイダーのエンドポイントに信頼性がない場合は、クラウドプロバイダー統合を使用してクラスターをインストールしないでください。クラスターを、非クラウド環境で実行する場合のようにインストールします。インストール済みのクラスターで、クラウドプロバイダー統合をオンまたはオフに切り替えることは推奨されていません。
OpenShift Container Platform が失敗したコンテナーで再起動ポリシーを使用する方法の詳細は、Kubernetes ドキュメントの Example States を参照してください。
2.3.2. Pod で利用可能な帯域幅の制限 リンクのコピーリンクがクリップボードにコピーされました!
Quality-of-Service (QoS) トラフィックシェーピングを Pod に適用し、その利用可能な帯域幅を効果的に制限することができます。(Pod からの) Egress トラフィックは、設定したレートを超えるパケットを単純にドロップするポリシングによって処理されます。(Pod への) Ingress トラフィックは、データを効果的に処理できるようシェーピングでパケットをキューに入れて処理されます。Pod に設定する制限は、他の Pod の帯域幅には影響を与えません。
手順
Pod の帯域幅を制限するには、以下を実行します。
オブジェクト定義 JSON ファイルを作成し、
kubernetes.io/ingress-bandwidthおよびkubernetes.io/egress-bandwidthアノテーションを使用してデータトラフィックの速度を指定します。たとえば、Pod の egress および ingress の両方の帯域幅を 10M/s に制限するには、以下を実行します。制限が設定された
Podオブジェクト定義Copy to Clipboard Copied! Toggle word wrap Toggle overflow オブジェクト定義を使用して Pod を作成します。
oc create -f <file_or_dir_path>
$ oc create -f <file_or_dir_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.3. 起動している必要がある Pod の数を Pod Disruption Budget を使用して指定する方法について リンクのコピーリンクがクリップボードにコピーされました!
Pod Disruption Budget を使用すると、メンテナンスのためにノードの drain (Pod の退避) を実行するなど、運用中の Pod に対して安全上の制約を指定できます。
PodDisruptionBudget は、同時に起動している必要のあるレプリカの最小数またはパーセンテージを指定する API オブジェクトです。これらをプロジェクトに設定することは、ノードのメンテナンス (クラスターのスケールダウンまたはクラスターのアップグレードなどの実行) 時に役立ち、この設定は (ノードの障害時ではなく) 自発的な退避の場合にのみ許可されます。
PodDisruptionBudget オブジェクトの設定は、次の主要な部分で構成されます。
- 一連の Pod に対するラベルのクエリー機能であるラベルセレクター。
同時に利用可能にする必要のある Pod の最小数を指定する可用性レベル。
-
minAvailableは、中断時にも常に利用可能である必要のある Pod 数です。 -
maxUnavailableは、中断時に利用不可にできる Pod 数です。
-
Available は、Ready=True の状態にある Pod 数を指します。Ready=True は、要求に対応でき、一致するすべてのサービスの負荷分散プールに追加する必要がある Pod を指します。
maxUnavailable の 0% または 0 あるいは minAvailable の 100%、ないしはレプリカ数に等しい値は許可されますが、これによりノードが drain (Pod の退避) を実行しないようにブロックされる可能性があります。
OpenShift Container Platform のすべてのマシン設定プールにおける maxUnavailable のデフォルト設定は 1 です。この値を変更せず、一度に 1 つのコントロールプレーンノードを更新することを推奨します。コントロールプレーンプールのこの値を 3 に変更しないでください。
次のコマンドで、すべてのプロジェクトの Pod Disruption Budget を確認できます。
oc get poddisruptionbudget --all-namespaces
$ oc get poddisruptionbudget --all-namespaces
次の例には、OpenShift Container Platform on AWS に固有の値がいくつか含まれています。
出力例
PodDisruptionBudget は、最低でも minAvailable Pod がシステムで実行されている場合は正常であるとみなされます。この制限を超えるすべての Pod は退避の対象となります。
Pod の優先度とプリエンプションの設定によっては、Pod Disruption Budget の要件にもかかわらず、優先度の低い Pod が削除される可能性があります。
2.3.3.1. 起動している必要がある Pod の数を Pod Disruption Budget を使用して指定する リンクのコピーリンクがクリップボードにコピーされました!
同時に起動している必要のあるレプリカの最小数またはパーセンテージは、PodDisruptionBudget オブジェクトを使用して指定します。
手順
Pod Disruption Budget を設定するには、次の手順を実行します。
YAML ファイルを以下のようなオブジェクト定義で作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、以下を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してオブジェクトをプロジェクトに追加します。
oc create -f </path/to/file> -n <project_name>
$ oc create -f </path/to/file> -n <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.3.2. 正常でない Pod の退避ポリシーの指定 リンクのコピーリンクがクリップボードにコピーされました!
Pod Disruption Budget (PDB) を使用して、同時に使用可能にする必要がある Pod の数を指定する場合、異常な Pod を退避対象として考慮する基準も定義できます。
以下のポリシーから選択できます。
- IfHealthyBudget
- 正常ではない実行中の Pod は、保護されたアプリケーションが停止されない場合に限り退避できます。
- AlwaysAllow
まだ正常ではない実行中の Pod は、Pod Disruption Budget の基準が満たされているかどうかに関係なく退避される可能性があります。このポリシーは、Pod が
CrashLoopBackOff状態でスタックしているアプリケーションやReadyステータスの報告に失敗しているアプリケーションなど、正常に動作しないアプリケーションを退避するために使用できます。注記ノードの drain (Pod の退避) を実行中に誤動作するアプリケーションの退避をサポートするには、
PodDisruptionBudgetオブジェクトのunhealthyPodEvictionPolicyフィールドをAlwaysAllowに設定することを推奨します。デフォルトの動作では、drain (Pod の退避) の実行を続行する前に、アプリケーション Pod が正常になるまで待機します。
手順
PodDisruptionBudgetオブジェクトを定義する YAML ファイルを作成し、正常でない Pod の退避ポリシーを指定します。pod-disruption-budget.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 正常でない Pod 退避ポリシーとして
IfHealthyBudgetまたはAlwaysAllowのいずれかを選択します。unhealthyPodEvictionPolicyフィールドが空の場合、デフォルトはIfHealthyBudgetです。
以下のコマンドを実行して
PodDisruptionBudgetオブジェクトを作成します。oc create -f pod-disruption-budget.yaml
$ oc create -f pod-disruption-budget.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
AlwaysAllow の異常な Pod 退避ポリシーが設定された PDB がある場合、その PDB によって保護されている、機能不全に陥ったアプリケーションの Pod を退避させつつ、ノードの drain (Pod の退避) を実行できるようになりました。
2.3.4. Critical Pod の使用による Pod の削除の防止 リンクのコピーリンクがクリップボードにコピーされました!
クラスターを十分に機能させるために不可欠であるのに、マスターノードではなく通常のクラスターノードで実行される重要なコンポーネントは多数あります。重要なアドオンを退避すると、クラスターが正常に動作しなくなる可能性があります。
Critical とマークされている Pod は退避できません。
手順
Pod を Critical にするには、以下を実行します。
Pod仕様を作成するか、既存の Pod を編集してsystem-cluster-critical優先順位クラスを含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ノードから退避すべきではない Pod のデフォルトの優先順位クラス。
または、クラスターにとって重要だが、必要に応じて削除できる Pod に
system-node-criticalを指定することもできます。Pod を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.5. ファイル数の多い永続ボリュームを使用する場合の Pod タイムアウトの短縮 リンクのコピーリンクがクリップボードにコピーされました!
ストレージボリュームに多くのファイル (~1,000,000 以上) が含まれている場合、Pod のタイムアウトが発生する可能性があります。
これは、ボリュームがマウントされると、Pod の securityContext で指定された fsGroup と一致するように、OpenShift Container Platform が各ボリュームのコンテンツの所有権とパーミッションを再帰的に変更するために発生する可能性があります。ボリュームが大きい場合、所有権とアクセス許可の確認と変更に時間がかかり、Pod の起動が非常に遅くなる可能性があります。
次の回避策のいずれかを適用することで、この遅延を減らすことができます。
- セキュリティーコンテキスト制約 (SCC) を使用して、ボリュームの SELinux の再ラベル付けをスキップします。
-
SCC 内の
fsGroupChangePolicyフィールドを使用して、OpenShift Container Platform がボリュームの所有権とパーミッションをチェックおよび管理する方法を制御します。 - Cluster Resource Override Operator を使用して SCC を自動的に適用し、SELinux の再ラベル付けを省略します。
- ランタイムクラスを使用して、ボリュームの SELinux 再ラベル付けをスキップします。
2.4. Horizontal Pod Autoscaler での Pod の自動スケーリング リンクのコピーリンクがクリップボードにコピーされました!
開発者として、Horizontal Pod Autoscaler (HPA) を使用して、レプリケーションコントローラーに属する Pod から収集されるメトリクスまたはデプロイメント設定に基づき、OpenShift Container Platform がレプリケーションコントローラーまたはデプロイメント設定のスケールを自動的に増減する方法を指定できます。HPA は、任意のデプロイメント、デプロイメント設定、レプリカセット、レプリケーションコントローラー、またはステートフルセットに対して作成できます。
カスタムメトリクスに基づいて Pod をスケーリングする方法の詳細は、カスタムメトリクスに基づいて Pod を自動的にスケーリングする を参照してください。
他のオブジェクトが提供する特定の機能や動作が必要な場合を除き、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用することを推奨します。これらのオブジェクトの詳細は、デプロイメントについて を参照してください。
2.4.1. Horizontal Pod Autoscaler について リンクのコピーリンクがクリップボードにコピーされました!
Horizontal Pod Autoscaler を作成して、実行する Pod の最小数と最大数、および Pod がターゲットとする CPU 使用量またはメモリー使用量を指定できます。
Horizontal Pod Autoscaler を作成すると、OpenShift Container Platform は Pod 上の CPU またはメモリー、あるいはその両方のリソースメトリクスのクエリーを開始します。これらのメトリクスが利用可能な場合、Horizontal Pod Autoscaler は、現在のメトリクス使用量と意図したメトリクス使用量の比率を計算し、必要に応じてスケールアップまたはスケールダウンします。クエリーとスケーリングは一定間隔で実行されますが、メトリクスが利用可能になるでに 1 分から 2 分の時間がかかる場合があります。
レプリケーションコントローラーの場合、このスケーリングはレプリケーションコントローラーのレプリカに直接対応します。デプロイメントの場合、スケーリングはデプロイメントのレプリカ数に直接対応します。自動スケーリングは Complete フェーズの最新デプロイメントにのみ適用されることに注意してください。
OpenShift Container Platform はリソースに自動的に対応し、起動時などのリソースの使用が急増した場合など必要のない自動スケーリングを防ぎます。unready 状態の Pod には、スケールアップ時の使用率が 0 CPU と指定され、Autoscaler はスケールダウン時にはこれらの Pod を無視します。既知のメトリクスのない Pod にはスケールアップ時の使用率が 0% CPU、スケールダウン時に 100% CPU となります。これにより、HPA の決定時に安定性が増します。この機能を使用するには、readiness チェックを設定して新規 Pod が使用可能であるかどうかを判別します。
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。
以下のメトリクスは Horizontal Pod Autoscaler でサポートされています。
| メトリクス | 説明 | API バージョン |
|---|---|---|
| CPU の使用率 | 使用されている CPU コアの数。これを使用して、Pod が要求した CPU の割合を計算できます。 |
|
| メモリーの使用率 | 使用されているメモリーの量。これを使用して、Pod が要求したメモリーの割合を計算できます。 |
|
メモリーベースの自動スケーリングでは、メモリー使用量がレプリカ数と比例して増減する必要があります。平均的には以下のようになります。
- レプリカ数が増えると、Pod ごとのメモリー (作業セット) の使用量が全体的に減少します。
- レプリカ数が減ると、Pod ごとのメモリー使用量が全体的に増加します。
OpenShift Container Platform Web コンソールを使用して、アプリケーションのメモリー動作を確認し、メモリーベースの自動スケーリングを使用する前にアプリケーションがそれらの要件を満たしていることを確認します。
以下の例は、hello-node Deployment オブジェクトの自動スケーリングを示しています。最初のデプロイメントでは 3 つの Pod が必要です。HPA オブジェクトは、最小値を 5 に増やします。Pod の CPU 使用率が 75% に達すると、Pod は 7 まで増加します。
oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75
$ oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75
出力例
horizontalpodautoscaler.autoscaling/hello-node autoscaled
horizontalpodautoscaler.autoscaling/hello-node autoscaled
minReplicas が 3 に設定された hello-node デプロイメントオブジェクトの HPA を作成するサンプル YAML
HPA を作成したら、次のコマンドを実行して、デプロイメントの新しい状態を表示できます。
oc get deployment hello-node
$ oc get deployment hello-node
デプロイメントには 5 つの Pod があります。
出力例
NAME REVISION DESIRED CURRENT TRIGGERED BY hello-node 1 5 5 config
NAME REVISION DESIRED CURRENT TRIGGERED BY
hello-node 1 5 5 config
2.4.2. HPA はどのように機能するか リンクのコピーリンクがクリップボードにコピーされました!
Horizontal Pod Autoscaler (HPA) は、Pod オートスケーリングの概念を拡張するものです。HPA を使用すると、負荷分散されたノードグループを作成および管理できます。HPA は、所定の CPU またはメモリーのしきい値を超えると、Pod 数を自動的に増減させます。
図2.1 HPA の高レベルのワークフロー
HPA は、Kubernetes 自動スケーリング API グループの API リソースです。オートスケーラは制御ループとして動作し、同期期間のデフォルトは 15 秒です。この期間中、コントローラーマネージャーは、HPA の YAML ファイルに定義されている CPU、メモリー使用率、またはその両方を照会します。コントローラーマネージャーは、HPA の対象となる Pod ごとに、CPU やメモリーなどの Pod 単位のリソースメトリクスをリソースメトリクス API から取得します。
使用率の目標値が設定されている場合、コントローラーは、各 Pod のコンテナーにおける同等のリソース要求のパーセンテージとして使用率の値を計算します。次に、コントローラーは、対象となるすべての Pod の使用率の平均を取り、必要なレプリカの数をスケーリングするために使用される比率を生成します。HPA は、メトリクスサーバーが提供する metrics.k8s.io からメトリクスを取得するよう設定されています。メトリクス評価は動的な性質を持っているため、レプリカのグループに対するスケーリング中にレプリカの数が変動する可能性があります。
HPA を実装するには、対象となるすべての Pod のコンテナーにリソース要求が設定されている必要があります。
2.4.3. 要求と制限について リンクのコピーリンクがクリップボードにコピーされました!
スケジューラーは、Pod 内のコンテナーに対して指定したリソース要求をもとに、どのノードに Pod を配置するかを決定します。kubelet は、コンテナーに指定されたリソース制限を適用して、コンテナーが指定された制限を超えて使用できないようにします。kubelet は、そのコンテナーが使用するために、そのシステムリソースの要求量も予約します。
リソースメトリクスの使用方法
Pod の仕様では、CPU やメモリーなどのリソース要求を指定する必要があります。HPA はこの仕様を使用してリソース使用率を決定し、ターゲットを増減させます。
たとえば、HPA オブジェクトは次のメトリクスソースを使用します。
この例では、HPA はスケーリングターゲットの Pod の平均使用率を 60% に維持しています。使用率とは、Pod の要求リソースに対する現在のリソース使用量の比率です。
2.4.4. ベストプラクティス リンクのコピーリンクがクリップボードにコピーされました!
最適なパフォーマンスを得るには、すべての Pod のリソース要求を設定します。頻繁なレプリカの変動を防ぐには、クールダウン期間を設定します。
- すべての Pod にリソース要求が設定されていること
- HPA は、OpenShift Container Platform クラスター内の Pod の観測された CPU またはメモリー使用量の値に基づいてスケーリングの決定を行います。使用率の値は、各 Pod のリソース要求のパーセンテージとして計算されます。リソース要求値が欠落していると、HPA の最適性能に影響を与える可能性があります。
詳細は、「リソース要求および制限について」を参照してください。
- クールダウン期間の設定
-
Horizontal Pod Autoscaling 中に、時間差なしでイベントが急速にスケーリングされる可能性があります。頻繁なレプリカの変動を防ぐために、クールダウン期間を設定します。
stabilizationWindowSecondsフィールドを設定することで、クールダウン期間を指定できます。安定化ウィンドウは、スケーリングに使用するメトリクスが変動し続ける場合に、レプリカ数の変動を制限するために使用されます。自動スケーリングアルゴリズムは、このウィンドウを使用して以前の必要な状態を推測し、ワークロードスケールの不要な変更を回避します。
たとえば、scaleDown フィールドに安定化ウィンドウが指定されています。
behavior:
scaleDown:
stabilizationWindowSeconds: 300
behavior:
scaleDown:
stabilizationWindowSeconds: 300
前の例では、過去 5 分間のすべての意図された状態が考慮されます。これにより、ローリング最大値が近似され、スケーリングアルゴリズムによって Pod が頻繁に削除され、その直後に同等の Pod が再作成されるという事態が回避されます。
詳細は、「スケーリングポリシー」を参照してください。
2.4.4.1. スケーリングポリシー リンクのコピーリンクがクリップボードにコピーされました!
autoscaling/v2 API を使用して、Horizontal Pod Autoscaler に スケーリングポリシー を追加します。スケーリングポリシーは、OpenShift Container Platform の Horizontal Pod Autoscaler (HPA) が Pod をスケーリングする方法を制御します。スケーリングポリシーを使用すると、特定の期間にスケーリングするように特定の数または特定のパーセンテージを設定して、HPA が Pod をスケールアップまたはスケールダウンするレートを制限できます。安定化ウィンドウ を定義することもできます。これはメトリクスが変動する場合に、先に計算される必要な状態を使用してスケーリングを制御します。同じスケーリング方向に対して複数のポリシーを作成し、変更の量に基づいて使用するポリシーを決定できます。タイミングが調整された反復によりスケーリングを制限することもできます。HPA は反復時に Pod をスケーリングし、その後の反復で必要に応じてスケーリングを実行します。
スケーリングポリシーを適用するサンプル HPA オブジェクト
- 1
scaleDownまたはscaleUpのいずれかのスケーリングポリシーの方向を指定します。この例では、スケールダウンのポリシーを作成します。- 2
- スケーリングポリシーを定義します。
- 3
- ポリシーが反復時に特定の Pod の数または Pod のパーセンテージに基づいてスケーリングするかどうかを決定します。デフォルト値は
podsです。 - 4
- 反復ごとに Pod の数または Pod のパーセンテージのいずれかでスケーリングの量を制限します。Pod 数でスケールダウンする際のデフォルト値はありません。
- 5
- スケーリングの反復の長さを決定します。デフォルト値は
15秒です。 - 6
- パーセンテージでのスケールダウンのデフォルト値は 100% です。
- 7
- 複数のポリシーが定義されている場合に、最初に使用するポリシーを決定します。最大限の変更を許可するポリシーを使用するように
Maxを指定するか、最小限の変更を許可するポリシーを使用するようにMinを指定するか、HPA がポリシーの方向でスケーリングしないようにDisabledを指定します。デフォルト値はMaxです。 - 8
- HPA が必要な状態を確認する期間を決定します。デフォルト値は
0です。 - 9
- この例では、スケールアップのポリシーを作成します。
- 10
- Pod 数によるスケールアップの量を制限します。Pod 数をスケールアップするためのデフォルト値は 4% です。
- 11
- Pod のパーセンテージによるスケールアップの量を制限します。パーセンテージでスケールアップするためのデフォルト値は 100% です。
スケールダウンポリシーの例
この例では、Pod の数が 40 より大きい場合、パーセントベースのポリシーがスケールダウンに使用されます。このポリシーでは、selectPolicy による要求により、より大きな変更が生じるためです。
80 の Pod レプリカがある場合、初回の反復で HPA は Pod を 8 Pod 減らします。これは、1 分間 (periodSeconds: 60) の (type: Percent および value: 10 パラメーターに基づく) 80 Pod の 10% に相当します。次回の反復では、Pod 数は 72 になります。HPA は、残りの Pod の 10% が 7.2 であると計算し、これを 8 に丸め、8 Pod をスケールダウンします。後続の反復ごとに、スケーリングされる Pod 数は残りの Pod 数に基づいて再計算されます。Pod の数が 40 未満になると、Pod ベースの数がパーセントベースの数よりも大きいため、Pod ベースのポリシーが適用されます。HPA は、残りのレプリカ (minReplicas) が 20 になるまで、30 秒 (periodSeconds: 30) で一度に 4 Pod (type: Pods および value: 4) を減らします。
selectPolicy: Disabled パラメーターは HPA による Pod のスケールアップを防ぎます。必要な場合は、レプリカセットまたはデプロイメントセットでレプリカの数を調整して手動でスケールアップできます。
設定されている場合、oc edit コマンドを使用してスケーリングポリシーを表示できます。
oc edit hpa hpa-resource-metrics-memory
$ oc edit hpa hpa-resource-metrics-memory
出力例
2.4.5. Web コンソールを使用した Horizontal Pod Autoscaler の作成 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールから、Deployment または DeploymentConfig オブジェクトで実行する Pod の最小および最大数を指定する Horizontal Pod Autoscaler (HPA) を作成できます。Pod がターゲットに設定する CPU またはメモリー使用量を定義することもできます。
HPA は、Operator がサポートするサービス、Knative サービス、または Helm チャートの一部であるデプロイメントに追加することはできません。
手順
Web コンソールで HPA を作成するには、以下を実行します。
- Topology ビューで、ノードをクリックしてサイドペインを表示します。
Actions ドロップダウンリストから、Add HorizontalPodAutoscaler を選択して Add HorizontalPodAutoscaler フォームを開きます。
図2.2 HorizontalPodAutoscaler の追加
Add HorizontalPodAutoscaler フォームから、名前、最小および最大の Pod 制限、CPU およびメモリーの使用状況を定義し、Save をクリックします。
注記CPU およびメモリー使用量の値のいずれかが見つからない場合は、警告が表示されます。
2.4.5.1. Web コンソールを使用して Horizontal Pod Autoscaler を編集する リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールから、Deployment または DeploymentConfig オブジェクトで実行する Pod の最小および最大数を指定する Horizontal Pod Autoscaler (HPA) を変更できます。Pod がターゲットに設定する CPU またはメモリー使用量を定義することもできます。
手順
- Topology ビューで、ノードをクリックしてサイドペインを表示します。
- Actions ドロップダウンリストから、Edit HorizontalPodAutoscaler を選択し、Horizontal Pod Autoscaler フォームを開きます。
- Edit Horizontal Pod Autoscaler フォームから、最小および最大の Pod 制限および CPU およびメモリー使用量を編集し、Save をクリックします。
Web コンソールで Horizontal Pod Autoscaler を作成または編集する際に、Form view から YAML view に切り替えることができます。
2.4.5.2. Web コンソールを使用して Horizontal Pod Autoscaler を削除する リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールで Horizontal Pod Autoscaler (HPA) を削除できます。
手順
- Topology ビューで、ノードをクリックし、サイドパネルを表示します。
- Actions ドロップダウンリストから、Remove HorizontalPodAutoscaler を選択します。
- 確認ウィンドウで、Remove をクリックして HPA を削除します。
2.4.6. CLI を使用して Horizontal Pod Autoscaler を作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform CLI を使用して Horizontal Pod Autoscaler (HPA) を作成すると、既存の Deployment、DeploymentConfig、ReplicaSet、ReplicationController、または StatefulSet オブジェクトを自動的にスケーリングできます。HPA は、指定した CPU またはメモリーリソースを維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
次のセクションで説明するように、リソース使用量のパーセンテージまたは特定の値を指定することにより、CPU またはメモリーの使用量に基づいて自動スケーリングできます。
HPA は、すべての Pod にわたって指定されたリソースの使用を維持するために、レプリカの数を最小数と最大数の間で増減します。
2.4.6.1. CPU 使用率のパーセンテージに応じて Horizontal Pod Autoscaler を作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform CLI を使用すると、CPU 使用率に基づいて既存のオブジェクトを自動的にスケーリングする Horizontal Pod Autoscaler (HPA) を作成できます。HPA は、指定した CPU 使用率を維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
CPU 使用率のパーセンテージを自動スケーリングする場合、oc autoscale コマンドを使用して、特定の時点で実行する Pod の最小数と最大数、および Pod がターゲットとする平均 CPU 使用率を指定できます。最小値を指定しない場合、Pod には OpenShift Container Platform サーバーからのデフォルト値が付与されます。
他のオブジェクトによって提供される特定の機能または動作が必要でない限り、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用します。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
手順
既存のオブジェクトに対して
HorizontalPodAutoscalerオブジェクトを作成します。oc autoscale <object_type>/<name> \ --min <number> \ --max <number> \ --cpu-percent=<percent>
$ oc autoscale <object_type>/<name> \1 --min <number> \2 --max <number> \3 --cpu-percent=<percent>4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 自動スケーリングするオブジェクトのタイプと名前を指定します。オブジェクトが存在し、
Deployment、DeploymentConfig/dc、ReplicaSet/rs、ReplicationController/rc、またはStatefulSetである必要があります。 - 2
- オプション: スケールダウン時のレプリカの最小数を指定します。
- 3
- スケールアップ時のレプリカの最大数を指定します。
- 4
- すべての Pod における CPU 使用率の目標平均値を、要求された CPU に対するパーセンテージとして指定します。指定しない場合または負の値の場合、デフォルトの自動スケーリングポリシーが使用されます。
たとえば、次のコマンドは
hello-nodeデプロイメントオブジェクトの自動スケーリングを示しています。最初のデプロイメントでは 3 つの Pod が必要です。HPA オブジェクトは、最小値を 5 に増やします。Pod の CPU 使用率が 75% に達すると、Pod は 7 まで増加します。oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75
$ oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75Copy to Clipboard Copied! Toggle word wrap Toggle overflow Horizontal Pod Autoscaler を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Horizontal Pod Autoscaler が作成されていることを確認します。
oc get hpa cpu-autoscale
$ oc get hpa cpu-autoscaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20m
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.6.2. 特定の CPU 値に対する Horizontal Pod Autoscaler の作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform CLI を使用すると、ターゲット CPU と Pod 制限を持つ HorizontalPodAutoscaler オブジェクトを作成することで、特定の CPU 値に基づいて既存のオブジェクトを自動的にスケーリングする Horizontal Pod Autoscaler (HPA) を作成できます。HPA は、指定した CPU 使用率を維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
他のオブジェクトによって提供される特定の機能または動作が必要でない限り、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用します。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
手順
既存のオブジェクトに対して次のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
autoscaling/v2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
Deployment、ReplicaSet、Statefulsetオブジェクトの場合は、apps/v1を使用します。 -
ReplicationControllerの場合は、v1を使用します。 -
DeploymentConfigの場合は、apps.openshift.io/v1を使用します。
-
- 4
- オブジェクトのタイプを指定します。オブジェクトは、
Deployment、DeploymentConfig/dc、ReplicaSet/rs、ReplicationController/rc、またはStatefulSetである必要があります。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用量には、
metricsパラメーターを使用します。 - 9
- CPU 使用率には
cpuを指定します。 - 10
AverageValueに設定します。- 11
- ターゲットに設定された CPU 値で
averageValueに設定します。
Horizontal Pod Autoscaler を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Horizontal Pod Autoscaler が作成されたことを確認します。
oc get hpa cpu-autoscale
$ oc get hpa cpu-autoscaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20m
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.6.3. メモリー使用量のパーセンテージに対する Horizontal Pod Autoscaler オブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform CLI を使用すると、メモリー使用量のパーセンテージに基づいて既存のオブジェクトを自動的にスケーリングする Horizontal Pod Autoscaler (HPA) を作成できます。HPA は、指定したメモリー使用量を維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
他のオブジェクトによって提供される特定の機能または動作が必要でない限り、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用します。
Pod の最小数と最大数、および Pod がターゲットとする平均メモリー使用量を指定できます。最小値を指定しない場合、Pod には OpenShift Container Platform サーバーからのデフォルト値が付与されます。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
手順
既存のオブジェクトに対して、次のような
HorizontalPodAutoscalerオブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
autoscaling/v2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
ReplicationController の場合は、
v1を使用します。 -
DeploymentConfig については、
apps.openshift.io/v1を使用します。 -
Deployment、ReplicaSet、Statefulset オブジェクトの場合は、
apps/v1を使用します。
-
ReplicationController の場合は、
- 4
- オブジェクトのタイプを指定します。オブジェクトは、
Deployment、DeploymentConfig、ReplicaSet、ReplicationController、またはStatefulSetである必要があります。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用量には、
metricsパラメーターを使用します。 - 9
- メモリー使用量には、
memoryを指定します。 - 10
Utilizationに設定します。- 11
averageUtilizationおよびターゲットに設定する平均メモリー使用率をすべての Pod に対して指定します (要求されるメモリーのパーセンテージで表す)。ターゲット Pod にはメモリー要求が設定されている必要があります。- 12
- オプション: スケールアップまたはスケールダウンのレートを制御するスケーリングポリシーを指定します。
次のようなコマンドを使用して、Horizontal Pod Autoscaler を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc create -f hpa.yaml
$ oc create -f hpa.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のようなコマンドを使用して、Horizontal Pod Autoscaler が作成されたことを確認します。
oc get hpa hpa-resource-metrics-memory
$ oc get hpa hpa-resource-metrics-memoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のようなコマンドを使用して、Horizontal Pod Autoscaler の詳細を確認します。
oc describe hpa hpa-resource-metrics-memory
$ oc describe hpa hpa-resource-metrics-memoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.6.4. 特定のメモリー使用のための Horizontal Pod Autoscaler オブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform CLI を使用すると、既存のオブジェクトを自動的にスケーリングする Horizontal Pod Autoscaler (HPA) を作成できます。HPA は、指定した平均メモリー使用量を維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
他のオブジェクトによって提供される特定の機能または動作が必要でない限り、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用します。
Pod の最小数と最大数、および Pod がターゲットとする平均メモリー使用量を指定できます。最小値を指定しない場合、Pod には OpenShift Container Platform サーバーからのデフォルト値が付与されます。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
手順
既存のオブジェクトに対して、次のような
HorizontalPodAutoscalerオブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
autoscaling/v2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
Deployment、ReplicaSet、またはStatefulsetオブジェクトの場合は、apps/v1を使用します。 -
ReplicationControllerの場合は、v1を使用します。 -
DeploymentConfigの場合は、apps.openshift.io/v1を使用します。
-
- 4
- オブジェクトのタイプを指定します。オブジェクトは、
Deployment、DeploymentConfig、ReplicaSet、ReplicationController、またはStatefulSetである必要があります。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用量には、
metricsパラメーターを使用します。 - 9
- メモリー使用量には、
memoryを指定します。 - 10
- タイプを
AverageValueに設定します。 - 11
averageValueおよび特定のメモリー値を指定します。- 12
- オプション: スケールアップまたはスケールダウンのレートを制御するスケーリングポリシーを指定します。
次のようなコマンドを使用して、Horizontal Pod Autoscaler を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc create -f hpa.yaml
$ oc create -f hpa.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のようなコマンドを使用して、Horizontal Pod Autoscaler が作成されたことを確認します。
oc get hpa hpa-resource-metrics-memory
$ oc get hpa hpa-resource-metrics-memoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のようなコマンドを使用して、Horizontal Pod Autoscaler の詳細を確認します。
oc describe hpa hpa-resource-metrics-memory
$ oc describe hpa hpa-resource-metrics-memoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.7. CLI を使用した Horizontal Pod Autoscaler の状態条件について リンクのコピーリンクがクリップボードにコピーされました!
状態条件セットを使用して、Horizontal Pod Autoscaler (HPA) がスケーリングできるかどうかや、現時点でこれがいずれかの方法で制限されているかどうかを判別できます。
HPA の状態条件は、自動スケーリング API の v2 バージョンで利用できます。
HPA は、以下の状態条件で応答します。
AbleToScale条件では、HPA がメトリクスを取得して更新できるか、またバックオフ関連の条件によりスケーリングが回避されるかどうかを指定します。-
True条件はスケーリングが許可されることを示します。 -
False条件は指定される理由によりスケーリングが許可されないことを示します。
-
ScalingActive条件は、HPA が有効にされており (ターゲットのレプリカ数がゼロでない)、必要なメトリクスを計算できるかどうかを示します。-
True条件はメトリクスが適切に機能していることを示します。 -
False条件は通常フェッチするメトリクスに関する問題を示します。
-
ScalingLimited条件は、必要とするスケールが Horizontal Pod Autoscaler の最大値または最小値によって制限されていたことを示します。-
True条件は、スケーリングするためにレプリカの最小または最大数を引き上げるか、引き下げる必要があることを示します。 False条件は、要求されたスケーリングが許可されることを示します。oc describe hpa cm-test
$ oc describe hpa cm-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Horizontal Pod Autoscaler の状況メッセージです。
-
以下は、スケーリングできない Pod の例です。
出力例
以下は、スケーリングに必要なメトリクスを取得できなかった Pod の例です。
出力例
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale
ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API
以下は、要求される自動スケーリングが要求される最小数よりも小さい場合の Pod の例です。
出力例
2.4.7.1. CLI を使用した Horizontal Pod Autoscaler の状態条件の表示 リンクのコピーリンクがクリップボードにコピーされました!
Pod に設定された状態条件は、Horizontal Pod Autoscaler (HPA) で表示することができます。
Horizontal Pod Autoscaler の状態条件は、自動スケーリング API の v2 バージョンで利用できます。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
手順
Pod の状態条件を表示するには、Pod の名前と共に以下のコマンドを使用します。
oc describe hpa <pod-name>
$ oc describe hpa <pod-name>
以下に例を示します。
oc describe hpa cm-test
$ oc describe hpa cm-test
条件は、出力の Conditions フィールドに表示されます。
出力例
2.5. Vertical Pod Autoscaler を使用した Pod リソースレベルの自動調整 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Vertical Pod Autoscaler Operator (VPA) は、Pod 内のコンテナーにおける CPU およびメモリーリソースの履歴と現在の情報を自動的に確認します。VPA は、学習した使用状況の値に基づいて、リソースの制限と要求を更新できます。個別のカスタムリソース (CR) を使用することで、VPA は組み込みのワークロードオブジェクトに関連付けられているプロジェクト内のすべての Pod を更新します。これには、次のオブジェクトタイプのリストが含まれます。
-
Deployment -
DeploymentConfig -
StatefulSet -
Job -
DaemonSet -
ReplicaSet -
ReplicationController
VPA は、Pod を管理する特定のカスタムリソースオブジェクトを更新することもできます。詳細は、Vertical Pod Autoscaler のカスタムリソースの例 を参照してください。
VPA は、Pod に最適な CPU およびメモリーの使用状況を理解するのに役立ち、Pod のライフサイクルを通じて Pod のリソースを自動的に維持します。
2.5.1. Vertical Pod Autoscaler Operator について リンクのコピーリンクがクリップボードにコピーされました!
Vertical Pod Autoscaler Operator (VPA) は、API リソースおよびカスタムリソース (CR) として実装されます。CR は、プロジェクト内のデーモンセット、レプリケーションコントローラーなどの特定のワークロードオブジェクトに関連付けられた Pod に対して VPA が実行するアクションを決定します。
VPA は 3 つのコンポーネントで構成され、各コンポーネントは VPA namespace に独自の Pod を持ちます。
- レコメンダー
- VPA レコメンダーは、現在のリソース消費量と過去のリソース消費量を監視します。このデータに基づいて、VPA レコメンダーは、関連付けられたワークロードオブジェクト内の Pod に最適な CPU およびメモリーリソースを決定します。
- アップデーター
- VPA アップデーターは、関連付けられたワークロードオブジェクト内の Pod に正しいリソースがあるか確認します。リソースが正しい場合、アップデーターは何も行いません。リソースが正しくない場合、アップデーターは Pod を強制終了し、Pod のコントローラーが更新されたリクエストでリソースを再作成できるようにします。
- アドミッションコントローラー
- VPA アドミッションコントローラーは、関連付けられたワークロードオブジェクト内の各新しい Pod に正しいリソース要求を設定します。これは、Pod が新規であるか、または VPA アップデーターアクションによりコントローラーが Pod を再作成したかに関係なく適用されます。
デフォルトのレコメンダーを使用することも、独自の代替レコメンダーを使用して独自のアルゴリズムに基づいて自動スケーリングを実行することもできます。
デフォルトのレコメンダーは、これらの Pod 内のコンテナーの CPU とメモリーの過去および現在の使用状況を自動的に計算します。デフォルトのレコメンダーは、これらの Pod が常に効率的に動作するように、このデータを使用して最適なリソース制限および要求を決定します。たとえば、デフォルトレコメンダーは使用している量よりも多くのリソースを要求する Pod のリソースを減らし、十分なリソースを要求していない Pod のリソースを増やします。
VPA は、一度に 1 つずつ、これらの推奨値で調整されていない Pod を自動的に削除するため、アプリケーションはダウンタイムなしに継続して要求を提供できます。その後、ワークロードオブジェクトが、元のリソース制限および要求を使用して Pod を再デプロイします。VPA は変更用のアドミッション Webhook を使用して、Pod がノードに許可される前に最適化されたリソース制限および要求で Pod を更新します。VPA が Pod を削除する必要がない場合は、VPA リソース制限および要求を表示し、必要に応じて Pod を手動で更新できます。
デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除できるようにするためにレプリカを 2 つ以上指定する必要があります。この最小値よりも少ないレプリカを指定するワークロードオブジェクトは削除されません。これらの Pod を手動で削除すると、ワークロードオブジェクトが Pod を再デプロイするときに、VPA は推奨内容に基づいて新規 Pod を更新します。この最小値は、VPA の最小値の変更 に記載されているとおり、VerticalPodAutoscalerController オブジェクトを変更して変更できます。
たとえば、CPU の 50% を使用する Pod が 10% しか要求しない場合、VPA は Pod が要求よりも多くの CPU を消費すると判別してその Pod を削除します。レプリカセットなどのワークロードオブジェクトは Pod を再起動し、VPA は推奨リソースで新しい Pod を更新します。
開発者は VPA を使用して、各 Pod に適切なリソースを持つノードに Pod をスケジューリングすることにより、需要が高い期間に Pod がアクティブであることを確認できます。
管理者は VPA を使用して、クラスターリソースをより適切に活用できます。たとえば、必要以上の CPU リソースを Pod が予約できないようにします。VPA は、ワークロードが実際に使用しているリソースをモニターし、他のワークロードで容量を使用できるようにリソース要件を調整します。VPA は、初期のコンテナー設定で指定された制限と要求の比率も維持します。
VPA の実行を停止するか、クラスターの特定の VPA CR を削除する場合、VPA によってすでに変更された Pod のリソース要求は変更されません。ただし、新しい Pod は、VPA による以前の推奨内容ではなく、ワークロードオブジェクトで定義されたリソースを取得します。
2.5.2. Vertical Pod Autoscaler Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して Vertical Pod Autoscaler Operator (VPA) をインストールすることができます。
手順
- OpenShift Container Platform Web コンソールで、Ecosystem → Software Catalog をクリックします。
- 利用可能な Operator のリストから VerticalPodAutoscaler を選択し、Install をクリックします。
-
Install Operator ページで、Operator recommended namespace オプションが選択されていることを確認します。これにより、Operator が必須の
openshift-vertical-pod-autoscalernamespace にインストールされます。この namespace は存在しない場合は、自動的に作成されます。 - Install をクリックします。
検証
VPA コンポーネントをリスト表示してインストールを確認します。
- Workloads → Pods に移動します。
-
ドロップダウンメニューから
openshift-vertical-pod-autoscalerプロジェクトを選択し、4 つの Pod が実行されていることを確認します。 - Workloads → Deployments に移動し、4 つのデプロイメントが実行されていることを確認します。
オプション: 以下のコマンドを使用して、OpenShift Container Platform CLI でインストールを確認します。
oc get all -n openshift-vertical-pod-autoscaler
$ oc get all -n openshift-vertical-pod-autoscalerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、4 つの Pod と 4 つのデプロイメントが表示されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.3. Vertical Pod Autoscaler Operator コンポーネントの移動 リンクのコピーリンクがクリップボードにコピーされました!
Vertical Pod Autoscaler Operator (VPA) と各コンポーネントには、コントロールプレーンノードの VPA namespace に独自の Pod があります。VPA Operator およびコンポーネント Pod は、ノードセレクターを VPA サブスクリプションおよび VerticalPodAutoscalerController CR に追加してインフラストラクチャーまたはワーカーノードに移動できます。
インフラストラクチャーノードを作成して使用し、インフラストラクチャーコンポーネントのみをホストできます。たとえば、デフォルトルーター、統合コンテナーイメージレジストリー、クラスターメトリクスとモニタリングのコンポーネントなどです。これらのインフラストラクチャーノードは、環境の実行に必要なサブスクリプションの合計数にカウントされません。詳細は、インフラストラクチャーマシンセットの作成 を参照してください。
組織の状況に応じて、コンポーネントを同じノードまたは別のノードに移動できます。
以下の例は、VPA Pod のコントロールプレーンノードへのデフォルトのデプロイメントを示しています。
出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z 1/1 Running 0 7m59s 10.128.2.24 c416-tfsbj-master-1 <none> <none> vpa-admission-plugin-default-6cb78d6f8b-rpcrj 1/1 Running 0 5m37s 10.129.2.22 c416-tfsbj-master-1 <none> <none> vpa-recommender-default-66846bd94c-dsmpp 1/1 Running 0 5m37s 10.129.2.20 c416-tfsbj-master-0 <none> <none> vpa-updater-default-db8b58df-2nkvf 1/1 Running 0 5m37s 10.129.2.21 c416-tfsbj-master-1 <none> <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z 1/1 Running 0 7m59s 10.128.2.24 c416-tfsbj-master-1 <none> <none>
vpa-admission-plugin-default-6cb78d6f8b-rpcrj 1/1 Running 0 5m37s 10.129.2.22 c416-tfsbj-master-1 <none> <none>
vpa-recommender-default-66846bd94c-dsmpp 1/1 Running 0 5m37s 10.129.2.20 c416-tfsbj-master-0 <none> <none>
vpa-updater-default-db8b58df-2nkvf 1/1 Running 0 5m37s 10.129.2.21 c416-tfsbj-master-1 <none> <none>
手順
VPA Operator の
Subscriptionカスタムリソース (CR) にノードセレクターを追加して、VPA Operator Pod を移動します。CR を編集します。
oc edit Subscription vertical-pod-autoscaler -n openshift-vertical-pod-autoscaler
$ oc edit Subscription vertical-pod-autoscaler -n openshift-vertical-pod-autoscalerCopy to Clipboard Copied! Toggle word wrap Toggle overflow VPA Operator Pod をインストールするノードのノードロールラベルと一致するノードセレクターを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記infra ノードが taint を使用する場合は、toleration を
SubscriptionCR に追加する必要があります。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- VPA Operator Pod を移動するノード上の taint の toleration を指定します。
VerticalPodAutoscalerカスタムリソース (CR) にノードセレクターを追加して、各 VPA コンポーネントを移動します。CR を編集します。
oc edit VerticalPodAutoscalerController default -n openshift-vertical-pod-autoscaler
$ oc edit VerticalPodAutoscalerController default -n openshift-vertical-pod-autoscalerCopy to Clipboard Copied! Toggle word wrap Toggle overflow VPA コンポーネントをインストールするノード上のノードロールラベルと一致するようにノードセレクターを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ターゲットノードが taint を使用する場合は、
VerticalPodAutoscalerControllerCR に toleration を追加する必要があります。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを使用して、Pod が移動したことを確認できます。
oc get pods -n openshift-vertical-pod-autoscaler -o wide
$ oc get pods -n openshift-vertical-pod-autoscaler -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod はコントロールプレーンノードにデプロイされなくなりました。次の出力例では、ノードはコントロールプレーンノードではなく、インフラノードになっています。
出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z 1/1 Running 0 7m59s 10.128.2.24 c416-tfsbj-infra-eastus3-2bndt <none> <none> vpa-admission-plugin-default-6cb78d6f8b-rpcrj 1/1 Running 0 5m37s 10.129.2.22 c416-tfsbj-infra-eastus1-lrgj8 <none> <none> vpa-recommender-default-66846bd94c-dsmpp 1/1 Running 0 5m37s 10.129.2.20 c416-tfsbj-infra-eastus1-lrgj8 <none> <none> vpa-updater-default-db8b58df-2nkvf 1/1 Running 0 5m37s 10.129.2.21 c416-tfsbj-infra-eastus1-lrgj8 <none> <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z 1/1 Running 0 7m59s 10.128.2.24 c416-tfsbj-infra-eastus3-2bndt <none> <none> vpa-admission-plugin-default-6cb78d6f8b-rpcrj 1/1 Running 0 5m37s 10.129.2.22 c416-tfsbj-infra-eastus1-lrgj8 <none> <none> vpa-recommender-default-66846bd94c-dsmpp 1/1 Running 0 5m37s 10.129.2.20 c416-tfsbj-infra-eastus1-lrgj8 <none> <none> vpa-updater-default-db8b58df-2nkvf 1/1 Running 0 5m37s 10.129.2.21 c416-tfsbj-infra-eastus1-lrgj8 <none> <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.4. Vertical Pod Autoscaler Operator の使用について リンクのコピーリンクがクリップボードにコピーされました!
Vertical Pod Autoscaler Operator (VPA) を使用するには、クラスター内にワークロードオブジェクトの VPA カスタムリソース (CR) を作成します。VPA は、そのワークロードオブジェクトに関連付けられた Pod に最適な CPU およびメモリーリソースを確認し、適用します。VPA は、デプロイメント、ステートフルセット、ジョブ、デーモンセット、レプリカセット、またはレプリケーションコントローラーのワークロードオブジェクトと共に使用できます。VPA CR は、チェックする Pod と同じプロジェクト内にある必要があります。
VPA CR を使用してワークロードオブジェクトを関連付け、VPA が動作するモードを指定します。
-
AutoおよびRecreateモードは、Pod の有効期間中は VPA CPU およびメモリーの推奨事項を自動的に適用します。VPA は、推奨値で調整されていないプロジェクトの Pod を削除します。ワークロードオブジェクトによって再デプロイされる場合、VPA はその推奨値で新規 Pod を更新します。 -
Initialモードは、Pod の作成時にのみ VPA の推奨値を自動的に適用します。 -
Offモードでは、推奨されるリソース制限と要求のみが提供されます。その後、推奨値を手動で適用できます。Offモードは Pod を更新しません。
CR を使用して、VPA 評価および更新から特定のコンテナーをオプトアウトすることもできます。
たとえば、Pod には以下の制限および要求があります。
Auto に設定された VPA を作成すると、VPA はリソースの使用状況を確認して Pod を削除します。再デプロイ時に、Pod は新規のリソース制限および要求を使用します。
次のコマンドを使用して、VPA の推奨値を表示できます。
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yaml
数分後に、出力には、以下のような CPU およびメモリー要求の推奨値が表示されます。
出力例
出力には、target (推奨リソース)、lowerBound (最小推奨リソース)、upperBound (最大推奨リソース)、および uncappedTarget (最新の推奨リソース) が表示されます。
VPA は lowerBound および upperBound の値を使用して、Pod の更新が必要か判別します。Pod のリソース要求が lowerBound 値より少ないか upperBound 値より大きい場合、VPA は Pod を終了し、target 値で Pod を再作成します。
2.5.4.1. VPA の最小値の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除し、更新できるようにするためにレプリカを 2 つ以上指定する必要があります。そのため、2 つ未満を指定するワークロードオブジェクトの場合 VPA は自動的に機能しません。VPA 外部のプロセスによって Pod が再起動された場合、VPA はこれらのワークロードオブジェクトから新しい Pod を更新します。このクラスター全体の最小値の変更は、VerticalPodAutoscalerController カスタムリソース (CR) の minReplicas パラメーターを変更して実行できます。
たとえば、minReplicas を 3 に設定する場合、VPA は 2 レプリカ以下のレプリカを指定するワークロードオブジェクトの Pod を削除せず、更新しません。
minReplicas を 1 に設定する場合、VPA は 1 つのレプリカのみを指定するワークロードオブジェクトの Pod のみを削除できます。VPA が Pod を削除してリソースを調整するたびに、ワークロードがダウンタイムを許容できる場合にのみ、1 つのレプリカオブジェクトでこの設定を使用します。1 つのレプリカオブジェクトで不要なダウンタイムを回避するには、podUpdatePolicy を Initial に設定して VPA CR を設定します。これにより、VPA 外部のプロセスが再起動した場合にのみ Pod が自動的に更新されます。または、Off に設定すると、アプリケーションの適切なタイミングで Pod を手動で更新できます。
VerticalPodAutoscalerController オブジェクトの例
- 1
- 動作させる VPA のワークロードオブジェクトのレプリカの最小数を指定します。最低数に満たない数のレプリカを持つオブジェクトは、VPA によって自動的に削除されません。
2.5.4.2. VPA の推奨事項の自動適用 リンクのコピーリンクがクリップボードにコピーされました!
VPA を使用して Pod を自動的に更新するには、updateMode が Auto または Recreate に設定された特定のワークロードオブジェクトの VPA CR を作成します。
Pod がワークロードオブジェクト用に作成されると、VPA はコンテナーを継続的にモニターして、CPU およびメモリーのニーズを分析します。VPA は、CPU およびメモリーに関する VPA の推奨値を満たさない Pod を削除します。再デプロイ時に、Pod は VPA の推奨値に基づいて新規のリソース制限および要求を使用し、アプリケーションに設定された Pod の Disruption Budget (停止状態の予算) を反映します。この推奨事項は、参照用に VPA CR の status フィールドに追加されます。
デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除できるようにするためにレプリカを 2 つ以上指定する必要があります。この最小値よりも少ないレプリカを指定するワークロードオブジェクトは削除されません。これらの Pod を手動で削除すると、ワークロードオブジェクトが Pod を再デプロイします。VPA は推奨内容に基づいて新規 Pod を更新します。この最小値は、VPA の最小値の変更 に記載されているとおり、VerticalPodAutoscalerController オブジェクトを変更して変更できます。
Auto モードの VPA CR の例
- 1
- この VPA CR が管理するワークロードオブジェクトのタイプ。
- 2
- この VPA CR が管理するワークロードオブジェクトの名前。
- 3
- モードを
AutoまたはRecreateに設定します。-
Auto:VPA は、Pod の作成時にリソース要求を割り当て、要求されるリソースが新規の推奨事項と大きく異なる場合に、それらを終了して既存の Pod を更新します。 -
Recreate:VPA は、Pod の作成時にリソース要求を割り当て、要求されるリソースが新規の推奨事項と大きく異なる場合に、それらを終了して既存の Pod を更新します。このモードが使用されることはほとんどありません。リソース要求の変更に応じて Pod を必ず再起動させたい場合に限定して使用します。
-
VPA によってリソースの推奨事項を決定し、推奨リソースを新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。
CPU やメモリーなどのワークロードのリソース使用量が安定している場合、VPA はリソースの推奨事項を数分で決定できます。ワークロードのリソース使用量が安定していない場合、VPA は正確な推奨を行うために、さまざまなリソース使用量の間隔でメトリクスを収集する必要があります。
2.5.4.3. Pod 作成時における VPA 推奨の自動適用 リンクのコピーリンクがクリップボードにコピーされました!
VPA を使用して、Pod が最初にデプロイされる場合にのみ推奨リソースを適用するには、updateMode が Initial に設定された特定のワークロードオブジェクトの VPA CR を作成します。
次に、VPA の推奨値を使用する必要のあるワークロードオブジェクトに関連付けられた Pod を手動で削除します。Initial モードで、VPA は新しいリソースの推奨内容を確認する際に Pod を削除したり、更新したりしません。
Initial モードの VPA CR の例
VPA によって推奨リソースを決定し、推奨事項を新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。
VPA から最も正確な推奨事項を取得するには、Pod が実行され、VPA が安定するまで少なくとも 8 日間待機してください。
2.5.4.4. VPA の推奨事項の手動適用 リンクのコピーリンクがクリップボードにコピーされました!
CPU およびメモリーの推奨値を判別するためだけに VPA を使用するには、updateMode を Off に設定した特定のワークロードオブジェクトの VPA CR を作成します。
Pod がワークロードオブジェクト用に作成されると、VPA はコンテナーの CPU およびメモリーのニーズを分析し、VPA CR の status フィールドにそれらの推奨事項を記録します。VPA は、新しい推奨リソースを判別する際に Pod を更新しません。
Off モードの VPA CR の例
以下のコマンドを使用して、推奨事項を表示できます。
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yaml
この推奨事項により、ワークロードオブジェクトを編集して CPU およびメモリー要求を追加し、推奨リソースを使用して Pod を削除および再デプロイできます。
VPA によって推奨リソースを決定し、推奨事項を新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。
VPA から最も正確な推奨事項を取得するには、Pod が実行され、VPA が安定するまで少なくとも 8 日間待機してください。
2.5.4.5. VPA の推奨事項をすべてのコンテナーに適用しないようにする リンクのコピーリンクがクリップボードにコピーされました!
ワークロードオブジェクトに複数のコンテナーがあり、VPA がすべてのコンテナーを評価および実行対象としないようにするには、特定のワークロードオブジェクトの VPA CR を作成し、resourcePolicy を追加して特定のコンテナーをオプトアウトします。
VPA が推奨リソースで Pod を更新すると、resourcePolicy が設定されたコンテナーは更新されず、VPA は Pod 内のそれらのコンテナーの推奨事項を提示しません。
たとえば、Pod には同じリソース要求および制限の 2 つのコンテナーがあります。
backend コンテナーがオプトアウトに設定された VPA CR を起動した後、VPA は Pod を終了し、frontend コンテナーのみに適用される推奨リソースで Pod を再作成します。
2.5.4.6. VPA Operator のパフォーマンスチューニング リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Vertical Pod Autoscaler Operator (VPA) のパフォーマンスを調整して、VPA が Kubernetes API サーバーにリクエストを行うレートを制限したり、VPA レコメンダー、アップデーター、アドミッションコントローラーコンポーネントの Pod の CPU とメモリーリソースを指定したりできます。
VPA カスタムリソース (CR) が管理するワークロードのみを監視するように VPA を設定することもできます。デフォルトでは、VPA はクラスター内のすべてのワークロードを監視します。その結果、VPA はすべてのワークロードの 8 日間の履歴データを蓄積して保存します。ワークロードに対して新しい VPA CR が作成された場合、VPA でこれを使用できます。ただし、これにより VPA は大量の CPU とメモリーを使用することになります。これにより、特に大規模なクラスターでは VPA が失敗する可能性があります。VPA CR を使用してワークロードのみを監視するように VPA を設定すると、CPU とメモリーのリソースを節約できます。トレードオフの 1 つは、実行中のワークロードがあり、そのワークロードを管理するために VPA CR を作成する場合です。VPA にはそのワークロードの履歴データがありません。そのため、最初の推奨値は、ワークロードがしばらく実行された後の推奨値ほど有用ではありません。
これらのチューニングを使用して、VPA が最高の効率で動作するために十分なリソースを確保し、スロットルや Pod の承認の遅延を防止します。
VerticalPodAutoscalerController カスタムリソース (CR) を編集することで、VPA コンポーネントに対して以下のチューニングを行えます。
-
スロットル調整と Pod アドミッションの遅延を防ぐには、
kube-api-qpsパラメーターとkube-api-burstパラメーターを使用して、Kubernetes API サーバーの VPA リクエストの 1 秒あたりのクエリー数 (QPS) とバーストレートを設定します。 -
十分な CPU とメモリーを確保するには、標準の
cpuおよびmemoryリソース要求を使用して、VPA コンポーネント Pod の CPU 要求とメモリー要求を設定します。 -
VPA CR が管理するワークロードのみを監視するように VPA を設定するには、レコメンデーションコンポーネントの
memory-saverパラメーターをtrueに設定します。
各 VPA コンポーネントに設定できるリソースおよびレート制限のガイドラインについて、次の表では、クラスターや他の要素のサイズに応じて、推奨のベースライン値を紹介しています。
これらの推奨値は、Red Hat の内部テストに基づいて算出されたものであり、必ずしも実際のクラスターを代表するものではありません。実稼働クラスターを設定する前に、実稼働以外のクラスターでこれらの値をテストしてください。
| コンポーネント | 1 - 500 個のコンテナー | 500 - 1000 個のコンテナー | 1000 - 2000 個のコンテナー | 2000 - 4000 個のコンテナー | 4000 個以上のコンテナー | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| CPU | メモリー | CPU | メモリー | CPU | メモリー | CPU | メモリー | CPU | メモリー | |
| アドミッション | 25m | 50 Mi | 25m | 75Mi | 40m | 150Mi | 75m | 260 Mi | (0.03c)/2 + 10 [1] | (0.1c)/2 + 50 [1] |
| レコメンダー | 25m | 100Mi | 50m | 160Mi | 75m | 275Mi | 120M | 420Mi | (0.05c)/2 + 50 [1] | (0.15c)/2 + 120 [1] |
| アップデーター | 25m | 100Mi | 50m | 220Mi | 80 m | 350Mi | 150 m | 500Mi | (0.07c)/2 + 20 [1] | (0.15c)/2 + 200 [1] |
-
cは、クラスター内のコンテナーの数です。
コンテナーのメモリー制限は、表中の推奨される要求量の少なくとも 2 倍に設定することを推奨します。ただし、CPU は圧縮可能なリソースであるため、コンテナーの CPU 制限を設定すると VPA をスロットリングできます。そのため、コンテナーに CPU 制限を設定しないことが推奨されます。
| コンポーネント | 1-150 VPAs | 151-500 VPAs | 501-2,000 VPAs | 2,001-4,000 VPAs | ||||
|---|---|---|---|---|---|---|---|---|
| QPS 制限 [1] | Burst [2] | QPS 制限 | Burst | QPS 制限 | Burst | QPS 制限 | Burst | |
| レコメンダー | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
| アップデーター | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
-
QPS は、Kubernetes API サーバーにリクエストを行う際の 1 秒あたりのクエリー数 (QPS) の制限を指定します。アップデーターおよびレコメンダー Pod のデフォルトは
5.0です。 -
Burst は、Kubernetes API サーバーにリクエストを行う際のバースト制限を指定します。アップデーターおよびレコメンダー Pod のデフォルトは
10.0です。
クラスターに 4,000 を超える VPAs がある場合は、テーブルの値でパフォーマンスチューニングを開始し、必要なレコメンダー、更新レイテンシーおよびパフォーマンスを達成するまで値を徐々に増やすことを推奨します。QPS および Burst の増加により、VPA コンポーネントから API サーバーに送信される API 要求が多すぎると、クラスターの健全性に影響し、Kubernetes API サーバーの速度が遅くなる可能性があるため、これらの値は徐々に調整します。
以下の VPA コントローラー CR の例は、1,000 から 2,000 コンテナーを持つクラスター用であり、Pod の作成サージは 26 から 50 になります。CR は以下の値を設定します。
- 3 つの VPA コンポーネントすべてに対するコンテナーメモリーおよび CPU 要求
- 3 つの VPA コンポーネントすべてに対するコンテナーのメモリー制限
- 3 つの VPA コンポーネントすべてに対する QPS およびバーストレート
-
VPA レコメンダーコンポーネントの
memory-saverパラメーターをtrueに設定
VerticalPodAutoscalerController CR の例
- 1
- VPA アドミッションコントローラーのチューニングパラメーターを指定します。
- 2
- VPA アドミッションコントローラーの API QPS とバーストレートを指定します。
-
kube-api-qps: Kubernetes API サーバーにリクエストを行うときの 1 秒あたりのクエリー数 (QPS) 制限を指定します。デフォルトは5.0です。 -
kube-api-burst: Kubernetes API サーバーにリクエストを行うときのバースト制限を指定します。デフォルトは10.0です。
-
- 3
- VPA アドミッションコントローラー Pod のリソース要求および制限を指定します。
- 4
- VPA レコメンダーのチューニングパラメーターを指定します。
- 5
- VPA Operator が VPA CR を持つワークロードのみを監視するように指定します。デフォルトは
falseです。 - 6
- VPA アップデーターのチューニングパラメーターを指定します。
設定が各 VPA コンポーネント Pod に適用されたことを確認できます。
アップデーター Pod の例
アドミッションコントローラー Pod の例
レコメンダー Pod の例
2.5.4.7. OOM イベント後のカスタムのメモリー増加量 リンクのコピーリンクがクリップボードにコピーされました!
クラスターで OOM (メモリー不足) イベントが発生した場合、Vertical Pod Autoscaler Operator (VPA) はメモリーの推奨値を増やします。この推奨値は、OOM イベントの発生時に観測されたメモリー消費量と、将来的なメモリー不足によるクラッシュを防ぐために指定された乗数に基づいています。
推奨値は、OOM イベント発生時に Pod によって使用されていたメモリー使用量に指定バイト数または指定パーセンテージを掛けて算出される値のうち、どちらか大きい方です。計算は次の式で表されます。
recommendation = max(memory-usage-in-oom-event + oom-min-bump-up-bytes, memory-usage-in-oom-event * oom-bump-up-ratio)
recommendation = max(memory-usage-in-oom-event + oom-min-bump-up-bytes, memory-usage-in-oom-event * oom-bump-up-ratio)
メモリーの増加量は、レコメンダー Pod で次の値を指定して設定できます。
-
oom-min-bump-up-bytes。この値 (バイト単位) は、OOM イベントが発生した後のメモリーの具体的な増加量です。デフォルトは100MiBです。 -
oom-bump-up-ratio。この値は、OOM イベント発生時のメモリーの増加率です。デフォルト値は1.2です。
たとえば、OOM イベント中の Pod メモリー使用量が 100 MB で、oom-min-bump-up-bytes が 150 MB に設定され、oom-min-bump-ratio が 1.2 に設定されている場合。OOM イベントの後、VPA では、その Pod のメモリー要求を 120 MB (100 MB * 1.2) よりも高い 150 MB に増やすことを推奨します。
レコメンダーの Deployment オブジェクトの例
関連情報
2.5.4.8. 代替のレコメンダーを使用する リンクのコピーリンクがクリップボードにコピーされました!
独自のレコメンダーを使用して、独自のアルゴリズムに基づいて自動スケーリングできます。代替レコメンダーを指定しない場合、OpenShift Container Platform はデフォルトのレコメンダーを使用します。これは、過去の使用状況に基づいて CPU およびメモリー要求を提案します。すべてのタイプのワークロードに適用されるユニバーサルレコメンデーションポリシーはないため、特定のワークロードに対して異なるレコメンダーを作成してデプロイメントすることを推奨します。
たとえば、コンテナーが特定のリソース動作を示している場合、デフォルトのレコメンダーは将来のリソース使用量を正確に予測できない可能性があります。例としては、監視アプリケーションで使用される使用量の急増とアイドル状態が交互に繰り返される周期的なパターンや、ディープラーニングアプリケーションで使用される繰り返しパターンなどがあります。これらの使用動作でデフォルトのレコメンダーを使用すると、アプリケーションのプロビジョニングが大幅に過剰になり、Out of Memory (OOM) が強制終了される可能性があります。
レコメンダーを作成する方法については、このドキュメントの範囲外です。
手順
Pod に代替のレコメンダーを使用するには:
代替レコメンダーのサービスアカウントを作成し、そのサービスアカウントを必要なクラスターロールにバインドします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 代替レコメンダーをクラスターに追加するには、次のような
Deploymentオブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ namespace 内の代替レコメンダー用に新しい Pod が作成されます。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE frontend-845d5478d-558zf 1/1 Running 0 4m25s frontend-845d5478d-7z9gx 1/1 Running 0 4m25s frontend-845d5478d-b7l4j 1/1 Running 0 4m25s vpa-alt-recommender-55878867f9-6tp5v 1/1 Running 0 9s
NAME READY STATUS RESTARTS AGE frontend-845d5478d-558zf 1/1 Running 0 4m25s frontend-845d5478d-7z9gx 1/1 Running 0 4m25s frontend-845d5478d-b7l4j 1/1 Running 0 4m25s vpa-alt-recommender-55878867f9-6tp5v 1/1 Running 0 9sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 代替レコメンダー
Deploymentオブジェクトの名前を含む Vertical Pod Autoscaler Operator (VPA) カスタムリソース (CR) を設定します。代替レコメンダーを含めるための VPA CR の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.5. Vertical Pod Autoscaler Operator の使用 リンクのコピーリンクがクリップボードにコピーされました!
VPA カスタムリソース (CR) を作成して、Vertical Pod Autoscaler Operator (VPA) を使用できます。CR は分析する Pod を示し、それらの Pod に対して VPA が実行するアクションを決定します。
VPA を使用して、デプロイメントまたはステートフルセットなどの組み込みリソースや Pod を管理するカスタムリソースをスケーリングできます。詳細は、「Vertical Pod Autoscaler Operator の使用について」を参照してください。
前提条件
- 自動スケーリングするワークロードオブジェクトが存在することを確認します。
- 代替レコメンダーを使用する場合は、そのレコメンダーを含むデプロイメントが存在することを確認してください。
手順
特定のワークロードオブジェクトの VPA CR を作成するには、以下を実行します。
スケーリングするワークロードオブジェクトのプロジェクトの場所に切り替えます。
VPA CR YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この VPA が管理するワークロードオブジェクトのタイプ (
Deployment、StatefulSet、Job、DaemonSet、ReplicaSet、またはReplicationController) を指定します。 - 2
- この VPA が管理する既存のワークロードオブジェクトの名前を指定します。
- 3
- VPA モードを指定します。
-
Autoは、コントローラーに関連付けられた Pod に推奨リソースを自動的に適用します。VPA は既存の Pod を終了し、推奨されるリソース制限および要求で新規 Pod を作成します。 -
Recreateは、ワークロードオブジェクトに関連付けられた Pod に推奨リソースを自動的に適用します。VPA は既存の Pod を終了し、推奨されるリソース制限および要求で新規 Pod を作成します。Recreateモードが使用されることはほとんどありません。リソース要求の変更に応じて Pod を必ず再起動させたい場合に限定して使用します。 -
Initialは、ワークロードオブジェクトに関連付けられた新しく作成された Pod に推奨リソースを自動的に適用します。VPA は、新しい推奨リソースを確認する際に Pod を更新しません。 -
Offは、ワークロードオブジェクトに関連付けられた Pod の推奨リソースのみを生成します。VPA は、新しい推奨リソースを確認する際に Pod を更新しません。また、新規 Pod に推奨事項を適用しません。
-
- 4
- オプション: オプトアウトするコンテナーを指定し、モードを
Offに設定します。 - 5
- オプション: レコメンダーの推奨者を指定します。
VPA CR を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow しばらくすると、VPA はワークロードオブジェクトに関連付けられた Pod 内のコンテナーのリソース使用状況を確認します。
次のコマンドを使用して、VPA の推奨値を表示できます。
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、以下のような CPU およびメモリー要求の推奨事項が表示されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.5.1. Vertical Pod Autoscaler のカスタムリソースの例 リンクのコピーリンクがクリップボードにコピーされました!
Vertical Pod Autoscaler (VPA) Operator は、デプロイメントまたはステートフルセットなどの組み込みリソースだけでなく、Pod を管理するカスタムリソースも更新できます。
カスタムリソースで VPA を使用するには、CustomResourceDefinition (CRD) オブジェクトを作成する際に、/scale サブリソースの labelSelectorPath フィールドを設定する必要があります。/scale サブリソースは Scale オブジェクトを作成します。labelSelectorPath フィールドは、Scale オブジェクトおよびカスタムリソースの status.selector に対応するカスタムリソース内の JSON パスを定義します。以下は、カスタムリソースをターゲットとする VerticalPodAutoscaler 定義と共に、これらの要件を満たす CustomResourceDefinition および CustomResource の例です。/scale サブリソースコントラクトの例を以下に示します。
この例では、Pod を所有することを許可するカスタムリソースのコントローラーが存在しないため、VPA による Pod のスケーリングは行われません。そのため、カスタムリソースと Pod 間の調整と状態管理を管理するために、Kubernetes がサポートする言語でコントローラーを作成する必要があります。この例は、VPA がカスタムリソースをスケーラブルなものとして認識できるようにするための設定を示しています。
カスタム CRD、CR の例
- 1
- カスタムリソースオブジェクトの
status.selectorフィールドに対応する JSON パスを指定します。
カスタム CR の例
- 1
- 管理対象の Pod に適用するラベルのタイプを指定します。これは、カスタムリソース定義オブジェクト内で
labelSelectorPathが参照するフィールドです。
VPA オブジェクトの例
2.5.6. Vertical Pod Autoscaler Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Vertical Pod Autoscaler Operator (VPA) を OpenShift Container Platform クラスターから削除できます。アンインストール後、既存の VPA カスタムリソース (CR) によってすでに変更されている Pod のリソース要求は変更されません。VPA によって行われた以前の推奨事項ではなく、ワークロードオブジェクトで定義されたリソースが、新しい Pod に割り当てられます。
oc delete vpa <vpa-name> コマンドを使用して、特定の VPA CR を削除できます。Vertical Pod Autoscaler のアンインストール時と同じアクションがリソース要求に対して適用されます。
VPA を削除した後、潜在的な問題を回避するために、Operator に関連する他のコンポーネントを削除することを推奨します。
前提条件
- VPA をインストールしている。
手順
- OpenShift Container Platform Web コンソールで、Ecosystem → Installed Operator をクリックします。
- openshift-vertical-pod-autoscaler プロジェクトに切り替えます。
-
VerticalPodAutoscaler Operator の場合は、Options メニュー
をクリックし、Uninstall Operator を選択します。
- オプション: Operator に関連付けられているすべてのオペランドを削除するには、ダイアログボックスで Delete all operand instances for this operator チェックボックスをオンにします。
- Uninstall をクリックします。
オプション: OpenShift CLI を使用して VPA コンポーネントを削除します。
VPA namespace を削除します。
oc delete namespace openshift-vertical-pod-autoscaler
$ oc delete namespace openshift-vertical-pod-autoscalerCopy to Clipboard Copied! Toggle word wrap Toggle overflow VPA カスタムリソース定義 (CRD) オブジェクトを削除します。
oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
$ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd verticalpodautoscalers.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalers.autoscaling.k8s.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow CRD を削除すると、関連付けられたロール、クラスターロール、およびロールバインディングが削除されます。
注記この操作により、ユーザーが作成したすべての VPA CR がクラスターから削除されます。VPA を再インストールする場合は、これらのオブジェクトを再度作成する必要があります。
次のコマンドを実行して
MutatingWebhookConfigurationオブジェクトを削除します。oc delete MutatingWebhookConfiguration vpa-webhook-config
$ oc delete MutatingWebhookConfiguration vpa-webhook-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow VPA Operator を削除します。
oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
$ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscalerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. Pod を中断せずに Pod のリソースレベルを調整する リンクのコピーリンクがクリップボードにコピーされました!
Pod のインプレースサイズ変更 を使用すると、Pod を再作成または再起動せずに、コンテナーに割り当てられた CPU またはメモリーリソースの要求と制限を変更できます。
2.6.1. Pod のインプレースサイズ変更について リンクのコピーリンクがクリップボードにコピーされました!
Pod のインプレースサイズ変更を使用すると、アプリケーションを中断することなく、実行中の Pod 内のコンテナーの CPU およびメモリーリソースを変更できます。Pod の CPU およびメモリーリソースを変更する標準的な方法では、Pod が再作成され、中断が発生する可能性があります。Pod のインプレースサイズ変更により、Pod の再起動に伴うダウンタイムや状態の損失を発生させることなく、Pod のリソースを増減できます。
Pod のインプレースサイズ変更を使用して CPU またはメモリーリソースを変更する場合、Pod 仕様でサイズ変更ポリシーを設定することで、Pod を再起動するかどうかを制御できます。次のサイズ変更ポリシーの例では、メモリーリソースの変更時には Pod の再起動が必要ですが、CPU リソースの変更時には再起動が防止されます。
リソースポリシーの例
- 1
- サイズ変更ポリシーを指定します。
memory のサイズ変更ポリシーを RestartContainer でない限り、メモリーの制限を引き下げることはできません。
既存の Pod にサイズ変更ポリシーを追加または変更することはできません。ただし、Pod にオーナーオブジェクトがある場合は、デプロイメントなどの Pod のオーナーオブジェクトでポリシーを追加または編集できます。
Pod のインプレースサイズ変更を使用するには、次の例に示すように、OpenShift CLI (oc) で Pod を編集するときに --subresource resize フラグを使用する必要があります。
コマンドの例
oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resize
oc apply -f <file_name>.yaml --subresource resize
$ oc apply -f <file_name>.yaml --subresource resize
oc patch pod <pod_name> --subresource resize --patch \
'{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
$ oc patch pod <pod_name> --subresource resize --patch \
'{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
サイズ変更ポリシーとともに --subresource resize フラグを使用する必要があるため、OpenShift Container Platform Web コンソールで Pod リソースを編集することはできません。
サイズ変更ポリシーが NotRequired の場合、要求または制限を変更しても、Pod は再起動されません。
oc get pods
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 0 5s
サイズ変更ポリシーが RestartContainer の場合、要求または制限を変更すると、Pod が再起動されます。
oc get pods
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 1 (5s ago) 5s
リソースの変更後、Pod のステータス条件に、次のメッセージを使用してサイズ変更要求の状態が示されます。
-
PodResizeInProgress: 要求されたリソースの割り当てが可能であり、kubelet が変更を適用中です。 PodResizePending: 次のいずれかの理由により、kubelet がすぐに変更を加えることができません。-
Infeasible: 現在のノードでは要求されたサイズ変更を実行できません。たとえば、ノードが使用できるリソースよりも多くのリソースを要求すると、Infeasible状態になります。 -
Deferred: 要求されたサイズ変更は現在は不可能ですが、後で可能になる可能性があります。たとえば、別の Pod がノードから削除されると、要求されたリソースが使用可能になる可能性があります。ノードの状態に変化があった場合、kubelet がサイズ変更を再試行します。
-
-
Error: リソース割り当て中に kubelet でエラーが発生しました。メッセージフィールドにエラーの理由が報告されます。
実行不可能 (Infeasible) な変更のステータスの例
以下の制限事項に注意してください。
- 再起動不可能な init コンテナーおよび一時コンテナーでは、Pod のインプレースサイズ変更はサポートされていません。
- Pod のインプレースサイズ変更が、Pod QoS クラスなど、他の Pod の可変性に関する制約に違反する場合、その変更は許可されません。
-
静的な
cpuManagerPolicyまたはmemoryManagerPolicyパラメーターによって管理される Pod は、Pod のインプレースサイズ変更ではサイズ変更できません。 -
スワップメモリーを利用する Pod のメモリー要求を Pod のインプレースサイズ変更で変更するには、
RestartContainerポリシーを使用する必要があります。
2.6.2. Pod のインプレースサイズ変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod のインプレースサイズ変更を使用するには、Pod 仕様にサイズ変更ポリシーを追加する必要があります。
既存の Pod にサイズ変更ポリシーを追加または変更することはできません。ただし、Pod にオーナーオブジェクトがある場合は、デプロイメントなどの Pod のオーナーオブジェクトでポリシーを追加または編集できます。
手順
サイズ変更ポリシーを使用して Pod 仕様を作成するか、既存の Pod のオーナーオブジェクトにサイズ変更ポリシーを追加します。
次の例のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サイズ変更ポリシーを指定します。CPU リソースやメモリーリソースについて、次のいずれかの値を指定します。
-
NotRequired: Pod を再起動せずにリソースの変更を適用します。これは、サイズ変更ポリシーを使用する場合のデフォルト値です。 -
RestartContainer: リソースの変更を適用し、Pod を再起動します。
-
次のようなコマンドを実行してオブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のようなコマンドを実行して、CPU またはメモリーの要求または制限を変更し、サイズ変更ポリシーが適用されていることを確認します。
--subresource resizeフラグを含める必要があります。Pod にデプロイメントなどのオーナーオブジェクトがある場合は、オーナーオブジェクトを編集する必要があります。oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resizeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーが適用されると、Pod は期待どおりに応答します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow サイズ変更ポリシーが
NotRequiredの場合、Pod は再起動されません。出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow サイズ変更ポリシーが
RestartContainerの場合、Pod は再起動されます。出力例
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7. シークレットを使用した機密データの Pod への提供 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションによっては、パスワードやユーザー名など開発者に使用させない秘密情報が必要になります。
管理者は、Secret オブジェクトを使用して、機密情報をクリアテキストで公開せずに提供できます。
2.7.1. シークレットについて リンクのコピーリンクがクリップボードにコピーされました!
Secret オブジェクトタイプはパスワード、OpenShift Container Platform クライアント設定ファイル、プライベートソースリポジトリーの認証情報などの機密情報を保持するメカニズムを提供します。シークレットは機密内容を Pod から切り離します。シークレットはボリュームプラグインを使用してコンテナーにマウントすることも、システムが Pod の代わりにシークレットを使用して各種アクションを実行することもできます。
キーのプロパティーには以下が含まれます。
- シークレットデータはその定義とは別に参照できます。
- シークレットデータのボリュームは一時ファイルストレージ機能 (tmpfs) でサポートされ、ノードで保存されることはありません。
- シークレットデータは namespace 内で共有できます。
YAML Secret オブジェクト定義
シークレットに依存する Pod を作成する前に、シークレットを作成する必要があります。
シークレットの作成時に以下を実行します。
- シークレットデータでシークレットオブジェクトを作成します。
- Pod のサービスアカウントをシークレットの参照を許可するように更新します。
-
シークレットを環境変数またはファイルとして使用する Pod を作成します (
secretボリュームを使用)。
2.7.1.1. シークレットの種類 リンクのコピーリンクがクリップボードにコピーされました!
type フィールドの値で、シークレットのキー名と値の構造を指定します。このタイプを使用して、シークレットオブジェクトにユーザー名とキーの配置を実行できます。検証の必要がない場合には、デフォルト設定の opaque タイプを使用してください。
以下のタイプから 1 つ指定して、サーバー側で最小限の検証をトリガーし、シークレットデータに固有のキー名が存在することを確認します。
-
kubernetes.io/basic-auth: Basic 認証で使用します。 -
kubernetes.io/dockercfg: イメージプルシークレットとして使用します。 -
kubernetes.io/dockerconfigjson: イメージプルシークレットとして使用します。 -
kubernetes.io/service-account-token: レガシーサービスアカウント API トークンの取得に使用します。 -
kubernetes.io/ssh-auth: SSH キー認証で使用します。 -
kubernetes.io/tls: TLS 認証局で使用します。
検証が必要ない場合には type: Opaque と指定します。これは、シークレットがキー名または値の規則に準拠しないという意味です。opaque シークレットでは、任意の値を含む、体系化されていない key:value ペアも利用できます。
example.com/my-secret-type などの他の任意のタイプを指定できます。これらのタイプはサーバー側では実行されませんが、シークレットの作成者がその種類のキー/値の要件に従う意図があることを示します。
さまざまな種類のシークレットを作成する例は、シークレットの作成方法 を参照してください。
2.7.1.2. シークレットデータキー リンクのコピーリンクがクリップボードにコピーされました!
シークレットキーは DNS サブドメインになければなりません。
2.7.1.3. 自動的に生成されたイメージプルシークレット リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、デフォルトで各サービスアカウントに対してイメージプルシークレットを作成します。
OpenShift Container Platform 4.16 より前では、作成されたサービスアカウントごとに、長期間有効なサービスアカウント API トークンシークレットも生成されていました。OpenShift Container Platform 4.16 以降では、このサービスアカウント API トークンシークレットは作成されません。
4.20 にアップグレードした後も、既存の長期間有効なサービスアカウント API トークンシークレットは削除されず、引き続き機能します。クラスターで使用されている長期有効 API トークンを検出する方法、または不要な場合に削除する方法は、Red Hat ナレッジベースの記事 Long-lived service account API tokens in OpenShift Container Platform を参照してください。
このイメージプルシークレットは、OpenShift イメージレジストリーをクラスターのユーザー認証および認可システムに統合するために必要です。
ただし、ImageRegistry 機能を有効にしていない場合、または Cluster Image Registry Operator の設定で統合済みの OpenShift イメージレジストリーを無効にしている場合、イメージプルシークレットはサービスアカウントごとに生成されません。
統合済みの OpenShift イメージレジストリーを有効にしていたクラスターでそれを無効にすると、以前に生成されたイメージプルシークレットが自動的に削除されます。
2.7.2. シークレットの作成方法 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、開発者がシークレットに依存する Pod を作成できるよう事前にシークレットを作成しておく必要があります。
シークレットの作成時に以下を実行します。
秘密にしておきたいデータを含む秘密オブジェクトを作成します。各シークレットタイプに必要な特定のデータは、以下のセクションで非表示になります。
不透明なシークレットを作成する YAML オブジェクトの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dataフィールドまたはstringdataフィールドの両方ではなく、いずれかを使用してください。Pod のサービスアカウントをシークレットを参照するように更新します。
シークレットを使用するサービスアカウントの YAML
apiVersion: v1 kind: ServiceAccount ... secrets: - name: test-secret
apiVersion: v1 kind: ServiceAccount ... secrets: - name: test-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットを環境変数またはファイルとして使用する Pod を作成します (
secretボリュームを使用)。シークレットデータと共にボリュームのファイルが設定された Pod の YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットデータと共に環境変数が設定された Pod の YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- シークレットキーを使用する環境変数を指定します。
シークレットデータと環境変数が設定されたビルド設定の YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- シークレットキーを使用する環境変数を指定します。
2.7.2.1. シークレットの作成に関する制限 リンクのコピーリンクがクリップボードにコピーされました!
シークレットを使用するには、Pod がシークレットを参照できる必要があります。シークレットは、以下の 3 つの方法で Pod で使用されます。
- コンテナーの環境変数を事前に設定するために使用される。
- 1 つ以上のコンテナーにマウントされるボリュームのファイルとして使用される。
- Pod のイメージをプルする際に kubelet によって使用される。
ボリュームタイプのシークレットは、ボリュームメカニズムを使用してデータをファイルとしてコンテナーに書き込みます。イメージプルシークレットは、シークレットを namespace のすべての Pod に自動的に注入するためにサービスアカウントを使用します。
テンプレートにシークレット定義が含まれる場合、テンプレートで指定のシークレットを使用できるようにするには、シークレットのボリュームソースを検証し、指定されるオブジェクト参照が Secret オブジェクトを実際に参照していることを確認できる必要があります。そのため、シークレットはこれに依存する Pod の作成前に作成されている必要があります。最も効果的な方法として、サービスアカウントを使用してシークレットを自動的に注入することができます。
シークレット API オブジェクトは namespace にあります。それらは同じ namespace の Pod によってのみ参照されます。
個々のシークレットは 1MB のサイズに制限されます。これにより、apiserver および kubelet メモリーを使い切るような大規模なシークレットの作成を防ぐことができます。ただし、小規模なシークレットであってもそれらを数多く作成するとメモリーの消費につながります。
2.7.2.2. 不透明なシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、不透明なシークレットを作成できます。これにより、任意の値を含むことができる非構造化 key:value のペアを格納できます。
手順
YAML ファイルに
Secretオブジェクトを作成します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 不透明なシークレットを指定します。
以下のコマンドを使用して
Secretオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod でシークレットを使用するには、以下を実行します。
- 「シークレットの作成方法について」セクションで説明されているとおり、Pod のサービスアカウントを更新してシークレットを参照します。
-
「シークレットの作成方法について」で説明されているとおり、シークレットを環境変数またはファイル (
secretボリュームを使用) として使用する Pod を作成します。
2.7.2.3. レガシーサービスアカウントトークンシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、レガシーサービスアカウントトークンシークレットを作成できます。これにより、API に対して認証する必要のあるアプリケーションにサービスアカウントトークンを配布できます。
レガシーサービスアカウントトークンシークレットを使用する代わりに、TokenRequest API を使用してバインドされたサービスアカウントトークンを取得することを推奨します。TokenRequest API を使用できず、読み取り可能な API オブジェクトで有効期限が切れていないトークンのセキュリティーエクスポージャーが許容できる場合にのみ、サービスアカウントトークンシークレットを作成する必要があります。
バインドされたサービスアカウントトークンは、次の理由により、サービスアカウントトークンのシークレットよりもセキュアです。
- バインドされたサービスアカウントトークンには有効期間が制限されています。
- バインドされたサービスアカウントトークンには対象ユーザーが含まれます。
- バインドされたサービスアカウントトークンは Pod またはシークレットにバインドでき、バインドされたオブジェクトが削除されるとバインドされたトークンは無効になります。
バインドされたサービスアカウントトークンを取得するために、ワークロードに projected ボリュームが自動的に注入されます。ワークロードに追加のサービスアカウントトークンが必要な場合は、ワークロードマニフェストに追加の projected ボリュームを追加してください。
詳細は、「ボリュームプロジェクションを使用したバインドされたサービスアカウントトークンの設定」を参照してください。
手順
YAML ファイルに
Secretオブジェクトを作成します。Secretオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して
Secretオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod でシークレットを使用するには、以下を実行します。
- 「シークレットの作成方法について」セクションで説明されているとおり、Pod のサービスアカウントを更新してシークレットを参照します。
-
「シークレットの作成方法について」で説明されているとおり、シークレットを環境変数またはファイル (
secretボリュームを使用) として使用する Pod を作成します。
2.7.2.4. Basic 認証シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
管理者は Basic 認証シークレットを作成できます。これにより、Basic 認証に必要な認証情報を保存できます。このシークレットタイプを使用する場合は、Secret オブジェクトの data パラメーターには、base64 形式でエンコードされた以下のキーが含まれている必要があります。
-
username: 認証用のユーザー名 -
password: 認証のパスワードまたはトークン
stringData パラメーターを使用して、クリアテキストコンテンツを使用できます。
手順
YAML ファイルに
Secretオブジェクトを作成します。secretオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して
Secretオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod でシークレットを使用するには、以下を実行します。
- 「シークレットの作成方法について」セクションで説明されているとおり、Pod のサービスアカウントを更新してシークレットを参照します。
-
「シークレットの作成方法について」で説明されているとおり、シークレットを環境変数またはファイル (
secretボリュームを使用) として使用する Pod を作成します。
2.7.2.5. SSH 認証シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、SSH 認証シークレットを作成できます。これにより、SSH 認証に使用されるデータを保存できます。このシークレットタイプを使用する場合、Secret オブジェクトの data パラメーターには、使用する SSH 認証情報が含まれている必要があります。
手順
コントロールプレーンノードの YAML ファイルに
Secretオブジェクトを作成します。secretオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して
Secretオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod でシークレットを使用するには、以下を実行します。
- 「シークレットの作成方法について」セクションで説明されているとおり、Pod のサービスアカウントを更新してシークレットを参照します。
-
「シークレットの作成方法について」で説明されているとおり、シークレットを環境変数またはファイル (
secretボリュームを使用) として使用する Pod を作成します。
2.7.2.6. Docker 設定シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
管理者は Docker 設定シークレットを作成できます。これにより、コンテナーイメージレジストリーにアクセスするための認証情報を保存できます。
-
kubernetes.io/dockercfg: このシークレットタイプを使用してローカルの Docker 設定ファイルを保存します。secretオブジェクトのdataパラメーターには、base64 形式でエンコードされた.dockercfgファイルの内容が含まれている必要があります。 -
kubernetes.io/dockerconfigjson: このシークレットタイプを使用して、ローカルの Docker 設定 JSON ファイルを保存します。secretオブジェクトのdataパラメーターには、base64 形式でエンコードされた.docker/config.jsonファイルの内容が含まれている必要があります。
手順
YAML ファイルに
Secretオブジェクトを作成します。Docker 設定の
secretオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow Docker 設定の JSON
secretオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して
Secretオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod でシークレットを使用するには、以下を実行します。
- 「シークレットの作成方法について」セクションで説明されているとおり、Pod のサービスアカウントを更新してシークレットを参照します。
-
「シークレットの作成方法について」で説明されているとおり、シークレットを環境変数またはファイル (
secretボリュームを使用) として使用する Pod を作成します。
2.7.2.7. Web コンソールを使用したシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用してシークレットを作成できます。
手順
- Workloads → Secrets に移動します。
Create → From YAML をクリックします。
仕様に合わせて YAML を手動で編集するか、ファイルを YAML エディターにドラッグアンドドロップします。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Create をクリックします。
Add Secret to workload をクリックします。
- ドロップダウンメニューから、追加するワークロードを選択します。
- Save をクリックします。
2.7.3. シークレットの更新方法 リンクのコピーリンクがクリップボードにコピーされました!
シークレットの値を変更する場合、値 (すでに実行されている Pod で使用される値) は動的に変更されません。シークレットを変更するには、元の Pod を削除してから新規の Pod を作成する必要があります (同じ PodSpec を使用する場合があります)。
シークレットの更新は、新規コンテナーイメージのデプロイメントと同じワークフローで実行されます。kubectl rolling-update コマンドを使用できます。
シークレットの resourceVersion 値は参照時に指定されません。したがって、シークレットが Pod の起動と同じタイミングで更新される場合、Pod に使用されるシークレットのバージョンは定義されません。
現時点で、Pod の作成時に使用されるシークレットオブジェクトのリソースバージョンを確認することはできません。コントローラーが古い resourceVersion を使用して Pod を再起動できるように、Pod がこの情報を報告できるようにすることが予定されています。それまでは既存シークレットのデータを更新せずに別の名前で新規のシークレットを作成します。
2.7.4. シークレットの作成および使用 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、サービスアカウントトークンシークレットを作成できます。これにより、サービスアカウントトークンを API に対して認証する必要のあるアプリケーションに配布できます。
手順
以下のコマンドを実行して namespace にサービスアカウントを作成します。
oc create sa <service_account_name> -n <your_namespace>
$ oc create sa <service_account_name> -n <your_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の YAML の例は
service-account-token-secret.yamlという名前のファイルに保存します。この例には、サービスアカウントトークンの生成に使用可能なSecretオブジェクト設定が含まれています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルを適用してサービスアカウントトークンを生成します。
oc apply -f service-account-token-secret.yaml
$ oc apply -f service-account-token-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、シークレットからサービスアカウントトークンを取得します。
oc get secret <sa_token_secret> -o jsonpath='{.data.token}' | base64 --decode$ oc get secret <sa_token_secret> -o jsonpath='{.data.token}' | base64 --decode1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ayJhbGciOiJSUzI1NiIsImtpZCI6IklOb2dtck1qZ3hCSWpoNnh5YnZhSE9QMkk3YnRZMVZoclFfQTZfRFp1YlUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImJ1aWxkZXItdG9rZW4tdHZrbnIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYnVpbGRlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNmZGU2MGZmLTA1NGYtNDkyZi04YzhjLTNlZjE0NDk3MmFmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmJ1aWxkZXIifQ.OmqFTDuMHC_lYvvEUrjr1x453hlEEHYcxS9VKSzmRkP1SiVZWPNPkTWlfNRp6bIUZD3U6aN3N7dMSN0eI5hu36xPgpKTdvuckKLTCnelMx6cxOdAbrcw1mCmOClNscwjS1KO1kzMtYnnq8rXHiMJELsNlhnRyyIXRTtNBsy4t64T3283s3SLsancyx0gy0ujx-Ch3uKAKdZi5iT-I8jnnQ-ds5THDs2h65RJhgglQEmSxpHrLGZFmyHAQI-_SjvmHZPXEc482x3SkaQHNLqpmrpJorNqh1M8ZHKzlujhZgVooMvJmWPXTb2vnvi3DGn2XI-hZxl1yD2yGH1RBpYUHA
ayJhbGciOiJSUzI1NiIsImtpZCI6IklOb2dtck1qZ3hCSWpoNnh5YnZhSE9QMkk3YnRZMVZoclFfQTZfRFp1YlUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImJ1aWxkZXItdG9rZW4tdHZrbnIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYnVpbGRlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNmZGU2MGZmLTA1NGYtNDkyZi04YzhjLTNlZjE0NDk3MmFmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmJ1aWxkZXIifQ.OmqFTDuMHC_lYvvEUrjr1x453hlEEHYcxS9VKSzmRkP1SiVZWPNPkTWlfNRp6bIUZD3U6aN3N7dMSN0eI5hu36xPgpKTdvuckKLTCnelMx6cxOdAbrcw1mCmOClNscwjS1KO1kzMtYnnq8rXHiMJELsNlhnRyyIXRTtNBsy4t64T3283s3SLsancyx0gy0ujx-Ch3uKAKdZi5iT-I8jnnQ-ds5THDs2h65RJhgglQEmSxpHrLGZFmyHAQI-_SjvmHZPXEc482x3SkaQHNLqpmrpJorNqh1M8ZHKzlujhZgVooMvJmWPXTb2vnvi3DGn2XI-hZxl1yD2yGH1RBpYUHACopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <sa_token_secret> は、サービストークンシークレットの名前に置き換えます。
サービスアカウントトークンを使用して、クラスターの API で認証します。
curl -X GET <openshift_cluster_api> --header "Authorization: Bearer <token>"
$ curl -X GET <openshift_cluster_api> --header "Authorization: Bearer <token>"1 2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.5. シークレットで署名証明書を使用する方法 リンクのコピーリンクがクリップボードにコピーされました!
サービスの通信を保護するため、プロジェクト内のシークレットに追加可能な、署名されたサービス証明書/キーペアを生成するように OpenShift Container Platform を設定することができます。
サービス提供証明書のシークレット は、追加設定なしの証明書を必要とする複雑なミドルウェアアプリケーションをサポートするように設計されています。これにはノードおよびマスターの管理者ツールで生成されるサーバー証明書と同じ設定が含まれます。
サービス提供証明書のシークレット用に設定されるサービス Pod 仕様
- 1
- 証明書の名前を指定します。
他の Pod は Pod に自動的にマウントされる /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt ファイルの CA バンドルを使用して、クラスターで作成される証明書 (内部 DNS 名の場合にのみ署名される) を信頼できます。
この機能の署名アルゴリズムは x509.SHA256WithRSA です。ローテーションを手動で実行するには、生成されたシークレットを削除します。新規の証明書が作成されます。
2.7.5.1. シークレットで使用する署名証明書の生成 リンクのコピーリンクがクリップボードにコピーされました!
署名されたサービス証明書/キーペアを Pod で使用するには、サービスを作成または編集して service.beta.openshift.io/serving-cert-secret-name アノテーションを追加した後に、シークレットを Pod に追加します。
手順
サービス提供証明書のシークレット を作成するには、以下を実行します。
-
サービスの
Pod仕様を編集します。 シークレットに使用する名前に
service.beta.openshift.io/serving-cert-secret-nameアノテーションを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 証明書およびキーは PEM 形式であり、それぞれ
tls.crtおよびtls.keyに保存されます。
サービスを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットを表示して、作成されていることを確認します。
すべてのシークレットのリストを表示します。
oc get secrets
$ oc get secretsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE DATA AGE my-cert kubernetes.io/tls 2 9m
NAME TYPE DATA AGE my-cert kubernetes.io/tls 2 9mCopy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットの詳細を表示します。
oc describe secret my-cert
$ oc describe secret my-certCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットを使用して
Pod仕様を編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これが利用可能な場合、Pod が実行されます。この証明書は内部サービス DNS 名、
<service.name>.<service.namespace>.svcに適しています。証明書/キーのペアは有効期限に近づくと自動的に置換されます。シークレットの
service.beta.openshift.io/expiryアノテーションで RFC3339 形式の有効期限の日付を確認します。注記ほとんどの場合、サービス DNS 名
<service.name>.<service.namespace>.svcは外部にルーティング可能ではありません。<service.name>.<service.namespace>.svcの主な使用方法として、クラスターまたはサービス間の通信用として、re-encrypt ルートで使用されます。
2.7.6. シークレットのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
サービス証明書の生成は以下を出して失敗します (サービスの service.beta.openshift.io/serving-cert-generation-error アノテーションには以下が含まれます)。
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
証明書を生成したサービスがすでに存在しないか、サービスに異なる serviceUID があります。古いシークレットを削除し、サービスのアノテーション (service.beta.openshift.io/serving-cert-generation-error、service.beta.openshift.io/serving-cert-generation-error-num) をクリアして証明書の再生成を強制的に実行する必要があります。
シークレットを削除します。
oc delete secret <secret_name>
$ oc delete secret <secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow アノテーションをクリアします。
oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-Copy to Clipboard Copied! Toggle word wrap Toggle overflow
アノテーションを削除するコマンドでは、削除するアノテーション名の後に - を付けます。
2.8. 外部シークレットストアを使用した機密データの Pod への提供 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションによっては、パスワードやユーザー名など開発者に使用させない秘密情報が必要になります。
Kubernetes Secret オブジェクトを使用して機密情報を提供する代わりに、外部シークレットストアを使用して機密情報を保存できます。Secrets Store CSI Driver Operator を使用して、外部シークレットストアと統合し、シークレットコンテンツを Pod ボリュームとしてマウントできます。
2.8.1. Secrets Store CSI Driver Operator について リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes シークレットは Base64 エンコーディングで保存されます。etcd は、これらのシークレットの保存時に暗号化しますが、シークレットの取得時に、シークレットが復号化されてユーザーに表示されます。クラスターでロールベースのアクセス制御が適切に設定されていない場合、API または etcd へのアクセス権を持つユーザーは誰でもシークレットを取得または変更できます。さらに、namespace で Pod を作成する権限を持つ人は誰でも、そのアクセス権を使用して、その namespace 内の任意のシークレットを読み取ることができます。
シークレットをセキュアに保存および管理するには、プロバイダープラグインを使用して、Azure Key Vault などの外部シークレット管理システムからシークレットをマウントするように OpenShift Container Platform Secrets Store Container Storage Interface (CSI) Driver Operator を設定できます。アプリケーションはシークレットを使用できますが、アプリケーション Pod が破棄されるとシークレットはシステム上に保持されません。
Secrets Store CSI Driver Operator (secrets-store.csi.k8s.io) を使用すると、OpenShift Container Platform で、エンタープライズグレードの外部シークレットストアに保存されている複数のシークレット、キー、証明書をボリュームとして Pod にマウントできます。Secrets Store CSI Driver Operator は、gRPC を使用してプロバイダーと通信し、指定された外部シークレットストアからマウントコンテンツを取得します。ボリュームがアタッチされると、その中のデータがコンテナーのファイルシステムにマウントされます。シークレットストアボリュームはインラインでマウントされます。
2.8.1.1. シークレットストアプロバイダー リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator は、次のシークレットストアプロバイダーでテストされています。
- AWS Secrets Manager
- AWS Systems Manager Parameter Store
- Azure Key Vault
- Google Secret Manager
- HashiCorp Vault
Red Hat は、サードパーティーのシークレットストアプロバイダーの機能に関連するすべての要素をテストしているわけではありません。サードパーティーのサポートの詳細は、Red Hat サードパーティーサポートポリシー を参照してください。
2.8.1.2. 自動ローテーション リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI ドライバーは、外部シークレットストアのコンテンツを使用して、マウントされたボリューム内のコンテンツを定期的にローテーションします。外部シークレットストアでシークレットが更新されると、マウントされたボリュームでもシークレットが更新されます。Secrets Store CSI Driver Operator は、2 分ごとに更新をポーリングします。
Kubernetes シークレットとしてマウントされたコンテンツの同期を有効にした場合は、Kubernetes シークレットもローテーションされます。
シークレットデータを使用するアプリケーションは、シークレットの更新を監視する必要があります。
2.8.2. Secrets Store CSI ドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- 管理者としてクラスターにアクセスできる。
手順
Secrets Store CSI ドライバーをインストールするには、以下を実行します。
Secrets Store CSI Driver Operator をインストールします。
- Web コンソールにログインします。
- Ecosystem → Software Catalog をクリックします。
- フィルターボックスに "Secrets Store CSI" と入力し、Secrets Store CSI Driver Operator を見つけます。
- Secrets Store CSI Driver Operator ボタンをクリックします。
- Secrets Store CSI Driver Operator ページで、Install をクリックします。
Install Operator のページで、以下のことを確認してください。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、Web コンソールの Installed Operators セクションに Secrets Store CSI Driver Operator がリストされます。
ドライバーの
ClusterCSIDriverインスタンス (secrets-store.csi.k8s.io) を作成します。- Administration → CustomResourceDefinitions → ClusterCSIDriver をクリックします。
Instances タブで Create ClusterCSIDriver をクリックします。
以下の YAML ファイルを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
2.8.3. 外部シークレットストアから CSI ボリュームへのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator をインストールした後、次のいずれかの外部シークレットストアから CSI ボリュームにシークレットをマウントできます。
2.8.3.1. AWS Secrets Manager からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、AWS Secrets Manager の外部シークレットストアから OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 -
jqツールをインストールした。 -
ccoctlユーティリティーを抽出して準備した。 - クラスターを Amazon Web Services (AWS) にインストールしており、そのクラスターは AWS Security Token Service (STS) を使用する。
- Secrets Store CSI Driver Operator がインストールされている。詳細は、「Secrets Store CSI ドライバーのインストール」を参照してください。
- 必要なシークレットを格納するように AWS Secrets Manager を設定している。
手順
AWS Secrets Manager プロバイダーをインストールします。
次の設定例を使用して YAML ファイルを作成します。
重要Secrets Store CSI ドライバーの AWS Secrets Manager プロバイダーは、アップストリームプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの AWS ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
aws-provider.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-awsサービスアカウントへの特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-driversCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f aws-provider.yaml
$ oc apply -f aws-provider.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
AWS シークレットオブジェクトの読み取り権限をサービスアカウントに付与します。
次のコマンドを実行して、認証情報リクエストを含むディレクトリーを作成します。
mkdir <aws_creds_directory_name>
$ mkdir <aws_creds_directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow CredentialsRequestリソース設定を定義する YAML ファイルを作成します。次の設定例を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、OpenID Connect (OIDC) プロバイダーを取得します。
oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'
$ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
https://<oidc_provider_name>
https://<oidc_provider_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のステップで使用するために、出力から OIDC プロバイダー名
<oidc_provider_name>をコピーします。ccoctlツールを使用して、次のコマンドを実行して認証情報リクエストを処理します。ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=<aws_creds_dir_name> \ --identity-provider-arn arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider_name> --output-dir=<output_dir_name>$ ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=<aws_creds_dir_name> \ --identity-provider-arn arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider_name> --output-dir=<output_dir_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-credsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のステップで使用するために、出力から
<aws_role_arn>をコピーします。たとえば、arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-credsです次のコマンドを実行して、ロール ARN を持つサービスアカウントをバインドします。
oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClassオブジェクトを定義する YAML ファイルを作成します。secret-provider-class-aws.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClassオブジェクトを作成します。oc create -f secret-provider-class-aws.yaml
$ oc create -f secret-provider-class-aws.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deploymentオブジェクトを定義する YAML ファイルを作成します。deployment.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deploymentオブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウントの AWS Secrets Manager からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testSecret
testSecretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
$ oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3.2. AWS Systems Manager Parameter Store からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、AWS Systems Manager Parameter Store の外部シークレットストアから OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 -
jqツールをインストールした。 -
ccoctlユーティリティーを抽出して準備した。 - クラスターを Amazon Web Services (AWS) にインストールしており、そのクラスターは AWS Security Token Service (STS) を使用する。
- Secrets Store CSI Driver Operator がインストールされている。詳細は、「Secrets Store CSI ドライバーのインストール」を参照してください。
- 必要なシークレットを保存するように AWS Systems Manager パラメーターストアを設定している。
手順
AWS Systems Manager Parameter Store プロバイダーをインストールします。
次の設定例を使用して YAML ファイルを作成します。
重要Secrets Store CSI ドライバーの AWS Systems Manager Parameter Store プロバイダーは、アップストリームのプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの AWS ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
aws-provider.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-awsサービスアカウントへの特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-driversCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f aws-provider.yaml
$ oc apply -f aws-provider.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
AWS シークレットオブジェクトの読み取り権限をサービスアカウントに付与します。
次のコマンドを実行して、認証情報リクエストを含むディレクトリーを作成します。
mkdir <aws_creds_directory_name>
$ mkdir <aws_creds_directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow CredentialsRequestリソース設定を定義する YAML ファイルを作成します。次の設定例を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、OpenID Connect (OIDC) プロバイダーを取得します。
oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'
$ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
https://<oidc_provider_name>
https://<oidc_provider_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のステップで使用するために、出力から OIDC プロバイダー名
<oidc_provider_name>をコピーします。ccoctlツールを使用して、次のコマンドを実行して認証情報リクエストを処理します。ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=<aws_creds_dir_name> \ --identity-provider-arn arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider_name> --output-dir=<output_dir_name>$ ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=<aws_creds_dir_name> \ --identity-provider-arn arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider_name> --output-dir=<output_dir_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-credsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のステップで使用するために、出力から
<aws_role_arn>をコピーします。たとえば、arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-credsです次のコマンドを実行して、ロール ARN を持つサービスアカウントをバインドします。
oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClassオブジェクトを定義する YAML ファイルを作成します。secret-provider-class-aws.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClassオブジェクトを作成します。oc create -f secret-provider-class-aws.yaml
$ oc create -f secret-provider-class-aws.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deploymentオブジェクトを定義する YAML ファイルを作成します。deployment.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deploymentオブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の AWS Systems Manager Parameter Store からのシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testParameter
testParameterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
$ oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3.3. Azure Key Vault からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、Microsoft Azure Key Vault から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。Azure Key Vault からシークレットをマウントするには、以下を実行します。
前提条件
- Azure にクラスターをインストールした。
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 -
Azure CLI (
az) がインストールされている。 - Secrets Store CSI Driver Operator がインストールされている。手順は、「Secrets Store CSI ドライバーのインストール」を参照してください。
- 必要なシークレットを保存するように Azure Key Vault を設定している。
手順
Azure Key Vault プロバイダーをインストールします。
ServiceAccountリソース設定を定義する、azure-provider.yamlという名前の YAML ファイルを作成します。次の設定例を参照してください。重要Secrets Store CSI ドライバーの Azure Key Vault プロバイダーは、アップストリームプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの Azure ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
azure-provider.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-azureサービスアカウントへの特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-azure -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-azure -n openshift-cluster-csi-driversCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f azure-provider.yaml
$ oc apply -f azure-provider.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Key Vault にアクセスするためのサービスプリンシパルを作成します。
次のコマンドを実行して、サービスプリンシパルのクライアントシークレットを環境変数として設定します。
SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --name https://$KEYVAULT_NAME --query 'password' -otsv)"
$ SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --name https://$KEYVAULT_NAME --query 'password' -otsv)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスプリンシパルのクライアント ID を環境変数として設定します。
SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name https://$KEYVAULT_NAME --query '[0].appId' -otsv)"
$ SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name https://$KEYVAULT_NAME --query '[0].appId' -otsv)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスプリンシパルのクライアントシークレットと ID を使用して汎用シークレットを作成します。
oc create secret generic secrets-store-creds -n my-namespace --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET}$ oc create secret generic secrets-store-creds -n my-namespace --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET}Copy to Clipboard Copied! Toggle word wrap Toggle overflow secrets-store.csi.k8s.io/used=trueラベルを適用して、プロバイダーがこのnodePublishSecretRefシークレットを検索できるようにします。oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
$ oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClassオブジェクトを定義する YAML ファイルを作成します。secret-provider-class-azure.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClassオブジェクトを作成します。oc create -f secret-provider-class-azure.yaml
$ oc create -f secret-provider-class-azure.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deploymentオブジェクトを定義する YAML ファイルを作成します。deployment.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deploymentオブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の Azure Key Vault からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-azure-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-azure-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret1
secret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-azure-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/secret1
$ oc exec my-azure-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/secret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
my-secret-value
my-secret-valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3.4. Google Secret Manager からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、Google Secret Manager から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。Google Secret Manager からシークレットをマウントするには、クラスターが Google Cloud にインストールされている必要があります。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 - Secrets Store CSI Driver Operator がインストールされている。手順は、「Secrets Store CSI ドライバーのインストール」を参照してください。
- 必要なシークレットを保存するように Google Secret Manager を設定した。
-
Google Cloud サービスアカウントから
key.jsonという名前のサービスアカウントキーを作成した。
手順
Google Secret Manager プロバイダーをインストールします。
ServiceAccountリソース設定を定義する、gcp-provider.yamlという名前の YAML ファイルを作成します。次の設定例を参照してください。gcp-provider.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-gcpサービスアカウントに特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-gcp -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-gcp -n openshift-cluster-csi-driversCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f gcp-provider.yaml
$ oc apply -f gcp-provider.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Google Secret Manager シークレットに読み取り権限を付与します。
次のコマンドを実行して新しいプロジェクトを作成します。
oc new-project my-namespace
$ oc new-project my-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod セキュリティーアドミッション用の
my-namespacenamespace にラベルを付けます。oc label ns my-namespace security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
$ oc label ns my-namespace security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のデプロイメント用のサービスアカウントを作成します。
oc create serviceaccount my-service-account --namespace=my-namespace
$ oc create serviceaccount my-service-account --namespace=my-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
key.jsonファイルから汎用シークレットを作成します。oc create secret generic secrets-store-creds -n my-namespace --from-file=key.json
$ oc create secret generic secrets-store-creds -n my-namespace --from-file=key.json1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この
key.jsonファイルは Google Secret Manager から作成したものです。
secrets-store.csi.k8s.io/used=trueラベルを適用して、プロバイダーがこのnodePublishSecretRefシークレットを検索できるようにします。oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
$ oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClassオブジェクトを定義する YAML ファイルを作成します。secret-provider-class-gcp.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClassオブジェクトを作成します。oc create -f secret-provider-class-gcp.yaml
$ oc create -f secret-provider-class-gcp.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deploymentオブジェクトを定義する YAML ファイルを作成します。deployment.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deploymentオブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の Google Secret Manager からのシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-gcp-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-gcp-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testsecret1
testsecret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-gcp-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testsecret1
$ oc exec my-gcp-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testsecret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3.5. HashiCorp Vault からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、HashiCorp Vault から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。
Secrets Store CSI Driver Operator を使用して HashiCorp Vault からシークレットをマウントする機能は、次のクラウドプロバイダーでテストされています。
- Amazon Web Services (AWS)
- Microsoft Azure
他のクラウドプロバイダーも機能する可能性がありますが、まだテストされていません。今後、別のクラウドプロバイダーが追加でテストされる可能性があります。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 - Secrets Store CSI Driver Operator がインストールされている。手順は、「Secrets Store CSI ドライバーのインストール」を参照してください。
- Helm がインストールされている。
手順
次のコマンドを実行して、HashiCorp Helm リポジトリーを追加します。
helm repo add hashicorp https://helm.releases.hashicorp.com
$ helm repo add hashicorp https://helm.releases.hashicorp.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべてのリポジトリーを更新し、Helm が最新バージョンを認識するようにします。
helm repo update
$ helm repo updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow HashiCorp Vault プロバイダーをインストールします。
次のコマンドを実行して、Vault の新しいプロジェクトを作成します。
oc new-project vault
$ oc new-project vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod セキュリティーアドミッション用の
vaultnamespace にラベルを付けます。oc label ns vault security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
$ oc label ns vault security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vaultサービスアカウントに特権アクセスを許可します。oc adm policy add-scc-to-user privileged -z vault -n vault
$ oc adm policy add-scc-to-user privileged -z vault -n vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-providerサービスアカウントに特権アクセスを許可します。oc adm policy add-scc-to-user privileged -z vault-csi-provider -n vault
$ oc adm policy add-scc-to-user privileged -z vault-csi-provider -n vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して HashiCorp Vault をデプロイします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-driverデーモンセットにパッチを適用し、securityContextをprivilegedに設定します。oc patch daemonset -n vault vault-csi-provider --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/securityContext", "value": {"privileged": true} }]'$ oc patch daemonset -n vault vault-csi-provider --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/securityContext", "value": {"privileged": true} }]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-providerPod が正常に起動したことを確認します。oc get pods -n vault
$ oc get pods -n vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 24m vault-csi-provider-87rgw 1/2 Running 0 5s vault-csi-provider-bd6hp 1/2 Running 0 4s vault-csi-provider-smlv7 1/2 Running 0 5s
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 24m vault-csi-provider-87rgw 1/2 Running 0 5s vault-csi-provider-bd6hp 1/2 Running 0 4s vault-csi-provider-smlv7 1/2 Running 0 5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
必要なシークレットを保存するように HashiCorp Vault を設定します。
次のコマンドを実行してシークレットを作成します。
oc exec vault-0 --namespace=vault -- vault kv put secret/example1 testSecret1=my-secret-value
$ oc exec vault-0 --namespace=vault -- vault kv put secret/example1 testSecret1=my-secret-valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、シークレットがパス
secret/example1で読み取り可能であることを確認します。oc exec vault-0 --namespace=vault -- vault kv get secret/example1
$ oc exec vault-0 --namespace=vault -- vault kv get secret/example1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kubernetes 認証を使用するように Vault を設定します。
次のコマンドを実行して、Kubernetes 認証方法を有効にします。
oc exec vault-0 --namespace=vault -- vault auth enable kubernetes
$ oc exec vault-0 --namespace=vault -- vault auth enable kubernetesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Enabled kubernetes auth method at: kubernetes/
Success! Enabled kubernetes auth method at: kubernetes/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes 認証メソッドを設定します。
次のコマンドを実行して、トークンレビューアーを環境変数として設定します。
TOKEN_REVIEWER_JWT="$(oc exec vault-0 --namespace=vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
$ TOKEN_REVIEWER_JWT="$(oc exec vault-0 --namespace=vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Kubernetes サービスの IP アドレスを環境変数として設定します。
KUBERNETES_SERVICE_IP="$(oc get svc kubernetes --namespace=default -o go-template="{{ .spec.clusterIP }}")"$ KUBERNETES_SERVICE_IP="$(oc get svc kubernetes --namespace=default -o go-template="{{ .spec.clusterIP }}")"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Kubernetes auth メソッドを更新します。
oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/config \ issuer="https://kubernetes.default.svc.cluster.local" \ token_reviewer_jwt="${TOKEN_REVIEWER_JWT}" \ kubernetes_host="https://${KUBERNETES_SERVICE_IP}:443" \ kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt$ oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/config \ issuer="https://kubernetes.default.svc.cluster.local" \ token_reviewer_jwt="${TOKEN_REVIEWER_JWT}" \ kubernetes_host="https://${KUBERNETES_SERVICE_IP}:443" \ kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Data written to: auth/kubernetes/config
Success! Data written to: auth/kubernetes/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、アプリケーションのポリシーを作成します。
oc exec -i vault-0 --namespace=vault -- vault policy write csi -<<EOF path "secret/data/*" { capabilities = ["read"] } EOF$ oc exec -i vault-0 --namespace=vault -- vault policy write csi -<<EOF path "secret/data/*" { capabilities = ["read"] } EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Uploaded policy: csi
Success! Uploaded policy: csiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アプリケーションにアクセスするための認証ロールを作成します。
oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/role/csi \ bound_service_account_names=default \ bound_service_account_namespaces=default,test-ns,negative-test-ns,my-namespace \ policies=csi \ ttl=20m
$ oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/role/csi \ bound_service_account_names=default \ bound_service_account_namespaces=default,test-ns,negative-test-ns,my-namespace \ policies=csi \ ttl=20mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Data written to: auth/kubernetes/role/csi
Success! Data written to: auth/kubernetes/role/csiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClassオブジェクトを定義する YAML ファイルを作成します。secret-provider-class-vault.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClassオブジェクトを作成します。oc create -f secret-provider-class-vault.yaml
$ oc create -f secret-provider-class-vault.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deploymentオブジェクトを定義する YAML ファイルを作成します。deployment.yamlの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deploymentオブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、すべての
vaultPod が正常に実行されていることを確認します。oc get pods -n vault
$ oc get pods -n vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 43m vault-csi-provider-87rgw 2/2 Running 0 19m vault-csi-provider-bd6hp 2/2 Running 0 19m vault-csi-provider-smlv7 2/2 Running 0 19m
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 43m vault-csi-provider-87rgw 2/2 Running 0 19m vault-csi-provider-bd6hp 2/2 Running 0 19m vault-csi-provider-smlv7 2/2 Running 0 19mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべての
secrets-store-csi-driverPod が実行されていることを確認します。oc get pods -n openshift-cluster-csi-drivers | grep -E "secrets"
$ oc get pods -n openshift-cluster-csi-drivers | grep -E "secrets"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Pod ボリュームマウント内の HashiCorp Vault からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec busybox-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec busybox-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testSecret1
testSecret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec busybox-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret1
$ oc exec busybox-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
my-secret-value
my-secret-valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.4. マウントされたコンテンツを Kubernetes シークレットとして同期できるようにする リンクのコピーリンクがクリップボードにコピーされました!
同期を有効にして、マウントされたボリューム上のコンテンツから Kubernetes シークレットを作成できます。同期を有効にする例としては、デプロイメント内で環境変数を使用して Kubernetes シークレットを参照することが挙げられます。
シークレットを OpenShift Container Platform クラスターおよび etcd に保存しない場合は、同期を有効にしないでください。この機能は、環境変数を使用してシークレットを参照する場合など、必要な場合にのみ有効にしてください。
同期を有効にすると、シークレットをマウントする Pod を開始した後、マウントされたボリュームのシークレットが Kubernetes シークレットとして同期されます。
コンテンツをマウントしたすべての Pod が削除されると、同期された Kubernetes シークレットも削除されます。
前提条件
- Secrets Store CSI Driver Operator がインストールされている。
- シークレットストアプロバイダーがインストールされている。
- シークレットプロバイダークラスが作成されている。
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、
SecretProviderClassリソースを編集します。oc edit secretproviderclass my-azure-provider
$ oc edit secretproviderclass my-azure-provider1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
my-azure-providerをシークレットプロバイダークラスの名前に置き換えます。
同期された Kubernetes シークレットの設定を含む
secretsObjectsセクションを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を適用するためにファイルを保存します。
2.8.5. Pod ボリュームマウント内のシークレットのステータスの表示 リンクのコピーリンクがクリップボードにコピーされました!
Pod ボリュームマウント内のシークレットのバージョンなどの詳細情報を表示できます。
Secrets Store CSI Driver Operator は、Pod と同じ namespace に SecretProviderClassPodStatus リソースを作成します。このリソースを確認すると、Pod ボリュームマウントのシークレットに関するバージョンなどの詳細情報を確認できます。
前提条件
- Secrets Store CSI Driver Operator がインストールされている。
- シークレットストアプロバイダーがインストールされている。
- シークレットプロバイダークラスが作成されている。
- Secrets Store CSI Driver Operator からボリュームをマウントする Pod をデプロイしている。
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、Pod ボリュームマウントのシークレットに関する詳細情報を表示します。
oc get secretproviderclasspodstatus <secret_provider_class_pod_status_name> -o yaml
$ oc get secretproviderclasspodstatus <secret_provider_class_pod_status_name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- シークレットプロバイダークラスの Pod ステータスオブジェクトの名前は、
<pod_name>-<namespace>-<secret_provider_class_name>の形式になります。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.6. Secrets Store CSI Driver Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- 管理者としてクラスターにアクセスできる。
手順
Secrets Store CSI Driver Operator をアンインストールするには、以下を実行します。
-
secrets-store.csi.k8s.ioプロバイダーを使用するすべてのアプリケーション Pod を停止します。 - 選択したシークレットストアのサードパーティープロバイダープラグインをすべて削除します。
Container Storage Interface (CSI) ドライバーと関連するマニフェストを削除します。
- Administration → CustomResourceDefinitions → ClusterCSIDriver をクリックします。
- Instances タブの左端にある secrets-store.csi.k8s.io でドロップダウンメニューをクリックし、Delete ClusterCSIDriver をクリックします。
- プロンプトが表示されたら、Delete をクリックします。
- CSI ドライバー Pod が稼働していないことを確認します。
Secrets Store CSI Driver Operator をアンインストールします。
注記Operator をアンインストールする前に、まず CSI ドライバーを削除する必要があります。
- Ecosystem → Installed Operators をクリックします。
- Installed Operators ページで、スクロールするか、Search by name ボックスに "Secrets Store CSI" と入力して Operator を見つけ、クリックします。
- Installed Operators > Operator details ページの右上に表示される Actions → Uninstall Operator をクリックします。
Uninstall Operator ウィンドウでプロンプトが表示されたら、Uninstall ボタンをクリックして namespace から Operator を削除します。Operator によってクラスターにデプロイされたアプリケーションは手動でクリーンアップする必要があります。
アンインストールすると、Secrets Store CSI Driver Operator は Web コンソールの Installed Operators セクションにリストされなくなります。
2.9. 短期認証情報で Pod を認証する リンクのコピーリンクがクリップボードにコピーされました!
一部の OpenShift Container Platform クラスターでは、クラスター外で作成および管理される コンポーネントごとの短期セキュリティー認証情報 を使用します。該当するクラスター上のカスタマーワークロード内のアプリケーションは、クラスターが使用する短期認証方法を使用して認証できます。
2.9.1. ワークロードの短期認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションでこの認証方法を使用するには、次の手順を完了する必要があります。
- クラウドプロバイダーの Identity and Access Management (IAM) 設定で連携アイデンティティーサービスアカウントを作成します。
- クラウドプロバイダーのサービスアカウントに成り代わることができる OpenShift Container Platform サービスアカウントを作成します。
- アプリケーションに関連するワークロードを、OpenShift Container Platform サービスアカウントを使用するように設定します。
2.9.1.1. 環境とユーザーアクセスの要件 リンクのコピーリンクがクリップボードにコピーされました!
この認証方法を設定するには、次の要件を満たす必要があります。
- クラスターで 短期セキュリティー認証情報 を使用する必要があります。
-
cluster-adminロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる必要があります。 - クラウドプロバイダーコンソールでは、Identity and Access Management (IAM) および連携アイデンティティー設定の管理権限を持つユーザーとしてアクセスできる必要があります。
2.9.2. Google Cloud 上のアプリケーションに対する GCP Workload Identity 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
GCP Workload Identity 認証を使用する Google Cloud クラスター上のアプリケーションに短期認証を使用するには、次の手順を完了する必要があります。
2.9.2.1. フェデレーションされた Google Cloud サービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
Google Cloud コンソールを使用して、ワークロードアイデンティティープールとプロバイダーを作成し、OpenShift Container Platform サービスアカウントによる Google Cloud サービスアカウントの成り代わりを許可できます。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud コンソールにアクセスできる。
- アプリケーションで使用する Google Cloud プロジェクトが作成済みである。
手順
- Google Cloud プロジェクトの IAM 設定で、クラスターが GCP Workload Identity 認証に使用するアイデンティティープールとプロバイダーを特定します。
外部のアイデンティティーが Google Cloud サービスアカウントに成り代わるための権限を付与します。これらの権限により、OpenShift Container Platform サービスアカウントは連携ワークロードアイデンティティーとして機能できます。
詳細は、外部ワークロードによる Google Cloud リソースへのアクセスを許可する方法 に関する Google Cloud ドキュメントを参照してください。
2.9.2.2. Google Cloud 用の OpenShift Container Platform サービスアカウントを作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform のサービスアカウントを作成し、Google Cloud のサービスアカウントに成り代われるように、そのサービスアカウントにアノテーションを付けます。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- フェデレーションされた Google Cloud サービスアカウントを作成した。
-
cluster-adminロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる。 -
Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud CLI (
gcloud) にアクセスできる。
手順
次のコマンドを実行して、GCP Workload Identity Pod 認証に使用する OpenShift Container Platform サービスアカウントを作成します。
oc create serviceaccount <service_account_name>
$ oc create serviceaccount <service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスアカウントに成り代わるアイデンティティープロバイダーと Google Cloud サービスアカウントのアノテーションを付けます。
oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/workload-identity-provider": "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/workload-identity-provider": "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <project_number>、<identity_pool>、<identity_provider>を実際の設定の値に置き換えます。注記<project_number>には、プロジェクト ID ではなく、Google Cloud プロジェクト番号を指定します。次のコマンドを実行して、Google Cloud サービスアカウントのメールアドレスをサービスアカウントにアノテーションとして追加します。
oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/service-account-email": "<service_account_email>"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/service-account-email": "<service_account_email>"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <service_account_email>は、Google Cloud サービスアカウントのメールアドレスに置き換えます。ヒント通常、Google Cloud サービスアカウントのメールアドレスは、
<service_account_name>@<project_id>.iam.gserviceaccount.comという形式を使用します。次のコマンドを実行して、
direct外部認証情報設定注入モードを使用するようにサービスアカウントにアノテーションを付けます。oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/injection-mode": "direct"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/injection-mode": "direct"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow このモードでは、Workload Identity Federation Webhook コントローラーが Google Cloud 外部認証情報の設定を直接生成し、Pod に注入します。
Google Cloud CLI (
gcloud) を使用して次のコマンドを実行し、ワークロードの権限を指定します。gcloud projects add-iam-policy-binding <project_id> --member "<service_account_email>" --role "projects/<project_id>/roles/<role_for_workload_permissions>"
$ gcloud projects add-iam-policy-binding <project_id> --member "<service_account_email>" --role "projects/<project_id>/roles/<role_for_workload_permissions>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow <role_for_workload_permissions>をワークロードのロールに置き換えます。ワークロードに必要な権限を付与するロールを指定します。
検証
サービスアカウントの設定を検証するには、次のコマンドを実行して
ServiceAccountマニフェストを調べます。oc get serviceaccount <service_account_name>
$ oc get serviceaccount <service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例では、
service-a/app-xという OpenShift Container Platform サービスアカウントが、app-xという Google Cloud サービスアカウントに成り代わることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.9.2.3. GCP Workload Identity で認証するカスタマーワークロードのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションで短期認証を使用するには、関連する Pod が OpenShift Container Platform サービスアカウントを使用するように設定する必要があります。OpenShift Container Platform サービスアカウントを使用すると、Pod を変更する Webhook がトリガーされ、Google Cloud サービスアカウントへの成り代わりが可能になります。
次の例は、OpenShift Container Platform サービスアカウントを使用する Pod をデプロイし、設定を確認する方法を示しています。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- フェデレーションされた Google Cloud サービスアカウントを作成した。
- Google Cloud 用の OpenShift Container Platform サービスアカウントを作成した。
手順
GCP Workload Identity で認証する Pod を作成するには、次の例のようなデプロイメント YAML ファイルを作成します。
サンプルデプロイメント
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Container Platform サービスアカウントの名前を指定します。
次のコマンドを実行してデプロイメントファイルを適用します。
oc apply -f deployment.yaml
$ oc apply -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod が短期認証を使用していることを確認するには、次のコマンドを実行します。
oc get pods -o json | jq -r '.items[0].spec.containers[0].env[] | select(.name=="GOOGLE_APPLICATION_CREDENTIALS")'
$ oc get pods -o json | jq -r '.items[0].spec.containers[0].env[] | select(.name=="GOOGLE_APPLICATION_CREDENTIALS")'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{ "name": "GOOGLE_APPLICATION_CREDENTIALS", "value": "/var/run/secrets/workload-identity/federation.json" }{ "name": "GOOGLE_APPLICATION_CREDENTIALS", "value": "/var/run/secrets/workload-identity/federation.json" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow GOOGLE_APPLICATION_CREDENTIALS環境変数が存在する場合、それは GCP Workload Identity で認証する Pod を示しています。追加設定の詳細を確認するには、Pod 仕様を調べます。次の Pod 仕様の例は、Webhook によって変更される環境変数とボリュームフィールドを示しています。
direct注入モードの Pod 仕様例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10. 設定マップの作成および使用 リンクのコピーリンクがクリップボードにコピーされました!
以下のセクションでは、設定マップおよびそれらを作成し、使用する方法を定義します。
2.10.1. 設定マップについて リンクのコピーリンクがクリップボードにコピーされました!
多くのアプリケーションには、設定ファイル、コマンドライン引数、および環境変数の組み合わせを使用した設定が必要です。OpenShift Container Platform では、これらの設定アーティファクトは、コンテナー化されたアプリケーションを移植可能な状態に保つためにイメージコンテンツから切り離されます。
ConfigMap オブジェクトは、コンテナーを OpenShift Container Platform に依存させないようにする一方で、コンテナーに設定データを注入するメカニズムを提供します。設定マップは、個々のプロパティーなどの粒度の細かい情報や、設定ファイル全体または JSON Blob などの粒度の荒い情報を保存するために使用できます。
ConfigMap オブジェクトは、Pod で使用したり、コントローラーなどのシステムコンポーネントの設定データを保存するために使用できる設定データのキーと値のペアを保持します。以下に例を示します。
ConfigMap オブジェクト定義
イメージなどのバイナリーファイルから設定マップを作成する場合に、binaryData フィールドを使用できます。
設定データはさまざまな方法で Pod 内で使用できます。設定マップは以下を実行するために使用できます。
- コンテナーへの環境変数値の設定
- コンテナーのコマンドライン引数の設定
- ボリュームの設定ファイルの設定
ユーザーとシステムコンポーネントの両方が設定データを設定マップに保存できます。
設定マップはシークレットに似ていますが、機密情報を含まない文字列の使用をより効果的にサポートするように設計されています。
2.10.1.1. 設定マップの制限 リンクのコピーリンクがクリップボードにコピーされました!
設定マップは、コンテンツを Pod で使用される前に作成する必要があります。
コントローラーは、設定データが不足していても、その状況を許容して作成できます。ケースごとに設定マップを使用して設定される個々のコンポーネントを参照してください。
ConfigMap オブジェクトはプロジェクト内にあります。
それらは同じプロジェクトの Pod によってのみ参照されます。
Kubelet は、API サーバーから取得する Pod の設定マップの使用のみをサポートします。
これには、CLI を使用して作成された Pod、またはレプリケーションコントローラーから間接的に作成された Pod が含まれます。これには、OpenShift Container Platform ノードの --manifest-url フラグ、その --config フラグ、またはその REST API を使用して作成された Pod は含まれません (これらは Pod を作成する一般的な方法ではありません)。
2.10.2. OpenShift Container Platform Web コンソールでの設定マップの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールで設定マップを作成できます。
手順
クラスター管理者として設定マップを作成するには、以下を実行します。
-
Administrator パースペクティブで
Workloads→Config Mapsを選択します。 - ページの右上にある Create Config Map を選択します。
- 設定マップの内容を入力します。
- Create を選択します。
-
Administrator パースペクティブで
開発者として設定マップを作成するには、以下を実行します。
-
開発者パースペクティブで、
Config Mapsを選択します。 - ページの右上にある Create Config Map を選択します。
- 設定マップの内容を入力します。
- Create を選択します。
-
開発者パースペクティブで、
2.10.3. CLI を使用して設定マップを作成する リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドを使用して、ディレクトリー、特定のファイルまたはリテラル値から設定マップを作成できます。
手順
設定マップの作成
oc create configmap <configmap_name> [options]
$ oc create configmap <configmap_name> [options]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10.3.1. ディレクトリーからの設定マップの作成 リンクのコピーリンクがクリップボードにコピーされました!
--from-file フラグを使用すると、ディレクトリーから config map を作成できます。この方法では、ディレクトリー内の複数のファイルを使用して設定マップを作成できます。
ディレクトリー内の各ファイルは、config map にキーを設定するために使用されます。キーの名前はファイル名で、キーの値はファイルの内容です。
たとえば、次のコマンドは、example-files ディレクトリーの内容を使用して config map を作成します。
oc create configmap game-config --from-file=example-files/
$ oc create configmap game-config --from-file=example-files/
config map 内のキーを表示します。
oc describe configmaps game-config
$ oc describe configmaps game-config
出力例
マップにある 2 つのキーが、コマンドで指定されたディレクトリーのファイル名に基づいて作成されていることに気づかれることでしょう。これらのキーの内容は大きい可能性があるため、oc describe の出力にはキーの名前とそのサイズのみが表示されます。
前提条件
config map に追加するデータを含むファイルを含むディレクトリーが必要です。
次の手順では、サンプルファイル
game.propertiesおよびui.propertiesを使用します。cat example-files/game.properties
$ cat example-files/game.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat example-files/ui.properties
$ cat example-files/ui.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNiceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
次のコマンドを入力して、このディレクトリー内の各ファイルの内容を保持する設定マップを作成します。
oc create configmap game-config \ --from-file=example-files/$ oc create configmap game-config \ --from-file=example-files/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-oオプションを使用してオブジェクトのoc getコマンドを入力し、キーの値を表示します。oc get configmaps game-config -o yaml
$ oc get configmaps game-config -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10.3.2. ファイルから設定マップを作成する リンクのコピーリンクがクリップボードにコピーされました!
--from-file フラグを使用すると、ファイルから config map を作成できます。--from-file オプションを CLI に複数回渡すことができます。
key=value 式を --from-file オプションに渡すことで、ファイルからインポートされたコンテンツの config map に設定するキーを指定することもできます。以下に例を示します。
oc create configmap game-config-3 --from-file=game-special-key=example-files/game.properties
$ oc create configmap game-config-3 --from-file=game-special-key=example-files/game.properties
ファイルから設定マップを作成する場合、UTF8 以外のデータを破損することなく、UTF8 以外のデータを含むファイルをこの新規フィールドに配置できます。OpenShift Container Platform はバイナリーファイルを検出し、ファイルを MIME として透過的にエンコーディングします。サーバーでは、データを破損することなく MIME ペイロードがデコーディングされ、保存されます。
前提条件
config map に追加するデータを含むファイルを含むディレクトリーが必要です。
次の手順では、サンプルファイル
game.propertiesおよびui.propertiesを使用します。cat example-files/game.properties
$ cat example-files/game.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat example-files/ui.properties
$ cat example-files/ui.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNiceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
特定のファイルを指定して設定マップを作成します。
oc create configmap game-config-2 \ --from-file=example-files/game.properties \ --from-file=example-files/ui.properties$ oc create configmap game-config-2 \ --from-file=example-files/game.properties \ --from-file=example-files/ui.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow キーと値のペアを指定して、設定マップを作成します。
oc create configmap game-config-3 \ --from-file=game-special-key=example-files/game.properties$ oc create configmap game-config-3 \ --from-file=game-special-key=example-files/game.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-oオプションを使用してオブジェクトのoc getコマンドを入力し、ファイルからキーの値を表示します。oc get configmaps game-config-2 -o yaml
$ oc get configmaps game-config-2 -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -oオプションを使用してオブジェクトのoc getコマンドを入力し、key-value (キー/値) ペアからキーの値を表示します。oc get configmaps game-config-3 -o yaml
$ oc get configmaps game-config-3 -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- これは、先の手順で設定したキーです。
2.10.3.3. リテラル値からの設定マップの作成 リンクのコピーリンクがクリップボードにコピーされました!
設定マップにリテラル値を指定することができます。
--from-literal オプションは、リテラル値をコマンドラインに直接指定できる key=value 構文を取ります。
手順
リテラル値を指定して設定マップを作成します。
oc create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=charm$ oc create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=charmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-oオプションを使用してオブジェクトのoc getコマンドを入力し、キーの値を表示します。oc get configmaps special-config -o yaml
$ oc get configmaps special-config -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10.4. ユースケース: Pod で設定マップを使用する リンクのコピーリンクがクリップボードにコピーされました!
以下のセクションでは、Pod で ConfigMap オブジェクトを使用する際のいくつかのユースケースを説明します。
2.10.4.1. 設定マップの使用によるコンテナーでの環境変数の設定 リンクのコピーリンクがクリップボードにコピーされました!
config map を使用して、コンテナーで個別の環境変数を設定するために使用したり、有効な環境変数名を生成するすべてのキーを使用してコンテナーで環境変数を設定するために使用したりすることができます。
例として、以下の設定マップを見てみましょう。
2 つの環境変数を含む ConfigMap
1 つの環境変数を含む ConfigMap
手順
configMapKeyRefセクションを使用して、Pod のこのConfigMapのキーを使用できます。特定の環境変数を注入するように設定されている
Pod仕様のサンプルCopy to Clipboard Copied! Toggle word wrap Toggle overflow この Pod が実行されると、Pod のログには以下の出力が含まれます。
SPECIAL_LEVEL_KEY=very log_level=INFO
SPECIAL_LEVEL_KEY=very log_level=INFOCopy to Clipboard Copied! Toggle word wrap Toggle overflow
SPECIAL_TYPE_KEY=charm は出力例にリスト表示されません。optional: true が設定されているためです。
2.10.4.2. 設定マップを使用したコンテナーコマンドのコマンドライン引数の設定 リンクのコピーリンクがクリップボードにコピーされました!
config map を使用すると、Kubernetes 置換構文 $(VAR_NAME) を使用してコンテナー内のコマンドまたは引数の値を設定できます。
例として、以下の設定マップを見てみましょう。
手順
コンテナー内のコマンドに値を注入するには、環境変数として使用するキーを使用する必要があります。次に、
$(VAR_NAME)構文を使用してコンテナーのコマンドでそれらを参照することができます。特定の環境変数を注入するように設定されている Pod 仕様のサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 環境変数として使用するキーを使用して、コンテナーのコマンドに値を注入します。
この Pod が実行されると、test-container コンテナーで実行される echo コマンドの出力は以下のようになります。
very charm
very charmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10.4.3. config map の使用によるボリュームへのコンテンツの注入 リンクのコピーリンクがクリップボードにコピーされました!
config map を使用して、コンテンツをボリュームに注入することができます。
ConfigMap カスタムリソース (CR) の例
手順
config map を使用してコンテンツをボリュームに注入するには、2 つの異なるオプションを使用できます。
config map を使用してコンテンツをボリュームに注入するための最も基本的な方法は、キーがファイル名であり、ファイルの内容がキーの値になっているファイルでボリュームを設定する方法です。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- キーを含むファイル。
この Pod が実行されると、cat コマンドの出力は以下のようになります。
very
veryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 設定マップキーが投影されるボリューム内のパスを制御することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 設定マップキーへのパス。
この Pod が実行されると、cat コマンドの出力は以下のようになります。
very
veryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11. Pod への OCI イメージのマウント リンクのコピーリンクがクリップボードにコピーされました!
Open Container Initiative (OCI) 準拠のコンテナーイメージを Pod に直接マウントできます。これにより、イメージ内のファイルにコンテナーがアクセスできるようになり、ファイルをベースイメージに含める必要がなくなります。その結果、OCI 準拠のレジストリーでデータをホストすることが可能になります。
2.11.1. イメージボリューム リンクのコピーリンクがクリップボードにコピーされました!
イメージボリューム を使用すると、Open Container Initiative (OCI) 準拠のコンテナーイメージを Pod に直接マウントできます。これにより、イメージ内のファイルにコンテナーがアクセスできるようになり、ファイルをベースイメージに含める必要がなくなります。そのため、OCI 準拠のレジストリーでデータをホストすることが可能になります。
Pod でイメージボリュームを使用すると、OCI イメージおよびディストリビューション仕様標準を活用して、次のユースケースを含むいくつかのタスクを実行できます。
- Pod 内の複数のコンテナー間で設定ファイルを共有でき、ベースイメージにファイルを含める必要がなくなるため、セキュリティーリスクとイメージサイズが最小限に抑えられます。
- 人工知能環境では、イメージボリュームを使用して、モデルサーバーと一緒に、大規模言語モデルの重みまたは機械学習モデルの重みを Pod にマウントできます。この方法により、モデルサーバーのコンテナーイメージにモデルの重みを含めなくても、モデルの重みを効率的に提供できます。したがって、モデルの仕様とコンテンツを、それらを処理する実行可能ファイルから分離することができます。
- マルウェアスキャナー用のパブリックイメージを使用し、それをプライベートなマルウェアシグネチャーを含むボリュームにマウントできます。これにより、パブリックイメージの著作権によって許可されていない可能性があるベースイメージへのイメージの組み込みを行うことなく、それらのシグネチャーをロードできます。
イメージボリュームをマウントするには、Pod へのイメージボリュームの追加 で説明されているように、イメージへのパスを、オプションのプルポリシーとともに Pod 仕様に含めます。
2.11.2. Pod へのイメージボリュームの追加 リンクのコピーリンクがクリップボードにコピーされました!
Open Container Initiative (OCI) 準拠のコンテナーイメージをマウントするには、volume パラメーターを使用して、オプションのプルポリシーとともに Pod 仕様にイメージへのパスを含めます。Pod を直接作成することも、デプロイメントやレプリカセットなどの制御オブジェクトを使用することもできます。
手順
以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホストマシンで使用可能な OCI コンテナーイメージを指定します。
- 2
- イメージへのパスを指定します。
- 3
- プルポリシーを指定します。次のいずれかのオプションを使用します。
-
Alwaysの場合、kubelet は常にイメージのプルを試行します。プルが失敗すると、kubelet は Pod をFailedに設定します。 -
Neverの場合、kubelet はイメージをプルせず、ローカルイメージのみを使用します。イメージのいずれかのレイヤーがローカルに存在しない場合、またはそのイメージのマニフェストがまだキャッシュされていない場合、Pod がFailed状態になります。 -
IfNotPresentの場合、kubelet はイメージが存在しない場合にイメージをプルします。イメージが存在せずプルが失敗すると、Pod がFailedになります。これがデフォルトです。
-
以下のコマンドを実行して Pod を作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.12. Pod で外部リソースにアクセスするためのデバイスプラグインの使用 リンクのコピーリンクがクリップボードにコピーされました!
デバイスプラグインを使用すると、カスタムコードを作成せずに特定のデバイスタイプ (GPU、InfiniBand、またはベンダー固有の初期化およびセットアップを必要とする他の同様のコンピューティングリソース) を OpenShift Container Platform Pod で使用できます。
2.12.1. デバイスプラグインについて リンクのコピーリンクがクリップボードにコピーされました!
デバイスプラグインは、クラスター間でハードウェアデバイスを使用する際の一貫した移植可能なソリューションを提供します。デバイスプラグインは、拡張メカニズムを通じてこれらのデバイスをサポートし (これにより、コンテナーがこれらのデバイスを利用できるようになります)、デバイスのヘルスチェックを実施し、それらをセキュアに共有します。
OpenShift Container Platform はデバイスのプラグイン API をサポートしますが、デバイスプラグインコンテナーは個別のベンダーによりサポートされます。
デバイスプラグインは、特定のハードウェアリソースの管理を行う、ノード上で実行される gRPC サービスです (kubelet の外部にあります)。デバイスプラグインは以下のリモートプロシージャーコール (RPC) をサポートしている必要があります。
2.12.1.1. デバイスプラグインの例 リンクのコピーリンクがクリップボードにコピーされました!
デバイスプラグイン参照の実装を容易にするために、vendor/k8s.io/kubernetes/pkg/kubelet/cm/deviceplugin/device_plugin_stub.go という Device Manager コードのスタブデバイスプラグインを使用できます。
2.12.1.2. デバイスプラグインのデプロイ方法 リンクのコピーリンクがクリップボードにコピーされました!
- デーモンセットは、デバイスプラグインのデプロイメントに推奨される方法です。
- 起動時にデバイスプラグインは、Device Manager から RPC を送信するためにノードの /var/lib/kubelet/device-plugin/ での UNIX ドメインソケットの作成を試行します。
- デバイスプラグインは、ソケットの作成のほかにもハードウェアリソース、ホストファイルシステムへのアクセスを管理する必要があるため、特権付きセキュリティーコンテキストで実行される必要があります。
- デプロイメント手順の詳細は、それぞれのデバイスプラグインの実装で確認できます。
2.12.2. Device Manager について リンクのコピーリンクがクリップボードにコピーされました!
Device Manager は、特殊なノードのハードウェアリソースを、デバイスプラグインとして知られるプラグインを使用して公開するメカニズムを提供します。
特殊なハードウェアは、アップストリームのコード変更なしに公開できます。
OpenShift Container Platform はデバイスのプラグイン API をサポートしますが、デバイスプラグインコンテナーは個別のベンダーによりサポートされます。
Device Manager はデバイスを 拡張リソース として公開します。ユーザー Pod は、他の 拡張リソース を要求するために使用されるのと同じ 制限/要求 メカニズムを使用して Device Manager で公開されるデバイスを消費できます。
使用開始時に、デバイスプラグインは /var/lib/kubelet/device-plugins/kubelet.sock の Register を起動して Device Manager に自己登録し、Device Manager の要求を提供するために /var/lib/kubelet/device-plugins/<plugin>.sock で gRPC サービスを起動します。
Device Manager は、新規登録要求の処理時にデバイスプラグインサービスで ListAndWatch リモートプロシージャーコール (RPC) を起動します。応答として Device Manager は gRPC ストリームでプラグインから デバイス オブジェクトの一覧を取得します。Device Manager はプラグインからの新規の更新の有無についてストリームを監視します。プラグイン側では、プラグインはストリームを開いた状態にし、デバイスの状態に変更があった場合には常に新規デバイスの一覧が同じストリーム接続で Device Manager に送信されます。
新しい Pod の受付リクエストの処理中に、Kubelet が要求された Extended Resources をデバイス割り当てのためにデバイスマネージャーに渡します。Device Manager はそのデータベースにチェックインして対応するプラグインが存在するかどうかを確認します。プラグインが存在し、ローカルキャッシュと共に割り当て可能な空きデバイスがある場合、Allocate RPC がその特定デバイスのプラグインで起動します。
さらにデバイスプラグインは、ドライバーのインストール、デバイスの初期化、およびデバイスのリセットなどの他のいくつかのデバイス固有の操作も実行できます。これらの機能は実装ごとに異なります。
2.12.3. Device Manager の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Device Manager を有効にし、デバイスプラグインを実装してアップストリームのコード変更なしに特殊なハードウェアを公開できるようにします。
Device Manager は、特殊なノードのハードウェアリソースを、デバイスプラグインとして知られるプラグインを使用して公開するメカニズムを提供します。
次のコマンドを入力して、設定するノードタイプの静的な
MachineConfigPoolCRD に関連付けられたラベルを取得します。以下のいずれかの手順を実行します。マシン設定を表示します。
oc describe machineconfig <name>
# oc describe machineconfig <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc describe machineconfig 00-worker
# oc describe machineconfig 00-workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name: 00-worker Namespace: Labels: machineconfiguration.openshift.io/role=worker
Name: 00-worker Namespace: Labels: machineconfiguration.openshift.io/role=worker1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Device Manager に必要なラベル。
手順
設定変更のためのカスタムリソース (CR) を作成します。
Device Manager CR の設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Device Manager を作成します。
oc create -f devicemgr.yaml
$ oc create -f devicemgr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
kubeletconfig.machineconfiguration.openshift.io/devicemgr created
kubeletconfig.machineconfiguration.openshift.io/devicemgr createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Device Manager が実際に有効にされるように、/var/lib/kubelet/device-plugins/kubelet.sock がノードで作成されていることを確認します。これは、Device Manager の gRPC サーバーが新規プラグインの登録がないかどうかリッスンする UNIX ドメインソケットです。このソケットファイルは、Device Manager が有効にされている場合にのみ Kubelet の起動時に作成されます。
2.13. Pod スケジューリングの決定に Pod の優先順位を含める リンクのコピーリンクがクリップボードにコピーされました!
クラスターで Pod の優先順位およびプリエンプションを有効にできます。Pod の優先度は、他の Pod との比較した Pod の重要度を示し、その優先度に基づいて Pod をキューに入れます。Pod のプリエンプションは、クラスターが優先順位の低い Pod の退避またはプリエンプションを実行することを可能にするため、適切なノードに利用可能な領域がない場合に優先順位のより高い Pod をスケジュールできます。Pod の優先順位は Pod のスケジューリングの順序にも影響を与え、リソース不足の場合のノード上での退避の順序に影響を与えます。
優先順位およびプリエンプションを使用するには、Pod の相対的な重みを定義する優先順位クラスを作成します。次に Pod 仕様で優先順位クラスを参照し、スケジューリングの重みを適用します。
2.13.1. Pod の優先順位について リンクのコピーリンクがクリップボードにコピーされました!
Pod の優先順位およびプリエンプション機能を使用する場合、スケジューラーは優先順位に基づいて保留中の Pod を順序付け、保留中の Pod はスケジューリングのキューで優先順位のより低い他の保留中の Pod よりも前に置かれます。その結果、より優先順位の高い Pod は、スケジューリングの要件を満たす場合に優先順位の低い Pod よりも早くスケジュールされる可能性があります。Pod をスケジュールできない場合、スケジューラーは引き続き他の優先順位の低い Pod をスケジュールします。
2.13.1.1. Pod の優先順位クラス リンクのコピーリンクがクリップボードにコピーされました!
Pod には優先順位クラスを割り当てることができます。これは、名前から優先順位の整数値へのマッピングを定義する namespace を使用していないオブジェクトです。値が高いと優先順位が高くなります。
優先順位およびプリエンプションは、1000000000 (10 億) 以下の 32 ビットの整数値を取ることができます。プリエンプションや退避を実行すべきでない Critical Pod 用に 10 億以上の数値を予約する必要があります。デフォルトで、OpenShift Container Platform には 2 つの予約された優先順位クラスがあり、これらは重要なシステム Pod で保証されたスケジューリングが適用されるために使用されます。
oc get priorityclasses
$ oc get priorityclasses
出力例
NAME VALUE GLOBAL-DEFAULT AGE system-node-critical 2000001000 false 72m system-cluster-critical 2000000000 false 72m openshift-user-critical 1000000000 false 3d13h cluster-logging 1000000 false 29s
NAME VALUE GLOBAL-DEFAULT AGE
system-node-critical 2000001000 false 72m
system-cluster-critical 2000000000 false 72m
openshift-user-critical 1000000000 false 3d13h
cluster-logging 1000000 false 29s
system-node-critical: この優先順位クラスには 2000001000 の値があり、ノードから退避すべきでないすべての Pod に使用されます。この優先順位クラスを持つ Pod の例としては、
ovnkube-nodeなどがあります。数多くの重要なコンポーネントには、デフォルトでsystem-node-criticalの優先順位クラスが含まれます。以下は例になります。- master-api
- master-controller
- master-etcd
- ovn-kubernetes
- sync
system-cluster-critical: この優先順位クラスには 2000000000 (20 億) の値があり、クラスターに重要な Pod に使用されます。この優先順位クラスの Pod は特定の状況でノードから退避される可能性があります。たとえば、
system-node-critical優先順位クラスで設定される Pod が優先される可能性があります。この場合でも、この優先順位クラスではスケジューリングが保証されます。この優先順位クラスを持つ可能性のある Pod の例として、fluentd、descheduler などのアドオンコンポーネントなどがあります。数多くの重要なコンポーネントには、デフォルトでsystem-cluster-critical優先順位クラスが含まれます。以下はその一例です。- fluentd
- metrics-server
- descheduler
-
openshift-user-critical:
priorityClassNameフィールドを、リソース消費をバインドできず、予測可能なリソース消費動作がない重要な Pod で使用できます。openshift-monitoringおよびopenshift-user-workload-monitoringnamespace 下にある Prometheus Pod は、openshift-user-criticalpriorityClassNameを使用します。モニタリングのワークロードはsystem-criticalを最初のpriorityClassとして使用しますが、これにより、モニタリング時にメモリーが過剰に使用され、ノードが退避できない問題が発生します。その結果、モニタリングの優先順位が下がり、スケジューラーに柔軟性が与えられ、重要なノードの動作を維持するために重いワークロード発生します。 - cluster-logging: この優先順位は、Fluentd Pod が他のアプリケーションより優先してノードにスケジュールされるようにするために Fluentd で使用されます。
2.13.1.2. Pod の優先順位名 リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上の優先順位クラスを準備した後に、Pod 仕様に優先順位クラス名を指定する Pod を作成できます。優先順位のアドミッションコントローラーは、優先順位クラス名フィールドを使用して優先順位の整数値を設定します。名前付きの優先順位クラスが見つからない場合、Pod は拒否されます。
2.13.2. Pod のプリエンプションについて リンクのコピーリンクがクリップボードにコピーされました!
開発者が Pod を作成する場合、Pod はキューに入れられます。開発者が Pod の優先順位またはプリエンプションを設定している場合、スケジューラーはキューから Pod を選択し、Pod をノードにスケジュールしようとします。スケジューラーが Pod に指定されたすべての要件を満たす適切なノードに領域を見つけられない場合、プリエンプションロジックが保留中の Pod にトリガーされます。
スケジューラーがノードで 1 つ以上の Pod のプリエンプションを実行する場合、優先順位の高い Pod 仕様の nominatedNodeName フィールドは、nodename フィールドと共にノードの名前に設定されます。スケジューラーは nominatedNodeName フィールドを使用して Pod の予約されたリソースを追跡し、またクラスターのプリエンプションに関する情報をユーザーに提供します。
スケジューラーが優先順位の低い Pod のプリエンプションを実行した後に、スケジューラーは Pod のグレースフルな終了期間を許可します。スケジューラーが優先順位の低い Pod の終了を待機する間に別のノードが利用可能になると、スケジューラーはそのノードに優先順位の高い Pod をスケジュールできます。その結果、Pod 仕様の nominatedNodeName フィールドおよび nodeName フィールドが異なる可能性があります。
さらに、スケジューラーがノード上で Pod のプリエンプションを実行し、終了を待機している場合で、保留中の Pod よりも優先順位の高い Pod をスケジュールする必要がある場合、スケジューラーは代わりに優先順位の高い Pod をスケジュールできます。その場合、スケジューラーは保留中の Pod の nominatedNodeName をクリアし、その Pod を他のノードの対象とすることができます。
プリエンプションは、ノードから優先順位の低いすべての Pod を削除する訳ではありません。スケジューラーは、優先順位の低い Pod の一部を削除して保留中の Pod をスケジュールできます。
スケジューラーは、保留中の Pod をノードにスケジュールできる場合にのみ、Pod のプリエンプションを実行するノードを考慮します。
2.13.2.1. プリエンプションを実行しない優先順位クラス リンクのコピーリンクがクリップボードにコピーされました!
プリエンプションポリシーが Never に設定された Pod は優先順位の低い Pod よりも前のスケジューリングキューに置かれますが、他の Pod のプリエンプションを実行することはできません。スケジュールを待機しているプリエンプションを実行しない Pod は、十分なリソースが解放され、これがスケジュールされるまでスケジュールキュー内に留まります。他の Pod などのプリエンプションを実行しない Pod はスケジューラーのバックオフの対象になります。つまり、スケジューラーがこれらの Pod のスケジュールの試行に成功しない場合、低頻度で再試行されるため、優先順位の低い他の Pod をそれらの Pod よりも前にスケジュールできます。
プリエンプションを実行しない Pod には、他の優先順位の高い Pod が依然としてプリエンプションを実行できます。
2.13.2.2. Pod プリエンプションおよび他のスケジューラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod の優先順位およびプリエンプションを有効にする場合、他のスケジューラー設定を考慮します。
- Pod の優先順位および Pod の Disruption Budget (停止状態の予算)
- Pod の Disruption Budget (停止状態の予算) は一度に稼働している必要のあるレプリカの最小数またはパーセンテージを指定します。Pod の Disruption Budget (停止状態の予算) を指定する場合、OpenShift Container Platform は、Best Effort レベルで Pod のプリエンプションを実行する際にそれらを適用します。スケジューラーは、Pod の Disruption Budget (停止状態の予算) に違反しない範囲で Pod のプリエンプションを試行します。該当する Pod が見つからない場合には、Pod の Disruption Budget (停止状態の予算) の要件を無視して優先順位の低い Pod のプリエンプションが実行される可能性があります。
- Pod の優先順位およびアフィニティー
- Pod のアフィニティーは、新規 Pod が同じラベルを持つ他の Pod と同じノードにスケジュールされることを要求します。
保留中の Pod にノード上の 1 つ以上の優先順位の低い Pod との Pod 間のアフィニティーがある場合、スケジューラーはアフィニティーの要件を違反せずに優先順位の低い Pod のプリエンプションを実行することはできません。この場合、スケジューラーは保留中の Pod をスケジュールするための別のノードを探します。ただし、スケジューラーが適切なノードを見つけることは保証できず、保留中の Pod がスケジュールされない可能性があります。
この状態を防ぐには、優先順位が等しい Pod との Pod のアフィニティーの設定を慎重に行ってください。
2.13.2.3. プリエンプションが実行された Pod のグレースフルな終了 リンクのコピーリンクがクリップボードにコピーされました!
Pod のプリエンプションの実行中、スケジューラーは Pod のグレースフルな終了期間が期限切れになるのを待機します。その後、Pod は機能を完了し、終了します。Pod がこの期間後も終了しない場合、スケジューラーは Pod を強制終了します。このようにグレースフルな終了期間が原因で、スケジューラーによる Pod のプリエンプションの実行時と保留中の Pod のノードへのスケジュール時に時間差が出ます。
このギャップを最小限に抑えるには、優先度の低い Pod に対してグレースフルな終了期間を短く設定します。
2.13.3. 優先順位およびプリエンプションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod 仕様で priorityClassName を使用して優先順位クラスオブジェクトを作成し、Pod を優先順位に関連付けることで、Pod の優先度およびプリエンプションを適用できます。
優先クラスを既存のスケジュール済み Pod に直接追加することはできません。
手順
優先順位およびプリエンプションを使用するようにクラスターを設定するには、以下を実行します。
1 つ以上の優先順位クラスを作成します。
以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 優先順位クラスオブジェクトの名前です。
- 2
- オブジェクトの優先順位の値です。
- 3
- オプション: この優先クラスがプリエンプティングであるか非プリエンプティングであるかを指定します。プリエンプションポリシーは、デフォルトで
PreemptLowerPriorityに設定されます。これにより、その優先順位クラスの Pod はそれよりも優先順位の低い Pod のプリエンプションを実行できます。プリエンプションポリシーがNeverに設定される場合、その優先順位クラスの Pod はプリエンプションを実行しません。 - 4
- オプション: 優先クラス名が指定されていない Pod にこの優先クラスを使用するかどうかを指定します。このフィールドはデフォルトで
falseです。globalDefaultがtrueに設定される 1 つの優先順位クラスのみがクラスター内に存在できます。globalDefault:trueが設定された優先順位クラスがない場合、優先順位クラス名が設定されていない Pod の優先順位はゼロになります。globalDefault:trueが設定された優先順位クラスを追加すると、優先順位クラスが追加された後に作成された Pod のみがその影響を受け、これによって既存 Pod の優先順位は変更されません。 - 5
- オプション: 開発者がこの優先クラスで使用する必要がある Pod を説明します。任意の文字列を入力します。
優先クラスを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
優先クラスの名前を含む Pod 仕様を作成します。
以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この Pod で使用する優先順位クラスを指定します。
Pod を作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
優先順位の名前は Pod 設定または Pod テンプレートに直接追加できます。
2.14. ノードセレクターの使用による特定ノードへの Pod の配置 リンクのコピーリンクがクリップボードにコピーされました!
ノードセレクター は、キーと値のペアのマップを指定します。ルールは、ノード上のカスタムラベルと Pod で指定されたセレクターを使用して定義されます。
Pod がノードで実行する要件を満たすには、Pod はノードのラベルとして示されるキーと値のペアを持っている必要があります。
同じ Pod 設定でノードのアフィニティーとノードセレクターを使用している場合、以下の重要な考慮事項を参照してください。
2.14.1. ノードセレクターの使用による Pod 配置の制御 リンクのコピーリンクがクリップボードにコピーされました!
Pod でノードセレクターを使用し、ノードでラベルを使用して、Pod がスケジュールされる場所を制御できます。ノードセレクターにより、OpenShift Container Platform は一致するラベルが含まれるノード上に Pod をスケジュールします。
ラベルをノード、コンピュートマシンセット、またはマシン設定に追加します。コンピュートマシンセットにラベルを追加すると、ノードまたはマシンが停止した場合に、新規ノードにそのラベルが追加されます。ノードまたはマシン設定に追加されるラベルは、ノードまたはマシンが停止すると維持されません。
ノードセレクターを既存 Pod に追加するには、ノードセレクターを ReplicaSet オブジェクト、DaemonSet オブジェクト、StatefulSet オブジェクト、Deployment オブジェクト、または DeploymentConfig オブジェクトなどの Pod の制御オブジェクトに追加します。制御オブジェクト下の既存 Pod は、一致するラベルを持つノードで再作成されます。新規 Pod を作成する場合、ノードセレクターを Pod 仕様に直接追加できます。Pod に制御オブジェクトがない場合は、Pod を削除し、Pod 仕様を編集して、Pod を再作成する必要があります。
ノードセレクターを既存のスケジュールされている Pod に直接追加することはできません。
前提条件
ノードセレクターを既存 Pod に追加するには、Pod の制御オブジェクトを判別します。たとえば、router-default-66d5cf9464-m2g75 Pod は router-default-66d5cf9464 レプリカセットによって制御されます。
oc describe pod router-default-66d5cf9464-7pwkc
$ oc describe pod router-default-66d5cf9464-7pwkc
出力例
Web コンソールでは、Pod YAML の ownerReferences に制御オブジェクトをリスト表示します。
手順
コンピュートマシンセットを使用するか、ノードを直接編集してラベルをノードに追加します。
MachineSetオブジェクトを使用して、ノードの作成時にコンピュートマシンセットによって管理されるノードにラベルを追加します。以下のコマンドを実行してラベルを
MachineSetオブジェクトに追加します。oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api$ oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントあるいは、以下の YAML を適用してコンピュートマシンセットにラベルを追加することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc editコマンドを使用して、ラベルがMachineSetオブジェクトに追加されていることを確認します。以下に例を示します。
oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow MachineSetオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ラベルをノードに直接追加します。
ノードの
Nodeオブジェクトを編集します。oc label nodes <name> <key>=<value>
$ oc label nodes <name> <key>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、ノードにラベルを付けるには、以下を実行します。
oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=east
$ oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=eastCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントあるいは、以下の YAML を適用してノードにラベルを追加することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ラベルがノードに追加されていることを確認します。
oc get nodes -l type=user-node,region=east
$ oc get nodes -l type=user-node,region=eastCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS ROLES AGE VERSION ip-10-0-142-25.ec2.internal Ready worker 17m v1.33.4
NAME STATUS ROLES AGE VERSION ip-10-0-142-25.ec2.internal Ready worker 17m v1.33.4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
一致するノードセレクターを Pod に追加します。
ノードセレクターを既存 Pod および新規 Pod に追加するには、ノードセレクターを Pod の制御オブジェクトに追加します。
ラベルを含む
ReplicaSetオブジェクトのサンプルCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ノードセレクターを追加します。
ノードセレクターを特定の新規 Pod に追加するには、セレクターを
Podオブジェクトに直接追加します。ノードセレクターを持つ
Podオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ノードセレクターを既存のスケジュールされている Pod に直接追加することはできません。
2.15. Pod への GPU の割り当て リンクのコピーリンクがクリップボードにコピーされました!
属性ベースの GPU 割り当てを使用すると、OpenShift Container Platform でのグラフィックスプロセッシングユニット (GPU) リソース割り当てを細かく制御できるようになります。これにより、製品名、GPU メモリー容量、計算能力、ベンダー名、ドライバーバージョンなどの特定のデバイス属性に基づいて Pod が GPU を要求できるようになります。これらの属性は、サードパーティーの Dynamic Resource Allocation (DRA) ドライバーによって公開されます。
属性ベースの GPU 割り当ては、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat テクノロジープレビュー機能のサポート範囲の詳細は、次のリンクを参照してください。
2.15.1. ワークロードへの GPU の割り当てについて リンクのコピーリンクがクリップボードにコピーされました!
属性ベースの GPU 割り当てを使用すると、Pod が特定のデバイス属性に基づいてグラフィックスプロセッシングユニット (GPU) を要求できるようになります。これにより、Pod が必要とする指定どおりの GPU が各 Pod に割り当てられます。
属性ベースのリソース割り当てを使用するには、Dynamic Resource Allocation (DRA) ドライバーをインストールする必要があります。DRA ドライバーは、クラスター内の各ノードで動作し、そのノードのハードウェアとの橋渡しをするサードパーティーアプリケーションです。
DRA ドライバーは、以下の属性を含むいくつかの GPU デバイス属性をアドバタイズします。これらは OpenShift Container Platform が GPU の正確な選択に使用できる属性です。
- 製品名
- Pod は、パフォーマンス要件やアプリケーションとの互換性に基づいて、正確な GPU モデルを要求できます。これにより、ワークロードがタスクに最適なハードウェアを活用できるようになります。
- GPU メモリー容量
- Pod は、8 GB、16 GB、40 GB など、最小または最大メモリー容量を持つ GPU を要求できます。これは、大規模な AI モデルのトレーニングやデータ処理など、メモリーを大量に消費するワークロードに役立ちます。この属性を使用すると、リソースの過剰な割り当てや不十分な使用を防ぎながら、アプリケーションがメモリーの要件に合わせて GPU を確保できるようになります。
- 計算能力
- Pod は、サポートされている CUDA バージョンなど、GPU の計算能力に基づいて GPU を要求できます。Pod は、アプリケーションのフレームワークと互換性のある GPU をターゲットにして、最適化された処理能力を活用できます。
- 電力と熱のプロファイル
- Pod は、電力使用量や熱特性に基づいて GPU を要求できます。これにより、電力や温度の影響を受けやすいアプリケーションを効率的に動作させることができます。これは、電力や冷却に制約がある高密度環境で特に役立ちます。
- デバイス ID とベンダー ID
- Pod は、GPU のハードウェアの詳細に基づいて GPU を要求できます。これにより、特定のベンダーまたはデバイスタイプを必要とするアプリケーションが、ターゲットを絞った要求を行えるようになります。
- ドライバーバージョン
- Pod は、特定のドライバーバージョンを実行する GPU を要求できます。これにより、アプリケーションの依存関係との互換性が確保され、GPU 機能へのアクセスが最大化されます。
2.15.2. GPU 割り当てオブジェクトについて リンクのコピーリンクがクリップボードにコピーされました!
属性ベースの GPU 割り当ては、次のオブジェクトを使用して、グラフィックスプロセッシングユニット (GPU) の主要な割り当て機能を提供します。これらの API の種類は、すべて resource.k8s.io/v1beta2 API グループに含まれています。
- デバイスクラス
デバイスクラスは、Pod が要求できるデバイスのカテゴリーと、要求時に特定のデバイス属性を選択する方法です。一部のデバイスドライバーには独自のデバイスクラスが含まれています。管理者がデバイスクラスを作成することもできます。デバイスクラスにはデバイスセレクターが含まれています。デバイスセレクターは、デバイスが要求を満たす場合に true と評価される Common Expression Language (CEL) 式です。
次の例の
DeviceClassオブジェクトは、driver.example.comデバイスドライバーによって管理されるすべてのデバイスを選択します。デバイスクラスオブジェクトの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - リソーススライス
- 各ノードの Dynamic Resource Allocation (DRA) ドライバーは、クラスター内の リソーススライス を作成および管理します。リソーススライスは、ノードに割り当てられている 1 つ以上の GPU リソースを表します。リソースクレームが作成され、Pod で使用されると、OpenShift Container Platform はリソーススライスを使用して、要求されたリソースにアクセスできるノードを探します。リソースクレームに適したリソーススライスが見つかると、OpenShift Container Platform のスケジューラーが、割り当ての詳細を使用してリソースクレームを更新し、リソースクレームにリソースを割り当て、リソースにアクセスできるノードに Pod をスケジュールします。
- リソースクレームテンプレート
クラスターの管理者と運用担当者は、特定のデバイスクラスから GPU を要求するための リソースクレームテンプレート を作成できます。リソースクレームテンプレートは、それぞれ分離された類似のリソースへのアクセスを Pod に提供します。OpenShift Container Platform は、リソースクレームテンプレートを使用して、Pod のリソースクレームを生成します。OpenShift Container Platform がテンプレートから生成する各リソースクレームは、特定の Pod にバインドされます。Pod が終了すると、OpenShift Container Platform は対応するリソースクレームを削除します。
次のリソースクレームテンプレートの例では、
example-device-classデバイスクラス内のデバイスを要求します。リソースクレームテンプレートオブジェクトの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - リソースクレーム
管理者と運用担当者は、特定のデバイスクラスから GPU を要求する リソースクレーム を作成できます。リソースクレームは、GPU を複数の Pod で共有できる点で、リソースクレームテンプレートとは異なります。また、要求元の Pod が終了しても、リソースクレームは削除されません。
次のリソースクレームテンプレートの例では、CEL 式を使用して、
example-device-classデバイスクラス内の特定のサイズを持つ特定のデバイスを要求します。リソースクレームオブジェクトの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
リソースクレーム、リソースクレームテンプレートの設定の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。
Pod にリソースクレームを追加する方法は、「Pod へのリソースクレームの追加」を参照してください。
次のステップ
2.15.3. Pod へのリソースクレームの追加 リンクのコピーリンクがクリップボードにコピーされました!
属性ベースの GPU 割り当てでは、Pod 内のコンテナーに対して特定のグラフィックスプロセッシングユニット (GPU) を要求できるようにするために、リソースクレームとリソースクレームテンプレートを使用します。リソースクレームは複数のコンテナーで使用できますが、リソースクレームテンプレートは 1 つのコンテナーでのみ使用できます。詳細は、関連情報 セクションの「デバイス属性を使用したデバイス割り当ての設定について」を参照してください。
次の手順の例では、特定の GPU を container0 に割り当てるリソースクレームテンプレートと、container1 と container2 間で GPU を共有するリソースクレームを作成します。
前提条件
- Dynamic Resource Allocation (DRA) ドライバーがインストールされている。DRA の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。
- リソーススライスが作成されている。
- リソースクレームやリソースクレームテンプレートが作成されている。
clusterという名前のFeatureGateCR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にした。FeatureGateCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必要な機能を有効にします。
警告クラスターで
TechPreviewNoUpgrade機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。
手順
次のような YAML ファイルを作成して Pod を作成します。
リソースを要求する Pod の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CRD オブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod のリソースクレームを設定する方法の詳細は、Dynamic Resource Allocation (Kubernetes ドキュメント) を参照してください。
2.16. Run Once Duration Override Operator リンクのコピーリンクがクリップボードにコピーされました!
2.16.1. Run Once Duration Override Operator の概要 リンクのコピーリンクがクリップボードにコピーされました!
Run Once Duration Override Operator を使用して、1 回実行 Pod をアクティブにできる最大時間制限を指定できます。
2.16.1.1. Run Once Duration Override Operator について リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は 1 回実行 (run-once) Pod を使用して Pod のデプロイやビルドの実行などのタスクを実行します。1 回実行 (run-once) Pod は、RestartPolicy が Never または OnFailure の Pod です。
クラスター管理者は Run Once Duration Override Operator を使用して、1 回実行 Pod がアクティブになる時間を強制的に制限できます。期限が切れると、クラスターはそれらの Pod をアクティブに終了しようとします。このような制限を設ける主な理由は、ビルドなどのタスクが長い時間にわたって実行されることを防ぐことにあります。
Run Once Duration Override Operator から run-once duration override を 1 回実行 (run-once) Pod に適用するには、該当する各 namespace でそれを有効にする必要があります。
1 回実行 Pod と Run Once Duration Override Operator の両方に activeDeadlineSeconds 値が設定されている場合、2 つの値のうち小さい方が使用されます。
Run Once Duration Override Operator は、HyperShift Operator によって管理されるクラスターにインストールすることはできません。
2.16.2. Run Once Duration Override Operator のリリースノート リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は Run Once Duration Override Operator を使用して、1 回実行 Pod がアクティブになる時間を強制的に制限できます。制限時間が経過すると、クラスターは 1 回実行 Pod を終了しようとします。このような制限を設ける主な理由は、ビルドなどのタスクが長い時間にわたって実行されることを防ぐことにあります。
Run Once Duration Override Operator から run-once duration override を 1 回実行 (run-once) Pod に適用するには、該当する各 namespace でそれを有効にする必要があります。
これらのリリースノートでは、OpenShift Container Platform の Run Once Duration Override Operator の開発を追跡します。
Run Once Duration Override Operator の概要は、Run Once Duration Override Operator について を参照してください。
2.16.2.1. Run Once Duration Override Operator 1.3.1 リンクのコピーリンクがクリップボードにコピーされました!
発行日: 2025 年 10 月 29 日
Run Once Duration Override Operator 1.3.1 に関しては、アドバイザリー RHBA-2025:19272 が利用可能です。
2.16.2.1.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
- この Run Once Duration Override Operator リリースでは、Kubernetes のバージョンが 1.33 に更新されます。
2.16.2.1.2. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- Run Once Duration Override Operator のこのリリースでは、いくつかの Common Vulnerabilities and Exposures (CVE) に対処しています。
2.16.2.2. Run Once Duration Override Operator 1.3.0 リンクのコピーリンクがクリップボードにコピーされました!
発行日: 2025 年 7 月 9 日
Run Once Duration Override Operator 1.3.0 に関しては、アドバイザリー RHBA-2025-10725 が利用可能です。
2.16.2.2.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- Run Once Duration Override Operator のこのリリースでは、いくつかの Common Vulnerabilities and Exposures (CVE) に対処しています。
2.16.3. 1 回実行 Pod のアクティブな期限をオーバーライドする リンクのコピーリンクがクリップボードにコピーされました!
Run Once Duration Override Operator を使用して、1 回実行 Pod をアクティブにできる最大時間制限を指定できます。namespace で Run Once Duration Override Operator を有効にすると、その namespace で今後作成または更新されるすべての 1 回実行 (run-once) Pod の activeDeadlineSeconds フィールドが、Run Once Duration Override Operator で指定された値に設定されます。
1 回実行 Pod と Run Once Duration Override Operator の両方に activeDeadlineSeconds 値が設定されている場合、2 つの値のうち小さい方が使用されます。
2.16.3.1. Run Once Duration Override Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して、Run Once Duration Override Operator をインストールできます。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
手順
- OpenShift Container Platform Web コンソールにログインします。
Run Once Duration Override Operator に必要な namespace を作成します。
- Administration → Namespaces に移動し、Create Namespace をクリックします。
-
Name フィールドに
openshift-run-once-duration-override-operatorと入力し、Create をクリックします。
Run Once Duration Override Operator をインストールします。
- Ecosystem → Software Catalog に移動します。
- フィルターボックスに Run Once Duration Override Operator と入力します。
- Run Once Duration Override Operator を選択し、Install をクリックします。
Install Operator ページで以下を行います。
- Update channel は stable に設定されており、これにより、Run Once Duration Override Operator の最新の安定リリースがインストールされます。
- A specific namespace on the cluster を選択します。
- openshift-run-once-duration-override-operator の下のドロップダウンメニューから openshift-run-once-duration-override-operator を選択します。
Update approval strategy を選択します。
- Automatic ストラテジーを使用すると、新しいバージョンが利用可能になったときに、Operator Lifecycle Manager (OLM) によって Operator を自動的に更新できます。
- Manual ストラテジーには、Operator の更新を承認するための適切な認証情報を持つユーザーが必要です。
- Install をクリックします。
RunOnceDurationOverrideインスタンスを作成します。- Ecosystem → Installed Operators ページから、Run Once Duration Override Operator をクリックします。
- Run Once Duration Override タブを選択し、Create RunOnceDurationOverride をクリックします。
必要に応じて設定を編集します。
runOnceDurationOverrideセクションで、必要に応じてspec.activeDeadlineSeconds値を更新できます。事前定義された値は3600秒、つまり 1 時間です。- Create をクリックします。
検証
- OpenShift CLI にログインします。
すべての Pod が作成され、適切に実行されていることを確認します。
oc get pods -n openshift-run-once-duration-override-operator
$ oc get pods -n openshift-run-once-duration-override-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE run-once-duration-override-operator-7b88c676f6-lcxgc 1/1 Running 0 7m46s runoncedurationoverride-62blp 1/1 Running 0 41s runoncedurationoverride-h8h8b 1/1 Running 0 41s runoncedurationoverride-tdsqk 1/1 Running 0 41s
NAME READY STATUS RESTARTS AGE run-once-duration-override-operator-7b88c676f6-lcxgc 1/1 Running 0 7m46s runoncedurationoverride-62blp 1/1 Running 0 41s runoncedurationoverride-h8h8b 1/1 Running 0 41s runoncedurationoverride-tdsqk 1/1 Running 0 41sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.16.3.2. namespace での run-once duration override の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Run Once Duration Override Operator から run-once duration override を 1 回実行 (run-once) Pod に適用するには、該当する各 namespace でそれを有効にする必要があります。
前提条件
- Run Once Duration Override Operator がインストールされます。
手順
- OpenShift CLI にログインします。
ラベルを追加して、run-once duration override を有効にします。
oc label namespace <namespace> \ runoncedurationoverrides.admission.runoncedurationoverride.openshift.io/enabled=true$ oc label namespace <namespace> \1 runoncedurationoverrides.admission.runoncedurationoverride.openshift.io/enabled=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- run-once duration override を有効にする namespace を指定します。
この namespace で run-once duration override を有効にすると、今後この namespace で作成される 1 回実行 Pod の activeDeadlineSeconds フィールドが、Run Once Duration Override Operator からのオーバーライド値に設定されます。この namespace の既存 Pod には、次の更新時に activeDeadlineSeconds 値も設定されます。
検証
run-once duration override を有効にした namespace に、1 回実行 Pod を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod に
activeDeadlineSecondsフィールドが設定されていることを確認します。oc get pods -n <namespace> -o yaml | grep activeDeadlineSeconds
$ oc get pods -n <namespace> -o yaml | grep activeDeadlineSecondsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
activeDeadlineSeconds: 3600
activeDeadlineSeconds: 3600Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.16.3.3. run-once active deadline override 値の更新 リンクのコピーリンクがクリップボードにコピーされました!
Run Once Duration Override Operator が 1 回実行 Pod (run-once Pod) に適用されるオーバーライド値をカスタマイズできます。事前定義された値は 3600 秒、つまり 1 時間です。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - Run Once Duration Override Operator をインストールしました。
手順
- OpenShift CLI にログインします。
RunOnceDurationOverrideリソースを編集します。oc edit runoncedurationoverride cluster
$ oc edit runoncedurationoverride clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow activeDeadlineSecondsフィールドを更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
activeDeadlineSecondsフィールドを必要な値に設定します (秒単位)。
- 変更を適用するためにファイルを保存します。
run-once duration override が有効になっている namespace で今後作成される 1 回実行 Pod では、activeDeadlineSeconds フィールドがこの新しい値に設定されます。これらの namespace 内の既存の 1 回実行 Pod は、更新時にこの新しい値を受け取ります。
2.16.4. Run Once Duration Override Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Operator をアンインストールし、その関連リソースを削除することで、OpenShift Container Platform から Run Once Duration Override Operator を削除できます。
2.16.4.1. Run Once Duration Override Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して、Run Once Duration Override Operator をアンインストールできます。Run Once Duration Override Operator をアンインストールしても、1 回実行 (run-once) Pod の activeDeadlineSeconds フィールドの設定が解除されませんが、オーバーライド値は今後の 1 回実行 (run-once) Pod に適用されなくなります。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
- Run Once Duration Override Operator をインストールしました。
手順
- OpenShift Container Platform Web コンソールにログインします。
- Ecosystem → Installed Operators に移動します。
-
Project ドロップダウンリストから
openshift-run-once-duration-override-operatorを選択します。 RunOnceDurationOverrideインスタンスを削除します。- Run Once Duration Override Operator をクリックし、Run Once Duration Override タブを選択します。
-
クラスター エントリーの横にある Options メニュー
をクリックし、Delete RunOnceDurationOverride を選択します。
- 確認ダイアログで Delete をクリックします。
Run Once Duration Override Operator をアンインストールします。
- Ecosystem → Installed Operators に移動します。
-
Run Once Duration Override Operator エントリーの横にある Options メニュー
をクリックし、Uninstall Operator をクリックします。
- 確認ダイアログで、Uninstall をクリックします。
2.16.4.2. Run Once Duration Override Operator リソースのアンインストール リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、Run Once Duration Override Operator をアンインストールした後、その関連リソースをクラスターから削除できます。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
- Run Once Duration Override Operator をアンインストールしている。
手順
- OpenShift Container Platform Web コンソールにログインします。
Run Once Duration Override Operator のインストール時に作成された CRD を削除します。
- Administration → CustomResourceDefinitions に移動します。
-
Name フィールドに
RunOnceDurationOverrideを入力し、CRD をフィルタリングします。 -
RunOnceDurationOverride CRD の横にある Options メニュー
をクリックし、Delete CustomResourceDefinition を選択します。
- 確認ダイアログで Delete をクリックします。
openshift-run-once-duration-override-operatornamespace を削除します。- Administration → Namespaces に移動します。
-
openshift-run-once-duration-override-operatorをフィルターボックスに入力します。 -
openshift-run-once-duration-override-operator エントリーの横にある Options メニュー
をクリックし、Delete Namespace を選択します。
-
確認ダイアログで、
openshift-run-once-duration-override-operatorを入力し、Delete をクリックします。
有効にされた namespace から run-once duration override ラベルを削除します。
- Administration → Namespaces に移動します。
- namespace を選択します。
- Labels フィールドの横にある Edit をクリックします。
- runoncedurationoverrides.admission.runoncedurationoverride.openshift.io/enabled=true ラベルを削除し、Save をクリックします。
2.17. Linux ユーザー名前空間での Pod の実行 リンクのコピーリンクがクリップボードにコピーされました!
Linux ユーザー名前空間を使用すると、管理者はコンテナーのユーザーおよびグループ識別子 (UID および GID) を分離できるため、実行されているホストシステムとは異なる権限セットを、ユーザー名前空間でコンテナーに付与できます。これにより、ユーザー名前空間内で完全な権限を使用してプロセスを実行することをコンテナーに許可する一方で、ホストマシンに対する操作の権限をプロセスに与えないことが可能になります。
デフォルトでは、コンテナーはホストユーザー名前空間で実行されます。コンテナーをホストのユーザー名前空間で実行することは、そのユーザー名前空間でのみ使用可能な機能がコンテナーに必要な場合に便利です。しかし、ホストの名前空間で Pod を実行すると、コンテナーブレイクアウトの可能性など、セキュリティー上の懸念が生じます。コンテナーブレイクアウトが発生すると、別のコンテナー内のプロセスがホスト上に脱出し、そのプロセスがホスト上またはコンテナー内のファイルにアクセスしたり、ファイルを変更したりできるようになります。
個々のユーザー名前空間でコンテナーを実行すると、コンテナーブレイクアウトや、侵害されたコンテナーから他の Pod やノード自体に及ぶ可能性のあるその他のいくつかの脆弱性を軽減できます。
隔離されたユーザー名前空間で Pod を実行すると、Pod コンテナー内の UID/GID がホスト上の UID/GID と一致しなくなります。ファイルシステムの所有権が正しく機能するように、Linux カーネルは ID-mapped マウントを使用します。ID マップマウントは、仮想ファイルシステム (VFS) レイヤーにおいて、コンテナーとホスト間でユーザー ID を変換するものです。
現時点では、ネットワークファイルシステム (NFS) やその他のネットワーク/分散ファイルシステムなど、すべてのファイルシステムが ID-mapped マウントをサポートしているわけではありません。ID-mapped マウントをサポートしていないベンダーが提供する、NFS を基盤とした永続ボリュームを使用している Pod は、ユーザー名前空間で実行される際に、アクセスや権限の問題が発生する可能性があります。この動作は OpenShift Container Platform に固有のものではありません。これは、Kubernetes v1.33 以降のすべての Kubernetes ディストリビューションに適用されます。
2.17.1. Linux ユーザー名前空間のサポートの設定 リンクのコピーリンクがクリップボードにコピーされました!
Linux ユーザー名前空間を設定するには、次の手順に示すように、Pod 仕様で hostUsers パラメーターを false に設定し、その他のいくつかの設定を行います。
ユーザー名前空間でワークロードを実行すると、fsGroup、runAsGroup、runAsUser、supplementalGroups などの Security Context Constraints (SCC) フィールドに、RunAsAny を安全に設定できるようになります。これは、コンテナー外部の UID や GID が、これらのフィールドが表すコンテナー内部の UID や GID と異なるためです。
セキュリティーを強化するために、restricted-v3 または nested-container SCC を使用できます。これらは、Linux ユーザー名前空間内のワークロード向けに特別に設計されたものです。SCC に userNamespaceLevel: RequirePodLevel フィールドを設定すると、ワークロードが必ずユーザー名前空間で実行されます。SCC の詳細は、「Security Context Constraints の管理」を参照してください。
ワークロードに対して特定の SCC を必須とするには、oc adm policy add-scc-to-user コマンドまたは oc adm policy add-scc-to-group コマンドを使用して、特定のユーザーまたはグループに SCC を追加できます。詳細は、「OpenShift CLI 管理者コマンドリファレンス」を参照してください。
また、必要に応じて、Pod 仕様の procMount パラメーターを使用して、Pod 内の /proc ファイルシステムを unmasked に設定することもできます。一般的に安全であると考えられている /proc を unmasked に設定すると、コンテナーランタイムのデフォルトのマスキング動作がバイパスされるため、userNamespaceLevel を RequirePodLevel に設定する SCC でのみ使用する必要があります。
前提条件
-
restricted-v3またはnested-containerSCC で設定されたユーザーとして、またはいずれかの SCC で設定されたユーザーグループのユーザーとして、OpenShift Container Platform クラスターにログインします。または、ワークロードオブジェクトで、restricted-v3またはnested-containerSCC を直接設定することもできます。
手順
次のコマンドを実行して、Pod がデプロイされている OpenShift Container Platform の namespace のデフォルトユーザー ID (UID) およびグループ ID (GID) の範囲を編集します。
oc edit ns/<namespace_name>
$ oc edit ns/<namespace_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各項目の説明:
metadata.annotations.openshift.io/sa.scc.supplemental-groups-
Pod 仕様で必要なデフォルトの GID を指定します。Linux ユーザー名前空間の範囲は
65535以下である必要があります。デフォルトは1000000000/10000です。 metadata.annotations.openshift.io/sa.scc.uid-range-
Pod 仕様で必要なデフォルトの UID を指定します。Linux ユーザー名前空間の範囲は
65535以下である必要があります。デフォルトは1000000000/10000です。
注記範囲 1000/10000 は、ID 1000 から始まる 10,000 個の値を意味するため、1000 から 10,999 までの範囲の ID を指定します。
適切な SCC を使用して動作するように設定したワークロードを作成し、
hostUsersパラメーターをfalseに設定して、Linux ユーザー名前空間の使用を有効にします。以下のような YAML ファイルを作成します。
Pod 仕様の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各項目の説明:
spec.hostUsers-
Pod をユーザー名前空間で実行するかどうかを指定します。
falseの場合、Pod は Pod 用に作成した新しいユーザー名前空間で実行されます。trueの場合、Pod はホストのユーザー名前空間で実行されます。デフォルトはtrueです。 spec.containers.securityContext.runAsUser-
コンテナー内で実行されるプロセスのユーザー ID を指定します。これは、
namespaceオブジェクトで設定した範囲内に収まっている必要があります。 spec.containers.securityContext.runAsGroup-
コンテナー内で実行されるプロセスのグループ ID を指定します。これは、
namespaceオブジェクトで設定した範囲内に収まっている必要があります。 spec.containers.securityContext.runAsNonRoot- コンテナー内のプロセスを 0 以外の UID を持つユーザーで実行することを指定します。
spec.containers.securityContext.procMount-
コンテナーに使用する proc マウントのタイプを指定します。
unmasked値を設定すると、コンテナーの/procファイルシステムが、コンテナーのプロセスによって読み取り/書き込み可能な状態でマウントされます。デフォルトはDefaultです。この値はオプションです。 spec.containers.securityContext.capabilities.add-
ユーザー名前空間に設定する Linux 機能を指定します。これにより、完全なルートアクセスを与えることなく特権アクションが許可されます。技術的に言えば、ユーザー名前空間の中でケイパビリティーを設定する方が、ユーザー名前空間の外で設定するよりも安全です。ケイパビリティーのスコープがユーザー名前空間の内部にあることで制限され、一般的に安全であると考えられるためです。しかし、信頼できないワークロードに
CAP_SYS_ADMINなどの Pod ケイパビリティーを付与すると、コンテナー化されたプロセスがアクセスできる潜在的なカーネルの攻撃対象領域が広がり、悪用可能な脆弱性が発見されるおそれがあります。したがって、ユーザー名前空間内のケイパビリティーは、Pod セキュリティーアドミッションではbaselineレベルで許可されます。この値はオプションです。
以下のコマンドを実行してオブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
作成した Pod 内のコンテナーで使用されているユーザー ID とグループ ID を確認します。Pod は Linux ユーザー名前空間内にあります。
Pod 内のコンテナーでシェルセッションを開始します。
oc rsh -c <container_name> pod/<pod_name>
$ oc rsh -c <container_name> pod/<pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc rsh -c userns-container pod/userns-pod
$ oc rsh -c userns-container pod/userns-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー内で使用されているユーザー ID とグループ ID を表示します。
id
sh-5.1$ idCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
uid=1000(1000) gid=1000(1000) groups=1000(1000)
uid=1000(1000) gid=1000(1000) groups=1000(1000)1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- コンテナーの UID とグループは、Pod 仕様で設定したものと同じである必要があります。
コンテナーのユーザー名前空間で使用されているユーザー ID を表示します。
lsns -t user
sh-5.1$ lsns -t userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NS TYPE NPROCS PID USER COMMAND 4026532447 user 3 1 1000 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1000
NS TYPE NPROCS PID USER COMMAND 4026532447 user 3 1 1000 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 10001 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- プロセスの UID は、Pod 仕様で設定したものと同じである必要があります。
次のコマンドを使用して、コンテナーシェルセッションを終了します。
exit
sh-5.1$ exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ノードによって使用されている UID を確認します。ノードは Linux ユーザー名前空間の外部にあります。このユーザー ID がコンテナーで使用されている UID と異なっている必要があります。
そのノードのデバッグセッションを開始します。
oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9
$ oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9
$ oc debug node/ci-ln-z5vppzb-72292-8zp2b-worker-c-q8sh9Copy to Clipboard Copied! Toggle word wrap Toggle overflow /hostをデバッグシェル内のルートディレクトリーとして設定します。chroot /host
sh-5.1# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow ノードによって使用されている UID を表示します。
lsns -t user
sh-5.1# lsns -t userCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
NS TYPE NPROCS PID USER COMMAND 4026531837 user 233 1 root /usr/lib/systemd/systemd --switched-root --system --deserialize 28 4026532447 user 1 4767 2908816384 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1000
NS TYPE NPROCS PID USER COMMAND 4026531837 user 233 1 root /usr/lib/systemd/systemd --switched-root --system --deserialize 28 4026532447 user 1 4767 2908816384 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 10001 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- UID は、Pod 仕様で設定したものと異なる必要があります。
次のコマンドを使用してデバッグセッションを終了します。
exit
sh-5.1# exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow exit
sh-5.1# exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
/procファイルシステムがコンテナーにunmaskedの状態でマウントされていることを確認します。これは、次のコマンドの出力に、読み取り/書き込み権限 (rw) が含まれていることからわかります。oc exec <pod_name> -- mount | grep /proc
$ oc exec <pod_name> -- mount | grep /procCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 Custom Metrics Autoscaler Operator を使用した Pod の自動スケーリング リンクのコピーリンクがクリップボードにコピーされました!
3.1. リリースノート リンクのコピーリンクがクリップボードにコピーされました!
3.1.1. Custom Metrics Autoscaler Operator リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift の Custom Metrics Autoscaler Operator のリリースノートでは、新機能および拡張機能、非推奨となった機能、および既知の問題を説明しています。
Custom Metrics Autoscaler Operator は、Kubernetes ベースの Event Driven Autoscaler (KEDA) を使用し、OpenShift Container Platform の Horizontal Pod Autoscaler (HPA) の上に構築されます。
Red Hat OpenShift の Custom Metrics Autoscaler Operator のロギングサブシステムは、インストール可能なコンポーネントとして提供され、コアの OpenShift Container Platform とは異なるリリースサイクルを備えています。Red Hat OpenShift Container Platform ライフサイクルポリシー はリリースの互換性を概説しています。
3.1.1.1. サポート対象バージョン リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、各 OpenShift Container Platform バージョンの Custom Metrics Autoscaler Operator バージョンを定義しています。
| バージョン | OpenShift Container Platform バージョン | 一般提供 |
|---|---|---|
| 2.17.2-2 | 4.20 | 一般提供 |
| 2.17.2-2 | 4.19 | 一般提供 |
| 2.17.2-2 | 4.18 | 一般提供 |
| 2.17.2-2 | 4.17 | 一般提供 |
| 2.17.2-2 | 4.16 | 一般提供 |
| 2.17.2-2 | 4.15 | 一般提供 |
| 2.17.2-2 | 4.14 | 一般提供 |
| 2.17.2-2 | 4.13 | 一般提供 |
| 2.17.2-2 | 4.12 | 一般提供 |
3.1.1.2. Custom Metrics Autoscaler Operator 2.17.2-2 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
発行日: 2025 年 10 月 21 日
この Custom Metrics Autoscaler Operator 2.17.2-2 リリースは、新しいベースイメージと Go コンパイラーを使用して、Custom Metrics Autoscaler Operator のバージョン 2.17.2 を再構築したものです。Custom Metrics Autoscaler Operator のコード変更はありません。Custom Metrics Autoscaler Operator に関しては、次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2. Custom Metrics Autoscaler Operator の過去リリースに関するリリースノート リンクのコピーリンクがクリップボードにコピーされました!
次のリリースノートは、以前の Custom Metrics Autoscaler Operator バージョンを対象としています。
現在のバージョンは、Custom Metrics Autoscaler Operator リリースノート を参照してください。
3.1.2.1. Custom Metrics Autoscaler Operator 2.17.2 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
発行日: 2025 年 9 月 25 日
Custom Metrics Autoscaler Operator 2.17.2 のこのリリースでは、Common Vulnerabilities and Exposures (CVE) に対処しています。Custom Metrics Autoscaler Operator に関しては、次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.1.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.1.1.1. KEDA コントローラーはインストール中に自動的に作成される リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator をインストールすると、KEDA コントローラーが自動的に作成されるようになりました。以前は、KEDA コントローラーを手動で作成する必要がありました。必要に応じて、自動作成された KEDA コントローラーを編集できます。
3.1.2.1.1.2. Kubernetes ワークロードトリガーのサポート リンクのコピーリンクがクリップボードにコピーされました!
Cluster Metrics Autoscaler Operator は、Kubernetes ワークロードトリガーを使用して、特定のラベルセレクターに一致する Pod の数に基づいて Pod をスケーリングできるようになりました。
3.1.2.1.1.3. バインドされたサービスアカウントトークンのサポート リンクのコピーリンクがクリップボードにコピーされました!
Cluster Metrics Autoscaler Operator は、バインドされたサービスアカウントトークンをサポートするようになりました。これまで、Operator はレガシーサービスアカウントトークンのみをサポートしていましたが、セキュリティー上の理由から、バインドされたサービスアカウントトークンに段階的に移行しています。
3.1.2.1.2. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- 以前は、KEDA コントローラーはボリュームマウントをサポートしていませんでした。その結果、Kafka スケーラーで Kerberos を使用できませんでした。この修正により、KEDA コントローラーはボリュームマウントをサポートするようになりました。(OCPBUGS-42559)
-
以前は、
keda-operatorデプロイメントオブジェクトログの KEDA バージョンで、Custom Metrics Autoscaler Operator が誤った KEDA バージョンに基づいていることが報告されていました。この修正により、正しい KEDA バージョンがログに報告されるようになりました。(OCPBUGS-58129)
3.1.2.2. Custom Metrics Autoscaler Operator 2.15.1-4 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
発行日: 2025 年 3 月 31 日
Custom Metrics Autoscaler Operator 2.15.1-4 のこのリリースでは、Common Vulnerabilities and Exposures (CVE) に対処しています。Custom Metrics Autoscaler Operator に関しては、次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.2.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.2.1.1. CMA マルチアーキテクチャービルド リンクのコピーリンクがクリップボードにコピーされました!
このバージョンの Custom Metrics Autoscaler Operator では、ARM64 OpenShift Container Platform クラスターに Operator をインストールして実行できるようになりました。
3.1.2.3. Custom Metrics Autoscaler Operator 2.14.1-467 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.14.1-467 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するための CVE とバグ修正が提供されています。RHSA-2024:7348 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.3.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- 以前は、Custom Metrics Autoscaler Operator Pod のルートファイルシステムが書き込み可能でした。これは不要であり、セキュリティー上の問題を引き起こす可能性がありました。この更新により、Pod のルートファイルシステムが読み取り専用になり、潜在的なセキュリティー問題が解決されました。(OCPBUGS-37989)
3.1.2.4. Custom Metrics Autoscaler Operator 2.14.1-454 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
この Custom Metrics Autoscaler Operator 2.14.1-454 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための CVE、新機能、およびバグ修正を使用できます。RHBA-2024:5865 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.4.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.4.1.1. Custom Metrics Autoscaler Operator による Cron トリガーのサポート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator が、Cron トリガーを使用して、時間単位のスケジュールに基づいて Pod をスケーリングできるようになりました。指定した時間枠が開始すると、Custom Metrics Autoscaler Operator が Pod を必要な数にスケーリングします。時間枠が終了すると、Operator は以前のレベルまでスケールダウンします。
詳細は、Cron トリガーについて を参照してください。
3.1.2.4.2. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、
KedaControllerカスタムリソースの監査設定パラメーターに変更を加えても、keda-metrics-server-audit-policyconfig map が更新されませんでした。その結果、Custom Metrics Autoscaler の初期デプロイ後に監査設定パラメーターを変更することができませんでした。この修正により、監査設定への変更が config map に適切に反映されるようになり、インストール後いつでも監査設定を変更できるようになりました。(OCPBUGS-32521)
3.1.2.5. Custom Metrics Autoscaler Operator 2.13.1 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.13.1-421 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能およびバグ修正が提供されています。RHBA-2024:4837 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.5.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.5.1.1. Custom Metrics Autoscaler Operator によるカスタム証明書のサポート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator は、カスタムサービス CA 証明書を使用して、外部 Kafka クラスターや外部 Prometheus サービスなどの TLS 対応メトリクスソースにセキュアに接続できるようになりました。デフォルトでは、Operator は自動生成されたサービス証明書を使用して、クラスター上のサービスにのみ接続します。KedaController オブジェクトには、config map を使用して外部サービスに接続するためのカスタムサーバー CA 証明書を読み込むことができる新しいフィールドがあります。
詳細は、Custom Metrics Autoscaler のカスタム CA 証明書 を参照してください。
3.1.2.5.2. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、
custom-metrics-autoscalerおよびcustom-metrics-autoscaler-adapterイメージにタイムゾーン情報がありませんでした。その結果、コントローラーがタイムゾーン情報を見つけられなかったため、cronトリガーを使用した scaled object は機能しなくなりました。この修正により、イメージビルドが更新され、タイムゾーン情報が含まれるようになりました。その結果、cronトリガーを含む scaled object が正常に機能するようになりました。cronトリガーを含む scaled object は、現在、カスタムメトリクスオートスケーラーではサポートされていません。(OCPBUGS-34018)
3.1.2.6. Custom Metrics Autoscaler Operator 2.12.1-394 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.12.1-394 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するためのバグ修正が提供されています。RHSA-2024:2901 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの Kubernetes ベースの Event Driven Autoscaler (KEDA) を削除します。
3.1.2.6.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、
protojson.Unmarshal関数は、特定の形式の無効な JSON をアンマーシャリングするときに無限ループに入りました。この状態は、google.protobuf.Any値を含むメッセージにアンマーシャリングするとき、またはUnmarshalOptions.DiscardUnknownオプションが設定されているときに発生する可能性があります。このリリースではこの問題が修正されています。(OCPBUGS-30305) -
以前は、
Request.ParseMultipartFormメソッドを使用して明示的に、またはRequest.FormValue、Request.PostFormValue、Request.FormFileメソッドを使用して暗黙的にマルチパートフォームを解析する場合、解析されたフォームの合計サイズの制限は、消費されるメモリーには適用されませんでした。これによりメモリー不足が発生する可能性があります。この修正により、解析プロセスでは、単一のフォーム行を読み取る際に、フォーム行の最大サイズが正しく制限されるようになりました。(OCPBUGS-30360) -
以前は、一致するサブドメイン上または最初のドメインと完全に一致しないドメインへの HTTP リダイレクトに従う場合、HTTP クライアントは
AuthorizationやCookieなどの機密ヘッダーを転送しませんでした。たとえば、example.comからwww.example.comへのリダイレクトではAuthorizationヘッダーが転送されますが、www.example.orgへのリダイレクトではヘッダーは転送されません。このリリースではこの問題が修正されています。(OCPBUGS-30365) -
以前は、不明な公開鍵アルゴリズムを持つ証明書を含む証明書チェーンを検証すると、証明書検証プロセスがパニックに陥っていました。この状況は、
Config.ClientAuthパラメーターをVerifyClientCertIfGivenまたはRequireAndVerifyClientCert値に設定するすべての暗号化および Transport Layer Security (TLS) クライアントとサーバーに影響しました。デフォルトの動作では、TLS サーバーはクライアント証明書を検証しません。このリリースではこの問題が修正されています。(OCPBUGS-30370) -
以前は、
MarshalJSONメソッドから返されるエラーにユーザーが制御するデータが含まれている場合、攻撃者はそのデータを使用して HTML テンプレートパッケージのコンテキスト自動エスケープ動作を破ることができた可能性があります。この条件により、後続のアクションによってテンプレートに予期しないコンテンツが注入される可能性があります。このリリースではこの問題が修正されています。(OCPBUGS-30397) -
以前は、Go パッケージ
net/httpおよびgolang.org/x/net/http2では、HTTP/2 リクエストのCONTINUATIONフレームの数に制限がありませんでした。この状態により、CPU が過剰に消費される可能性があります。このリリースではこの問題が修正されています。(OCPBUGS-30894)
3.1.2.7. Custom Metrics Autoscaler Operator 2.12.1-384 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.12.1-384 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するためのバグ修正が提供されています。RHBA-2024:2043 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.7.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、
custom-metrics-autoscalerおよびcustom-metrics-autoscaler-adapterイメージにタイムゾーン情報がありませんでした。その結果、コントローラーがタイムゾーン情報を見つけられなかったため、cronトリガーを使用した scaled object は機能しなくなりました。この修正により、イメージビルドが更新され、タイムゾーン情報が含まれるようになりました。その結果、cronトリガーを含む scaled object が正常に機能するようになりました。(OCPBUGS-32395)
3.1.2.8. Custom Metrics Autoscaler Operator 2.12.1-376 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.12.1-376 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するためのセキュリティー更新とバグ修正が提供されます。RHSA-2024:1812 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.8.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- 以前は、存在しない namespace などの無効な値が scaled object メタデータに指定されている場合、基盤となるスケーラークライアントはクライアント記述子を解放または終了できず、低速のメモリーリークが発生していました。この修正により、エラーが発生した場合に基礎となるクライアント記述子が適切に終了され、メモリーのリークが防止されます。(OCPBUGS-30145)
-
以前は、
keda-metrics-apiserverPod のServiceMonitorカスタムリソース (CR) が機能していませんでした。これは、CR がhttpという誤ったメトリクスポート名を参照していたためです。この修正により、ServiceMonitorCR が修正され、metricsの適切なポート名が参照されるようになります。その結果、Service Monitor が正常に機能します。(OCPBUGS-25806)
3.1.2.9. Custom Metrics Autoscaler Operator 2.11.2-322 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.11.2-322 のこのリリースでは、OpenShift Container Platform クラスターで Operator を実行するためのセキュリティー更新とバグ修正が提供されます。RHSA-2023:6144 に関する次のアドバイザリーが利用可能です。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.9.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
- Custom Metrics Autoscaler Operator バージョン 3.11.2-311 は、Operator デプロイメントで必要なボリュームマウントなしにリリースされたため、Custom Metrics Autoscaler Operator Pod は 15 分ごとに再起動しました。この修正により、必要なボリュームマウントが Operator デプロイメントに追加されました。その結果、Operator は 15 分ごとに再起動しなくなりました。(OCPBUGS-22361)
3.1.2.10. Custom Metrics Autoscaler Operator 2.11.2-311 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
この Custom Metrics Autoscaler Operator 2.11.2-311 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を使用できます。Custom Metrics Autoscaler Operator 2.11.2-311 のコンポーネントは RHBA-2023:5981 でリリースされました。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.10.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.10.1.1. Red Hat OpenShift Service on AWS と OpenShift Dedicated がサポートされるようになる リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.11.2-311 は、Red Hat OpenShift Service on AWS および OpenShift Dedicated マネージドクラスターにインストールできます。Custom Metrics Autoscaler Operator の以前のバージョンは、openshift-keda namespace にのみインストールできました。これにより、Operator を Red Hat OpenShift Service on AWS および OpenShift Dedicated クラスターにインストールできませんでした。このバージョンの Custom Metrics Autoscaler では、openshift-operators または keda などの他の namespace へのインストールが可能になり、Red Hat OpenShift Service on AWS および OpenShift Dedicated クラスターへのインストールが可能になります。
3.1.2.10.2. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、Custom Metrics Autoscaler Operator がインストールおよび設定されているが使用されていない場合、OpenShift CLI では、
ocコマンドを入力すると、couldn’t get resource list for external.metrics.k8s.io/v1beta1: Got empty response for: external.metrics.k8s.io/v1beta1エラーが報告されていました。このメッセージは無害ではありますが、混乱を引き起こす可能性がありました。この修正により、Got empty response for: external.metrics…エラーが不適切に表示されなくなりました。(OCPBUGS-15779) - 以前は、設定変更後など、Keda Controller が変更されるたびに、Custom Metrics Autoscaler Operator によって管理されるオブジェクトに対するアノテーションやラベルの変更は、Custom Metrics Autoscaler Operator によって元に戻されました。これにより、オブジェクト内のラベルが継続的に変更されてしまいました。Custom Metrics Autoscaler は、独自のアノテーションを使用してラベルとアノテーションを管理するようになり、アノテーションやラベルが不適切に元に戻されることがなくなりました。(OCPBUGS-15590)
3.1.2.11. Custom Metrics Autoscaler Operator 2.10.1-267 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
この Custom Metrics Autoscaler Operator 2.10.1-267 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を使用できます。Custom Metrics Autoscaler Operator 2.10.1-267 のコンポーネントは RHBA-2023:4089 でリリースされました。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.11.1. バグ修正 リンクのコピーリンクがクリップボードにコピーされました!
-
以前は、
custom-metrics-autoscalerイメージとcustom-metrics-autoscaler-adapterイメージにはタイムゾーン情報が含まれていませんでした。そのため、コントローラーがタイムゾーン情報を検出できないことが原因で、cron トリガーを使用した scaled object が機能していませんでした。今回の修正により、イメージビルドにタイムゾーン情報が含まれるようになりました。その結果、cron トリガーを含む scaled object が正常に機能するようになりました。(OCPBUGS-15264) -
以前のバージョンでは、Custom Metrics Autoscaler Operator は、他の namespace 内のオブジェクトやクラスタースコープのオブジェクトを含む、すべてのマネージドオブジェクトの所有権を取得しようとしていました。このため、Custom Metrics Autoscaler Operator は API サーバーに必要な認証情報を読み取るためのロールバインディングを作成できませんでした。これにより、
kube-systemnamespace でエラーが発生しました。今回の修正により、Custom Metrics Autoscaler Operator は、別の namespace 内のオブジェクトまたはクラスタースコープのオブジェクトへのownerReferenceフィールドの追加をスキップします。その結果、ロールバインディングがエラーなしで作成されるようになりました。(OCPBUGS-15038) -
以前は、Custom Metrics Autoscaler Operator によって、
ownerReferencesフィールドがopenshift-kedanamespace に追加されていました。これによって機能上の問題が発生することはありませんでしたが、このフィールドの存在によりクラスター管理者が混乱する可能性がありました。今回の修正により、Custom Metrics Autoscaler Operator はownerReferenceフィールドをopenshift-kedanamespace に追加しなくなりました。その結果、openshift-kedanamespace には余分なownerReferenceフィールドが含まれなくなりました。(OCPBUGS-15293) -
以前のバージョンでは、Pod ID 以外の認証方法で設定された Prometheus トリガーを使用し、
podIdentityパラメーターがnoneに設定されている場合、トリガーはスケーリングに失敗しました。今回の修正により、OpenShift の Custom Metrics Autoscaler は、Pod ID プロバイダータイプnoneを適切に処理できるようになりました。その結果、Pod ID 以外の認証方法で設定され、podIdentityパラメーターがnoneに設定された Prometheus トリガーが適切にスケーリングされるようになりました。(OCPBUGS-15274)
3.1.2.12. Custom Metrics Autoscaler Operator 2.10.1 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
この Custom Metrics Autoscaler Operator 2.10.1 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を使用できます。Custom Metrics Autoscaler Operator 2.10.1 のコンポーネントは RHEA-2023:3199 でリリースされました。
このバージョンの Custom Metrics Autoscaler Operator をインストールする前に、以前にインストールされたテクノロジープレビューバージョンまたはコミュニティーがサポートするバージョンの KEDA を削除します。
3.1.2.12.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.12.1.1. Custom Metrics Autoscaler Operator の一般提供 リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator バージョン 2.10.1 以降で、Custom Metrics Autoscaler Operator の一般提供が開始されました。
スケーリングされたジョブを使用したスケーリングはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat テクノロジープレビュー機能のサポート範囲の詳細は、次のリンクを参照してください。
3.1.2.12.1.2. パフォーマンスメトリクス リンクのコピーリンクがクリップボードにコピーされました!
Prometheus Query Language (PromQL) を使用して、Custom Metrics Autoscaler Operator でメトリクスのクエリーを行えるようになりました。
3.1.2.12.1.3. スケーリングされたオブジェクトのカスタムメトリクス自動スケーリングの一時停止 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じてスケーリングされたオブジェクトの自動スケーリングを一時停止し、準備ができたら再開できるようになりました。
3.1.2.12.1.4. スケーリングされたオブジェクトのレプリカフォールバック リンクのコピーリンクがクリップボードにコピーされました!
スケーリングされたオブジェクトがソースからメトリクスを取得できなかった場合に、フォールバックするレプリカの数を指定できるようになりました。
3.1.2.12.1.5. スケーリングされたオブジェクトのカスタマイズ可能な HPA 命名 リンクのコピーリンクがクリップボードにコピーされました!
スケーリングされたオブジェクトで、Horizontal Pod Autoscaler のカスタム名を指定できるようになりました。
3.1.2.12.1.6. アクティブ化およびスケーリングのしきい値 リンクのコピーリンクがクリップボードにコピーされました!
Horizontal Pod Autoscaler (HPA) は 0 レプリカへの、または 0 レプリカからのスケーリングができないため、Custom Metrics Autoscaler Operator がそのスケーリングを実行し、その後 HPA がスケーリングを実行します。レプリカの数に基づき HPA が自動スケーリングを引き継ぐタイミングを指定できるようになりました。これにより、スケーリングポリシーの柔軟性が向上します。
3.1.2.13. Custom Metrics Autoscaler Operator 2.8.2-174 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
この Custom Metrics Autoscaler Operator 2.8.2-174 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を使用できます。Custom Metrics Autoscaler Operator 2.8.2-174 のコンポーネントは RHEA-2023:1683 でリリースされました。
Custom Metrics Autoscaler Operator バージョン 2.8.2-174 は、テクノロジープレビュー 機能です。
3.1.2.13.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.13.1.1. Operator のアップグレードサポート リンクのコピーリンクがクリップボードにコピーされました!
以前の Custom Metrics Autoscaler Operator バージョンからアップグレードできるようになりました。Operator のアップグレードの詳細は、「関連情報」の「Operator の更新チャネルの変更」を参照してください。
3.1.2.13.1.2. must-gather サポート リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform must-gather ツールを使用して、Custom Metrics Autoscaler Operator およびそのコンポーネントに関するデータを収集できるようになりました。現時点で、Custom Metrics Autoscaler で must-gather ツールを使用するプロセスは、他の Operator とは異なります。詳細は、関連情報の「デバッグデータの収集」を参照してください。
3.1.2.14. Custom Metrics Autoscaler Operator 2.8.2 リリースノート リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator 2.8.2 のこのリリースは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を提供します。Custom Metrics Autoscaler Operator 2.8.2 のコンポーネントは RHSA-2023:1042 でリリースされました。
Custom Metrics Autoscaler Operator バージョン 2.8.2 は テクノロジープレビュー 機能です。
3.1.2.14.1. 新機能および機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.14.1.1. 監査ロギング リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator とその関連コンポーネントの監査ログを収集して表示できるようになりました。監査ログは、システムに影響を与えた一連のアクティビティーを個別のユーザー、管理者その他システムのコンポーネント別に記述したセキュリティー関連の時系列のレコードです。
3.1.2.14.1.2. Apache Kafka メトリクスに基づくアプリケーションのスケーリング リンクのコピーリンクがクリップボードにコピーされました!
KEDA Apache kafka トリガー/スケーラーを使用して、Apache Kafka トピックに基づいてデプロイメントをスケーリングできるようになりました。
3.1.2.14.1.3. CPU メトリクスに基づくアプリケーションのスケーリング リンクのコピーリンクがクリップボードにコピーされました!
KEDA CPU トリガー/スケーラーを使用して、CPU メトリクスに基づいてデプロイメントをスケーリングできるようになりました。
3.1.2.14.1.4. メモリーメトリクスに基づくアプリケーションのスケーリング リンクのコピーリンクがクリップボードにコピーされました!
KEDA メモリートリガー/スケーラーを使用して、メモリーメトリクスに基づいてデプロイメントをスケーリングできるようになりました。
3.2. Custom Metrics Autoscaler Operator の概要 リンクのコピーリンクがクリップボードにコピーされました!
開発者は、Red Hat OpenShift の Custom Metrics Autoscaler Operator を使用して、OpenShift Container Platform が CPU またはメモリーのみに基づくものではないカスタメトリクスに基づきデプロイメント、ステートフルセット、カスタムリソース、またはジョブの Pod 数を自動的に増減する方法を指定できます。
Custom Metrics Autoscaler Operator は、Kubernetes Event Driven Autoscaler (KEDA) に基づくオプションの Operator であり、Pod メトリクス以外の追加のメトリクスソースを使用してワークロードをスケーリングできます。
カスタムメトリクスオートスケーラーは現在、Prometheus、CPU、メモリー、および Apache Kafka メトリクスのみをサポートしています。
Custom Metrics Autoscaler Operator は、特定のアプリケーションからのカスタムの外部メトリクスに基づいて、Pod をスケールアップおよびスケールダウンします。他のアプリケーションは引き続き他のスケーリング方法を使用します。スケーラーとも呼ばれる トリガー を設定します。これは、カスタムメトリクスオートスケーラーがスケーリング方法を決定するために使用するイベントとメトリクスのソースです。カスタムメトリクスオートスケーラーはメトリクス API を使用して、外部メトリクスを OpenShift Container Platform が使用できる形式に変換します。カスタムメトリクスオートスケーラーは、実際のスケーリングを実行する Horizontal Pod Autoscaler (HPA) を作成します。
カスタムメトリクスオートスケーラーを使用するには、ワークロード用の ScaledObject または ScaledJob オブジェクトを作成します。これらは、スケーリングメタデータを定義するカスタムリソース (CR) です。スケーリングするデプロイメントまたはジョブ、スケーリングするメトリクスのソース (トリガー)、許可される最小および最大レプリカ数などのその他のパラメーターを指定します。
スケーリングするワークロードごとに、スケーリングされたオブジェクトまたはスケーリングされたジョブを 1 つだけ作成できます。また、スケーリングされたオブジェクトまたはスケーリングされたジョブと Horizontal Pod Autoscaler (HPA) を同じワークロードで使用することはできません。
カスタムメトリクスオートスケーラーは、HPA とは異なり、ゼロにスケーリングできます。カスタムメトリクスオートスケーラー CR の minReplicaCount 値を 0 に設定すると、カスタムメトリクスオートスケーラーはワークロードを 1 レプリカから 0 レプリカにスケールダウンするか、0 レプリカから 1 にスケールアップします。これは、アクティベーションフェーズ として知られています。1 つのレプリカにスケールアップした後、HPA はスケーリングを制御します。これは スケーリングフェーズ として知られています。
一部のトリガーにより、クラスターメトリクスオートスケーラーによってスケーリングされるレプリカの数を変更できます。いずれの場合も、アクティベーションフェーズを設定するパラメーターは、activation で始まる同じフレーズを常に使用します。たとえば、threshold パラメーターがスケーリングを設定する場合、activationThreshold はアクティベーションを設定します。アクティベーションフェーズとスケーリングフェーズを設定すると、スケーリングポリシーの柔軟性が向上します。たとえば、アクティベーションフェーズをより高く設定することで、メトリクスが特に低い場合にスケールアップまたはスケールダウンを防ぐことができます。
それぞれ異なる決定を行う場合は、スケーリングの値よりもアクティベーションの値が優先されます。たとえば、threshold が 10 に設定されていて、activationThreshold が 50 である場合にメトリクスが 40 を報告した場合、スケーラーはアクティブにならず、HPA が 4 つのインスタンスを必要とする場合でも Pod はゼロにスケーリングされます。
図3.1 カスタムメトリクスオートスケーラーのワークフロー
- クラスター上のワークロード用のスケーリングされたオブジェクトのカスタムリソースを作成または変更します。オブジェクトには、そのワークロードのスケーリング設定を含めます。OpenShift API サーバーは、新しいオブジェクトを受け入れる前に、そのオブジェクトをカスタムメトリクスオートスケーラーのアドミッション Webhook プロセスに送信して、オブジェクトが有効であることを確認します。検証が成功すると、API サーバーはオブジェクトを永続化します。
- カスタムメトリクスオートスケーラーコントローラーが、スケーリングされたオブジェクトの更新または変更を監視します。OpenShift API サーバーがコントローラーに変更を通知すると、コントローラーは、オブジェクト内で指定されている外部トリガーソース (データソースとも呼ばれる) を監視して、メトリクスデータの変更を確認します。1 つ以上のスケーラーが外部トリガーソースからのスケーリングデータを要求します。たとえば、Kafka トリガータイプの場合、コントローラーは Kafka スケーラーを使用して Kafka インスタンスと通信し、トリガーによって要求されたデータを取得します。
- コントローラーが、スケーリングされたオブジェクトの Horizontal Pod Autoscaler オブジェクトを作成します。その結果、Horizontal Pod Autoscaler (HPA) Operator が、トリガーに関連付けられたスケーリングデータの監視を開始します。HPA は、クラスターの OpenShift API サーバーエンドポイントからスケーリングデータを要求します。
- OpenShift API サーバーエンドポイントが、カスタムメトリクスオートスケーラーのメトリクスアダプターによって提供されます。メトリクスアダプターは、カスタムメトリクスの要求を受信すると、コントローラーへの GRPC 接続を使用して、スケーラーから受信した最新のトリガーデータを要求します。
- HPA がメトリクスアダプターから受信したデータに基づいてスケーリングを決定し、レプリカを増減することでワークロードをスケールアップまたはスケールダウンします。
- 運用中に、ワークロードがスケーリングメトリクスに影響を与えることがあります。たとえば、Kafka キュー内の作業を処理するためにワークロードがスケールアップされた場合、ワークロードがすべての作業を処理した後、キューのサイズが減少します。その結果、ワークロードがスケールダウンされます。
-
メトリクスが
minReplicaCount値で指定された範囲内にある場合、カスタムメトリクスオートスケーラーコントローラーがすべてのスケーリングを無効にして、レプリカ数を一定に維持します。メトリクスがその範囲を超える場合、カスタムメトリクスオートスケーラーコントローラーはスケーリングを有効にして、HPA がワークロードをスケーリングできるようにします。スケーリングが無効になっている間、HPA は何もアクションを実行しません。
3.2.1. Custom Metrics Autoscaler 用のカスタム CA 証明書 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Custom Metrics Autoscaler Operator は、自動的に生成されたサービス CA 証明書を使用して、クラスター上のサービスに接続します。
カスタム CA 証明書を必要とするクラスター外のサービスを使用する場合は、必要な証明書を config map に追加できます。次に、カスタムメトリクスオートスケーラーのインストール の説明に従って、KedaController カスタムリソースに config map を追加します。Operator は起動時にこれらの証明書を読み込み、Operator によって信頼されたものとして登録します。
config map には、1 つ以上の PEM エンコードされた CA 証明書を含む 1 つ以上の証明書ファイルを含めることができます。または、証明書ファイルごとに個別の config map を使用することもできます。
後で config map を更新して追加の証明書を追加する場合は、変更を有効にするために keda-operator-* Pod を再起動する必要があります。
3.3. カスタムメトリクスオートスケーラーのインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して Custom Metrics Autoscaler Operator をインストールすることができます。
インストールにより、以下の 5 つの CRD が作成されます。
-
ClusterTriggerAuthentication -
KedaController -
ScaledJob -
ScaledObject -
TriggerAuthentication
インストールプロセスでは、KedaController カスタムリソース (CR) も作成されます。必要に応じて、デフォルトの KedaController CR を変更できます。詳細は、「Keda Controller CR の編集」を参照してください。
2.17.2 より前のバージョンの Custom Metrics Autoscaler Operator をインストールする場合は、Keda Controller CR を手動で作成する必要があります。CR を作成するには、「Keda Controller CR の編集」で説明されている手順を使用できます。
3.3.1. カスタムメトリクスオートスケーラーのインストール リンクのコピーリンクがクリップボードにコピーされました!
次の手順を使用して、Custom Metrics Autoscaler Operator をインストールできます。
前提条件
- これまでにインストールしたテクノロジープレビューバージョンの Cluster Metrics Autoscaler Operator を削除する。
コミュニティーベースの KEDA バージョンをすべて削除する。
次のコマンドを実行して、KEDA 1.x カスタムリソース定義を削除する。
oc delete crd scaledobjects.keda.k8s.io
$ oc delete crd scaledobjects.keda.k8s.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd triggerauthentications.keda.k8s.io
$ oc delete crd triggerauthentications.keda.k8s.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Custom Metrics Autoscaler Operator を外部 Kafka クラスターや外部 Prometheus サービスなどのクラスター外のサービスに接続する必要がある場合は、必要なサービス CA 証明書を config map に配置します。config map は、Operator がインストールされているのと同じ namespace に存在する必要があります。以下に例を示します。
oc create configmap -n openshift-keda thanos-cert --from-file=ca-cert.pem
$ oc create configmap -n openshift-keda thanos-cert --from-file=ca-cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- OpenShift Container Platform Web コンソールで、Ecosystem → Software Catalog をクリックします。
- 使用可能な Operator のリストから Custom Metrics Autoscaler を選択し、Install をクリックします。
- Install Operator ページで、Installation Mode に All namespaces on the cluster (default) オプションが選択されていることを確認します。これにより、Operator がすべての namespace にインストールされます。
- Installed Namespace に openshift-keda namespace が選択されていることを確認します。クラスターに存在しない場合、OpenShift Container Platform は namespace を作成します。
- Install をクリックします。
Custom Metrics Autoscaler Operator コンポーネントをリスト表示して、インストールを確認します。
- Workloads → Pods に移動します。
-
ドロップダウンメニューから
openshift-kedaプロジェクトを選択し、custom-metrics-autoscaler-operator-*Pod が実行されていることを確認します。 -
Workloads → Deployments に移動して、
custom-metrics-autoscaler-operatorデプロイメントが実行されていることを確認します。
オプション: 次のコマンドを使用して、OpenShift CLI でインストールを確認します。
oc get all -n openshift-keda
$ oc get all -n openshift-kedaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような出力が表示されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. Keda Controller CR の編集 リンクのコピーリンクがクリップボードにコピーされました!
Custom Metrics Autoscaler Operator のインストール中に自動的にインストールされる KedaController カスタムリソース (CR) を変更するには、次の手順に従います。
手順
- OpenShift Container Platform Web コンソールで、Ecosystem → Installed Operator をクリックします。
- Custom Metrics Autoscaler をクリックします。
- Operator Details ページで、KedaController タブをクリックします。
KedaController タブで、Create KedaController をクリックしてファイルを編集します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Custom Metrics Autoscaler Operator がアプリケーションをスケーリングする単一の namespace を指定します。空白のままにするか、または空にして、すべての namespace でアプリケーションをスケーリングします。このフィールドは、namespace があるか、空である必要があります。デフォルト値は空です。
- 2
- Custom Metrics Autoscaler Operator ログメッセージの詳細レベルを指定します。許可される値は
debug、info、errorです。デフォルトはinfoです。 - 3
- Custom Metrics Autoscaler Operator ログメッセージのログ形式を指定します。許可される値は
consoleまたはjsonです。デフォルトはconsoleです。 - 4
- オプション: CA 証明書を持つ 1 つ以上の config map を指定します。Custom Metrics Autoscaler Operator はこれを使用して、TLS 対応のメトリクスソースにセキュアに接続できます。
- 5
- オプション: コンテナーのマウントパスを追加します。
- 6
- オプション:
volumesブロックを追加し、各 projected ボリュームのソースをリストします。 - 7
- Custom Metrics Autoscaler Metrics Server のログレベルを指定します。使用可能な値は、
infoの場合は0、debugの場合は4です。デフォルトは0です。 - 8
- Custom Metrics Autoscaler Operator の監査ログをアクティブにして、使用する監査ポリシーを指定します (「監査ログの設定」セクションを参照)。
- Save をクリックして、変更を保存します。
3.4. カスタムメトリクスオートスケーラートリガーについて リンクのコピーリンクがクリップボードにコピーされました!
スケーラーとも呼ばれるトリガーは、Custom Metrics Autoscaler Operator が Pod をスケーリングするために使用するメトリクスを提供します。
カスタムメトリクスオートスケーラーは現在、Prometheus、CPU、メモリー、Apache Kafka、cron トリガーをサポートしています。
以下のセクションで説明するように、ScaledObject または ScaledJob カスタムリソースを使用して、特定のオブジェクトのトリガーを設定します。
scaled object で使用 する認証局、または クラスター内のすべてのスケーラー用 の認証局を設定できます。
3.4.1. Prometheus トリガーについて リンクのコピーリンクがクリップボードにコピーされました!
Prometheus メトリクスに基づいて Pod をスケーリングできます。このメトリクスは、インストール済みの OpenShift Container Platform モニタリングまたは外部 Prometheus サーバーをメトリクスソースとして使用できます。OpenShift Container Platform モニタリングをメトリクスのソースとして使用するために必要な設定は、「OpenShift Container Platform モニタリングを使用するためのカスタムメトリクスオートスケーラーの設定」を参照してください。
カスタムメトリクスオートスケーラーがスケーリングしているアプリケーションから Prometheus がメトリクスを収集している場合は、カスタムリソースで最小レプリカ数を 0 に設定しないでください。アプリケーション Pod がないと、カスタムメトリクスオートスケーラーにスケーリングの基準となるメトリクスが提供されません。
Prometheus ターゲットを使用した scaled object の例
- 1
- Prometheus をトリガータイプとして指定します。
- 2
- Prometheus サーバーのアドレスを指定します。この例では、OpenShift Container Platform モニタリングを使用します。
- 3
- オプション: スケーリングするオブジェクトの namespace を指定します。メトリクスのソースとして OpenShift Container Platform モニタリングを使用する場合、このパラメーターは必須です。
- 4
external.metrics.k8s.ioAPI でメトリクスを識別する名前を指定します。複数のトリガーを使用している場合、すべてのメトリクス名が一意である必要があります。- 5
- スケーリングをトリガーする値を指定します。引用符で囲まれた文字列値として指定する必要があります。
- 6
- 使用する Prometheus クエリーを指定します。
- 7
- 使用する認証方法を指定します。Prometheus スケーラーは、ベアラー認証 (
bearer)、Basic 認証 (basic)、または TLS 認証 (tls) をサポートしています。以下のセクションで説明するように、トリガー認証で特定の認証パラメーターを設定します。必要に応じて、シークレットを使用することもできます。 - 8
- 9
- オプション: Prometheus ターゲットが失われた場合のトリガーの処理方法を指定します。
-
trueの場合、Prometheus ターゲットが失われても、トリガーは動作し続けます。これがデフォルトの動作です。 -
falseの場合、Prometheus ターゲットが失われると、トリガーはエラーを返します。
-
- 10
- オプション: 証明書チェックをスキップするかどうかを指定します。たとえば、テスト環境で実行しており、Prometheus エンドポイントで自己署名証明書を使用している場合は、チェックをスキップできます。
-
falseの場合、証明書のチェックが実行されます。これがデフォルトの動作です。 trueの場合、証明書のチェックは実行されません。重要チェックのスキップは推奨されません。
-
- 11
- オプション: この Prometheus トリガーで使用される HTTP クライアントの HTTP 要求タイムアウトをミリ秒単位で指定します。この値は、グローバルタイムアウト設定をオーバーライドします。
3.4.1.1. Prometheus と DCGM メトリクスを使用した GPU ベースの自動スケーリングの設定 リンクのコピーリンクがクリップボードにコピーされました!
カスタムメトリクスオートスケーラーを NVIDIA データセンター GPU マネージャー (DCGM) メトリクスとともに使用すると、GPU 使用率に基づいてワークロードをスケーリングできます。これは、GPU リソースを必要とする AI および機械学習のワークロードに特に役立ちます。
GPU ベースの自動スケーリングのために Prometheus ターゲットを使用する scaled object の例
- 1
- 維持するレプリカの最小数を指定します。GPU ワークロードの場合は、メトリクスが継続的に収集されるように、これを
0に設定しないください。 - 2
- スケールアップ操作中に許可するレプリカの最大数を指定します。
- 3
- スケーリングをトリガーする GPU 使用率のしきい値をパーセンテージで指定します。GPU の平均使用率が 90% を超えると、オートスケーラーがデプロイメントをスケールアップします。
- 4
- すべての GPU デバイスの GPU 使用率を監視するために、NVIDIA DCGM メトリクスを使用して Prometheus クエリーを指定します。
DCGM_FI_DEV_GPU_UTILメトリクスは、GPU 使用率を提供します。
3.4.1.2. OpenShift Container Platform モニタリングを使用するためのカスタムメトリクスオートスケーラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
カスタムメトリクスオートスケーラーが使用するメトリクスのソースとして、インストール済みの OpenShift Container Platform Prometheus モニタリングを使用できます。ただし、実行する必要がある追加の設定がいくつかあります。
scaled object が OpenShift Container Platform Prometheus メトリクスを読み取れるように、トリガー認証またはクラスタートリガー認証を使用して、必要な認証情報を提供する必要があります。以下の手順は、使用するトリガー認証方式によって異なります。トリガー認証の詳細は、「カスタムメトリクスオートスケーラーのトリガー認証について」を参照してください。
これらの手順は、外部 Prometheus ソースには必要ありません。
このセクションで説明するように、次のタスクを実行する必要があります。
- サービスアカウントを作成します。
- トリガー認証を作成します。
- ロールを作成します。
- そのロールをサービスアカウントに追加します。
- Prometheus が使用するトリガー認証オブジェクトでトークンを参照します。
前提条件
- OpenShift Container Platform モニタリングをインストールしている必要がある。
- ユーザー定義のワークロードのモニタリングを、OpenShift Container Platform モニタリングで有効にする必要がある (ユーザー定義のワークロードモニタリング設定マップの作成 セクションで説明)。
- Custom Metrics Autoscaler Operator をインストールしている。
手順
適切なプロジェクトに切り替えます。
oc project <project_name>
$ oc project <project_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 次のプロジェクトのいずれかを指定します。
- トリガー認証を使用している場合は、スケーリングするオブジェクトを含むプロジェクトを指定します。
-
クラスタートリガー認証を使用している場合は、
openshift-kedaプロジェクトを指定します。
クラスターにサービスアカウントがない場合は作成します。
次のコマンドを使用して、
service accountオブジェクトを作成します。oc create serviceaccount thanos
$ oc create serviceaccount thanos1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サービスアカウントの名前を指定します。
サービスアカウントトークンを使用してトリガー認証を作成します。
以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR オブジェクトを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Thanos メトリクスを読み取るためのロールを作成します。
次のパラメーターを使用して YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR オブジェクトを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Thanos メトリクスを読み取るためのロールバインディングを作成します。
以下のような YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 次のオブジェクト型のいずれかを指定します。
-
トリガー認証を使用している場合は、
RoleBindingを指定します。 -
クラスタートリガー認証を使用している場合は、
ClusterRoleBindingを指定します。
-
トリガー認証を使用している場合は、
- 2
- 作成したロールの名前を指定します。
- 3
- 次のプロジェクトのいずれかを指定します。
- トリガー認証を使用している場合は、スケーリングするオブジェクトを含むプロジェクトを指定します。
-
クラスタートリガー認証を使用している場合は、
openshift-kedaプロジェクトを指定します。
- 4
- ロールにバインドするサービスアカウントの名前を指定します。
- 5
- サービスアカウントを先に作成したプロジェクトを指定します。
CR オブジェクトを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
「カスタムメトリクスオートスケーラーの追加方法について」で説明されているとおり、スケーリングされたオブジェクトまたはスケーリングされたジョブをデプロイして、アプリケーションの自動スケーリングを有効化できます。OpenShift Container Platform モニタリングをソースとして使用するには、トリガーまたはスケーラーに以下のパラメーターを含める必要があります。
-
triggers.typeはprometheusにしてください。 -
triggers.metadata.serverAddressはhttps://thanos-querier.openshift-monitoring.svc.cluster.local:9092にしてください。 -
triggers.metadata.authModesはbearerにしてください。 -
triggers.metadata.namespaceは、スケーリングするオブジェクトの namespace に設定してください。 -
triggers.authenticationRefは、直前の手順で指定されたトリガー認証リソースを指す必要があります。
3.4.2. CPU トリガーについて リンクのコピーリンクがクリップボードにコピーされました!
CPU メトリクスに基づいて Pod をスケーリングできます。このトリガーは、クラスターメトリクスをメトリクスのソースとして使用します。
カスタムメトリクスオートスケーラーは、オブジェクトに関連付けられた Pod をスケーリングして、指定された CPU 使用率を維持します。オートスケーラーは、すべての Pod で指定された CPU 使用率を維持するために、最小数と最大数の間でレプリカ数を増減します。メモリートリガーは、Pod 全体のメモリー使用率を考慮します。Pod に複数のコンテナーがある場合、メモリートリガーは Pod 内にあるすべてのコンテナーの合計メモリー使用率を考慮します。
-
このトリガーは、
ScaledJobカスタムリソースでは使用できません。 -
メモリートリガーを使用してオブジェクトをスケーリングすると、複数のトリガーを使用している場合でも、オブジェクトは
0にスケーリングされません。
CPU ターゲットを使用した scaled object の例
- 1
- トリガータイプとして CPU を指定します。
- 2
- 使用するメトリクスのタイプ (
UtilizationまたはAverageValueのいずれか) を指定します。 - 3
- スケーリングをトリガーする値を指定します。引用符で囲まれた文字列値として指定する必要があります。
-
Utilizationを使用する場合、ターゲット値は、関連する全 Pod のリソースメトリクスの平均値であり、Pod のリソースの要求値に占めるパーセンテージとして表されます。 -
AverageValueを使用する場合、ターゲット値は、関連する全 Pod のメトリクスの平均値です。
-
- 4
- スケールダウン時のレプリカの最小数を指定します。CPU トリガーの場合は、
1以上の値を入力します。CPU メトリクスのみを使用している場合、HPA はゼロにスケールできないためです。
3.4.3. メモリートリガーについて リンクのコピーリンクがクリップボードにコピーされました!
メモリーメトリクスに基づいて Pod をスケーリングできます。このトリガーは、クラスターメトリクスをメトリクスのソースとして使用します。
カスタムメトリクスオートスケーラーは、オブジェクトに関連付けられた Pod をスケーリングして、指定されたメモリー使用率を維持します。オートスケーラーは、すべての Pod で指定のメモリー使用率を維持するために、最小数と最大数の間でレプリカ数を増減します。メモリートリガーは、Pod 全体のメモリー使用率を考慮します。Pod に複数のコンテナーがある場合、メモリー使用率はすべてのコンテナーの合計になります。
-
このトリガーは、
ScaledJobカスタムリソースでは使用できません。 -
メモリートリガーを使用してオブジェクトをスケーリングすると、複数のトリガーを使用している場合でも、オブジェクトは
0にスケーリングされません。
メモリーターゲットを使用した scaled object の例
- 1
- トリガータイプとしてメモリーを指定します。
- 2
- 使用するメトリクスのタイプ (
UtilizationまたはAverageValueのいずれか) を指定します。 - 3
- スケーリングをトリガーする値を指定します。引用符で囲まれた文字列値として指定する必要があります。
-
Utilizationを使用する場合、ターゲット値は、関連する全 Pod のリソースメトリクスの平均値であり、Pod のリソースの要求値に占めるパーセンテージとして表されます。 -
AverageValueを使用する場合、ターゲット値は、関連する全 Pod のメトリクスの平均値です。
-
- 4
- オプション: Pod 全体ではなく、そのコンテナーのみのメモリー使用率に基づいて、スケーリングする個々のコンテナーを指定します。この例では、
apiという名前のコンテナーのみがスケーリングされます。
3.4.4. Kafka トリガーについて リンクのコピーリンクがクリップボードにコピーされました!
Apache Kafka トピックまたは Kafka プロトコルをサポートするその他のサービスに基づいて Pod をスケーリングできます。カスタムメトリクスオートスケーラーは、スケーリングされるオブジェクトまたはスケーリングされるジョブで allowIdleConsumers パラメーターを true に設定しない限り、Kafka パーティションの数を超えてスケーリングしません。
コンシューマーグループの数がトピック内のパーティションの数を超えると、余分なコンシューマーグループはそのままアイドル状態になります。これを回避するために、デフォルトではレプリカの数は次の値を超えません。
- トピックのパーティションの数 (トピックが指定されている場合)。
- コンシューマーグループ内の全トピックのパーティション数 (トピックが指定されていない場合)。
-
スケーリングされるオブジェクトまたはスケーリングされるジョブの CR で指定された
maxReplicaCount。
これらのデフォルトの動作は、allowIdleConsumers パラメーターを使用して無効にすることができます。
Kafka ターゲットを使用した scaled object の例
- 1
- トリガータイプとして Kafka を指定します。
- 2
- Kafka がオフセットラグを処理している Kafka トピックの名前を指定します。
- 3
- 接続する Kafka ブローカーのコンマ区切りリストを指定します。
- 4
- トピックのオフセットの確認と、関連するラグの処理に使用される Kafka コンシューマーグループの名前を指定します。
- 5
- オプション: スケーリングをトリガーする平均ターゲット値を指定します。引用符で囲まれた文字列値として指定する必要があります。デフォルトは
5です。 - 6
- オプション: アクティベーションフェーズのターゲット値を指定します。引用符で囲まれた文字列値として指定する必要があります。
- 7
- オプション: Kafka コンシューマーの Kafka オフセットリセットポリシーを指定します。使用可能な値は
latestおよびearliestです。デフォルトはlatestです。 - 8
- オプション: Kafka レプリカの数がトピックのパーティションの数を超えることを許可するかどうかを指定します。
-
trueの場合、Kafka レプリカの数はトピックのパーティションの数を超えることができます。これにより、Kafka コンシューマーがアイドル状態になることが許容されます。 -
falseの場合、Kafka レプリカの数はトピックのパーティションの数を超えることはできません。これがデフォルトです。
-
- 9
- Kafka パーティションに有効なオフセットがない場合のトリガーの動作を指定します。
-
trueの場合、そのパーティションのコンシューマーはゼロにスケーリングされます。 -
falseの場合、スケーラーはそのパーティションのために 1 つのコンシューマーを保持します。これがデフォルトです。
-
- 10
- オプション: 現在のオフセットが前のポーリングサイクルの現在のオフセットと同じであるパーティションのパーティションラグをトリガーに含めるか除外するかを指定します。
-
trueの場合、スケーラーはこれらのパーティションのパーティションラグを除外します。 -
falseの場合、すべてのパーティションのコンシューマーラグがすべてトリガーに含まれます。これがデフォルトです。
-
- 11
- オプション: Kafka ブローカーのバージョンを指定します。引用符で囲まれた文字列値として指定する必要があります。デフォルトは
1.0.0です。 - 12
- オプション: スケーリングのスコープを適用するパーティション ID のコンマ区切りリストを指定します。指定されている場合、ラグの計算時にリスト内の ID のみが考慮されます。引用符で囲まれた文字列値として指定する必要があります。デフォルトでは、すべてのパーティションが考慮されます。
- 13
- オプション: Kafka に TSL クライアント認証を使用するかどうかを指定します。デフォルトは
disableです。TLS の設定の詳細は、「カスタムメトリクスオートスケーラートリガー認証について」を参照してください。
3.4.5. Cron トリガーについて リンクのコピーリンクがクリップボードにコピーされました!
Pod は時間範囲に基づいてスケーリングできます。
時間範囲の開始時に、カスタムメトリクスオートスケーラーが、オブジェクトに関連する Pod を、設定された最小 Pod 数から指定された必要な Pod 数にスケーリングします。時間範囲の終了時に、Pod は設定された最小値にスケールダウンされます。期間は cron 形式 で設定する必要があります。
次の例では、この scaled object に関連する Pod を、インド標準時の午前 6 時から午後 6 時 30 分まで 0 から 100 にスケーリングします。
Cron トリガーを使用した scaled object の例
- 1
- 時間枠の終了時にスケールダウンする Pod の最小数を指定します。
- 2
- スケールアップ時のレプリカの最大数を指定します。この値は
desiredReplicasと同じである必要があります。デフォルトは100です。 - 3
- Cron トリガーを指定します。
- 4
- 時間枠のタイムゾーンを指定します。この値は、IANA Time Zone Database から取得する必要があります。
- 5
- 時間枠の始点を指定します。
- 6
- 時間枠の終点を指定します。
- 7
- 時間枠の始点から終点までの間にスケーリングする Pod の数を指定します。この値は
maxReplicaCountと同じである必要があります。
3.4.6. Kubernetes ワークロードトリガーを理解する リンクのコピーリンクがクリップボードにコピーされました!
特定のラベルセレクターに一致する Pod の数に基づいて Pod をスケーリングできます。
Custom Metrics Autoscaler Operator は、同じ namespace にある特定のラベルが付いた Pod の数を追跡し、ラベル付き Pod の数に基づいて scaled object の Pod との 関係 を計算します。この関係を使用して、Custom Metrics Autoscaler Operator は、ScaledObject または ScaledJob 仕様のスケーリングポリシーに従ってオブジェクトをスケーリングします。
Pod 数には、Succeeded フェーズまたは Failed フェーズの Pod が含まれます。
たとえば、frontend デプロイメントと backend デプロイメントがあるとします。kubernetes-workload トリガーを使用すると、frontend Pod の数に基づいて backend デプロイメントをスケーリングできます。frontend Pod の数が増えると、Operator は指定された比率を維持するために backend Pod をスケーリングします。この例では、app=frontend Pod セレクターを持つ Pod が 10 個ある場合、Operator は、scaled object で設定された 0.5 の比率を維持するために、バックエンド Pod を 5 にスケーリングします。
Kubernetes ワークロードトリガーを使用した scaled object の例
- 1
- Kubernetes ワークロードトリガーを指定します。
- 2
- Pod 数を取得するために使用する 1 つ以上の Pod セレクターやセットベースセレクターをコンマで区切って指定します。
- 3
- スケーリングされたワークロードとセレクターに一致する Pod の数との間のターゲット関係を指定します。この関係は次の式に従って計算されます。
relation = (pods that match the selector) / (scaled workload pods)
relation = (pods that match the selector) / (scaled workload pods)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 4
- オプション: スケーラーアクティベーションフェーズのターゲット値を指定します。デフォルトは
0です。
3.5. カスタムメトリクスオートスケーラートリガー認証について リンクのコピーリンクがクリップボードにコピーされました!
トリガー認証を使用すると、関連付けられたコンテナーで使用できるスケーリングされたオブジェクトまたはスケーリングされたジョブに認証情報を含めることができます。トリガー認証を使用して、OpenShift Container Platform シークレット、プラットフォームネイティブの Pod 認証メカニズム、環境変数などを渡すことができます。
スケーリングするオブジェクトと同じ namespace に TriggerAuthentication オブジェクトを定義します。そのトリガー認証は、その namespace 内のオブジェクトによってのみ使用できます。
または、複数の namespace のオブジェクト間で認証情報を共有するには、すべての namespace で使用できる ClusterTriggerAuthentication オブジェクトを作成できます。
トリガー認証とクラスタートリガー認証は同じ設定を使用します。ただし、クラスタートリガー認証では、スケーリングされたオブジェクトの認証参照に追加の kind パラメーターが必要です。
バインドされたサービスアカウントトークンを使用するトリガー認証の例
バインドされたサービスアカウントトークンを使用するクラスタートリガー認証の例
Basic 認証にシークレットを使用するトリガー認証の例
Basic 認証のシークレットの例
- 1
- トリガー認証に提供するユーザー名とパスワード。
dataスタンザ内の値は、Base64 でエンコードされている必要があります。
CA の詳細にシークレットを使用するトリガー認証の例
- 1
- スケーリングするオブジェクトの namespace を指定します。
- 2
- このトリガー認証では、メトリクスエンドポイントに接続するときに、認可にシークレットを使用することを指定します。
- 3
- 使用する認証の種類を指定します。
- 4
- 使用するシークレットの名前を指定します。
- 5
- 指定されたパラメーターで使用するシークレットのキーを指定します。
- 6
- メトリクスエンドポイントに接続するときに、カスタム CA の認証パラメーターを指定します。
- 7
- 使用するシークレットの名前を指定します。認証局 (CA) の詳細を含む次のシークレットの例を参照してください。
- 8
- 指定されたパラメーターで使用するシークレットのキーを指定します。
認証局 (CA) の詳細を含むシークレットの例
ベアラートークンを使用するトリガー認証の例
ベアラートークンのシークレットの例
- 1
- ベアラー認証で使用するベアラートークンを指定します。値は Base64 でエンコードされている必要があります。
環境変数を使用するトリガー認証の例
Pod 認証プロバイダーを使用するトリガー認証の例
3.5.1. トリガー認証の使用 リンクのコピーリンクがクリップボードにコピーされました!
トリガー認証とクラスタートリガー認証は、カスタムリソースを使用して認証を作成し、スケーリングされたオブジェクトまたはスケーリングされたジョブへの参照を追加することで使用します。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている。
- バインドされたサービスアカウントトークンを使用している場合は、サービスアカウントが存在している必要があります。
バインドされたサービスアカウントトークンを使用している場合は、Custom Metrics Autoscaler Operator がサービスアカウントからサービスアカウントトークンを要求できるようにするロールベースのアクセス制御 (RBAC) オブジェクトが存在する必要があります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
シークレットを使用している場合は、
Secretオブジェクトが存在している必要があります。
手順
TriggerAuthenticationまたはClusterTriggerAuthenticationオブジェクトを作成します。オブジェクトを定義する YAML ファイルを作成します。
バインドされたサービスアカウントトークンを使用したトリガー認証の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TriggerAuthenticationオブジェクトを作成します。oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
トリガー認証を使用する
ScaledObjectYAML ファイルを作成または編集します。次のコマンドを実行して、オブジェクトを定義する YAML ファイルを作成します。
トリガー認証を使用したスケーリングされたオブジェクトの例