This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第5章 クォータ
5.1. プロジェクトごとのリソースクォータ
ResourceQuota オブジェクトで定義される リソースクォータ は、プロジェクトごとにリソース消費量の総計を制限する制約を指定します。これは、タイプ別にプロジェクトで作成できるオブジェクトの数量を制限すると共に、そのプロジェクトのリソースが消費できるコンピュートリソースおよびストレージの合計量を制限することができます。
本書では、リソースクォータの仕組みや、クラスター管理者がリソースクォータはプロジェクトごとにどのように設定し、管理できるか、および開発者やクラスター管理者がそれらをどのように表示できるかについて説明します。
5.1.1. クォータで管理されるリソース
以下では、クォータで管理できる一連のコンピュートリソースとオブジェクトタイプについて説明します。
						status.phase in (Failed、Succeeded) が true の場合、Pod は終了状態にあります。
					
| リソース名 | 説明 | 
|---|---|
| 
									 | 
									非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 | 
| 
									 | 
									非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません  | 
| 
									 | 
									非終了状態のすべての Pod でのローカルの一時ストレージ要求の合計は、この値を超えることができません。 | 
| 
									 | 
									非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 | 
| 
									 | 
									非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません  | 
| 
									 | 
									非終了状態のすべての Pod における一時ストレージ要求の合計は、この値を超えることができません。 | 
| 
									 | 非終了状態のすべての Pod での CPU 制限の合計はこの値を超えることができません。 | 
| 
									 | 非終了状態のすべての Pod でのメモリー制限の合計はこの値を超えることができません。 | 
| 
									 | 非終了状態のすべての Pod における一時ストレージ制限の合計は、この値を超えることができません。このリソースは、一時ストレージのテクノロジープレビュー機能が有効にされている場合にのみ利用できます。この機能はデフォルトでは無効にされています。 | 
| リソース名 | 説明 | 
|---|---|
| 
									 | 任意の状態のすべての Persistent Volume Claim (永続ボリューム要求、PVC) でのストレージ要求の合計は、この値を超えることができません。 | 
| 
									 | プロジェクトに存在できる Persistent Volume Claim (永続ボリューム要求、PVC) の合計数です。 | 
| 
									 | 一致するストレージクラスを持つ、任意の状態のすべての Persistent Volume Claim (永続ボリューム要求、PVC) でのストレージ要求の合計はこの値を超えることができません。 | 
| 
									 | プロジェクトに存在できる、一致するストレージクラスを持つ Persistent Volume Claim (永続ボリューム要求、PVC) の合計数です。 | 
| リソース名 | 説明 | 
|---|---|
| 
									 | プロジェクトに存在できる非終了状態の Pod の合計数です。 | 
| 
									 | プロジェクトに存在できる ReplicationController の合計数です。 | 
| 
									 | プロジェクトに存在できるリソースクォータの合計数です。 | 
| 
									 | プロジェクトに存在できるサービスの合計数です。 | 
| 
									 | 
									プロジェクトに存在できるタイプ  | 
| 
									 | 
									プロジェクトに存在できるタイプ  | 
| 
									 | プロジェクトに存在できるシークレットの合計数です。 | 
| 
									 | 
									プロジェクトに存在できる  | 
| 
									 | プロジェクトに存在できる Persistent Volume Claim (永続ボリューム要求、PVC) の合計数です。 | 
| 
									 | プロジェクトに存在できるイメージストリームの合計数です。 | 
5.1.2. クォータのスコープ
各クォータには スコープ のセットが関連付けられます。クォータは、列挙されたスコープの交差部分に一致する場合にのみリソースの使用状況を測定します。
スコープをクォータに追加すると、クォータが適用されるリソースのセットを制限できます。許可されるセット以外のリソースを設定すると、検証エラーが発生します。
| スコープ | 説明 | 
| 
									 | 
									 | 
| 
									 | 
									 | 
| 
									 | 
									 | 
| 
									 | 
									 | 
					BestEffort スコープは、以下のリソースに制限するようにクォータを制限します。
				
- 
							pods
					Terminating、NotTerminating、および NotBestEffort スコープは、以下のリソースを追跡するようにクォータを制限します。
				
- 
							pods
- 
							memory
- 
							requests.memory
- 
							limits.memory
- 
							cpu
- 
							requests.cpu
- 
							limits.cpu
- 
							ephemeral-storage
- 
							requests.ephemeral-storage
- 
							limits.ephemeral-storage
一時ストレージ要求と制限は、テクノロジープレビューとして提供されている一時ストレージを有効にした場合にのみ適用されます。この機能はデフォルトでは無効にされています。
5.1.3. クォータの実施
プロジェクトのリソースクォータが最初に作成されると、プロジェクトは、更新された使用状況の統計が計算されるまでクォータ制約の違反を引き起こす可能性のある新規リソースの作成機能を制限します。
クォータが作成され、使用状況の統計が更新されると、プロジェクトは新規コンテンツの作成を許可します。リソースを作成または変更する場合、クォータの使用量はリソースの作成または変更要求があるとすぐに増分します。
リソースを削除する場合、クォータの使用量は、プロジェクトのクォータ統計の次回の完全な再計算時に減分されます。設定可能な時間を指定して、クォータ使用量の統計値を現在確認されるシステム値まで下げるのに必要な時間を決定します。
プロジェクト変更がクォータ使用制限を超える場合、サーバーはそのアクションを拒否し、クォータ制約を違反していること、およびシステムで現在確認される使用量の統計値を示す適切なエラーメッセージがユーザーに返されます。
5.1.4. 要求 vs 制限
コンピュートリソースの割り当て時に、各コンテナーは CPU、メモリー、一時ストレージのそれぞれに要求値と制限値を指定できます。クォータはこれらの値のいずれも制限できます。
					クォータに requests.cpu または requests.memory の値が指定されている場合、すべての着信コンテナーがそれらのリソースを明示的に要求することが求められます。クォータに limits.cpu または limits.memory の値が指定されている場合、すべての着信コンテナーがそれらのリソースの明示的な制限を指定することが求められます。
				
5.1.5. リソースクォータ定義の例
core-object-counts.yaml
openshift-object-counts.yaml
- 1
- プロジェクトに存在できるイメージストリームの合計数です。
compute-resources.yaml
- 1
- プロジェクトに存在できる非終了状態の Pod の合計数です。
- 2
- 非終了状態のすべての Pod において、CPU 要求の合計は 1 コアを超えることができません。
- 3
- 非終了状態のすべての Pod において、メモリー要求の合計は 1 Gi を超えることができません。
- 4
- 非終了状態のすべての Pod において、一時ストレージ要求の合計は 2 Gi を超えることができません。
- 5
- 非終了状態のすべての Pod において、CPU 制限の合計は 2 コアを超えることができません。
- 6
- 非終了状態のすべての Pod において、メモリー制限の合計は 2 Gi を超えることができません。
- 7
- 非終了状態のすべての Pod において、一時ストレージ制限の合計は 4 Gi を超えることができません。
besteffort.yaml
compute-resources-long-running.yaml
compute-resources-time-bound.yaml
- 1
- 非終了状態の Pod の合計数です。
- 2
- 非終了状態のすべての Pod において、CPU 制限の合計はこの値を超えることができません。
- 3
- 非終了状態のすべての Pod において、メモリー制限の合計はこの値を超えることができません。
- 4
- 非終了状態のすべての Pod において、一時ストレージ制限の合計はこの値を超えることができません。
- 5
- クォータをspec.activeDeadlineSeconds >=0に設定されている一致する Pod のみに制限します。たとえば、このクォータはビルド Pod またはデプロイヤー Pod に影響を与えますが、web サーバーまたはデータベースなどの長時間実行されない Pod には影響を与えません。
storage-consumption.yaml
- 1
- プロジェクト内の Persistent Volume Claim (永続ボリューム要求、PVC) の合計数です。
- 2
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、要求されるストレージの合計はこの値を超えることができません。
- 3
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、gold ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 4
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、silver ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 5
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、silver ストレージクラスの要求の合計数はこの値を超えることができません。
- 6
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。これが0に設定される場合、bronze ストレージクラスはストレージを要求できないことを意味します。
- 7
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。これが0に設定される場合は、bronze ストレージクラスでは要求を作成できないことを意味します。
5.1.6. クォータの作成
特定のプロジェクトでリソースの使用を制限するためにクォータを作成することができます。
手順
- ファイルにクォータを定義します。
- クォータを作成し、これをプロジェクトに適用するためにファイルを使用します。 - oc create -f <file> [-n <project_name>] - $ oc create -f <file> [-n <project_name>]- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は例になります。 - oc create -f core-object-counts.yaml -n demoproject - $ oc create -f core-object-counts.yaml -n demoproject- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.1.6.1. オブジェクトカウントクォータの作成
						BuildConfig および DeploymentConfig などの、OpenShift Container Platform の標準的な namespace を使用しているリソースタイプのすべてにオブジェクトカウントクォータを作成できます。オブジェクトクォータカウントは、定義されたクォータをすべての標準的な namespace を使用しているリソースタイプに設定します。
					
リソースクォータの使用時に、オブジェクトがサーバーストレージにある場合、そのオブジェクトはクォータに基づいてチャージされます。以下のクォータのタイプはストレージリソースが使い切られることから保護するのに役立ちます。
手順
リソースのオブジェクトカウントクォータを設定するには、以下を実行します。
- 以下のコマンドを実行します。 - oc create quota <name> \ --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota>- $ oc create quota <name> \ --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- <resource>はリソースの名前であり、- <group>は API グループです (該当する場合)。リソースおよびそれらの関連付けられた API グループの一覧に- oc api-resourcesコマンドを使用します。
 - 以下は例になります。 - oc create quota test \ --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4- $ oc create quota test \ --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4 resourcequota "test" created- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - この例では、一覧表示されたリソースをクラスター内の各プロジェクトのハード制限に制限します。 
- クォータが作成されていることを確認します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.1.6.2. 拡張リソースのリソースクォータの設定
						リソースのオーバーコミットは拡張リソースには許可されません。そのため、クォータで同じ拡張リソースについて requests および limits を指定する必要があります。現時点で、プレフィックス requests. のあるクォータ項目のみが拡張リソースに許可されます。以下は、GPU リソース nvidia.com/gpu のリソースクォータを設定する方法についてのシナリオ例です。
					
手順
- クラスター内のノードで利用可能な GPU の数を判別します。以下は例になります。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - この例では、2 つの GPU が利用可能です。 
- namespace - nvidiaにクォータを設定します。この例では、クォータは- 1です。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- クォータを作成します。 - oc create -f gpu-quota.yaml - # oc create -f gpu-quota.yaml resourcequota/gpu-quota created- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- namespace に正しいクォータが設定されていることを確認します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 単一 GPU を要求する Pod を実行します。 - oc create -f gpu-pod.yaml - # oc create -f gpu-pod.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Pod が実行されていることを確認します。 - oc get pods - # oc get pods NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- クォータ - Usedのカウンターが正しいことを確認します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- nvidianamespace で 2 番目の GPU Pod の作成を試行します。2 つの GPU があるので、これをノード上で実行することは可能です。- oc create -f gpu-pod.yaml - # oc create -f gpu-pod.yaml Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - クォータが 1 GPU であり、この Pod がそのクォータを超える 2 つ目の GPU の割り当てを試行したため、Forbidden エラーメッセージが表示されることが予想されます。 
5.1.7. クォータの表示
Web コンソールでプロジェクトの Quota ページに移動し、プロジェクトのクォータで定義されるハード制限に関連する使用状況の統計を表示できます。
CLI を使用してクォータの詳細を表示することもできます。
手順
- プロジェクトで定義されるクォータの一覧を取得します。たとえば、 - demoprojectというプロジェクトの場合、以下を実行します。- oc get quota -n demoproject - $ oc get quota -n demoproject NAME AGE besteffort 11m compute-resources 2m core-object-counts 29m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 関連するクォータについて記述します。たとえば、 - core-object-countsクォータの場合、以下を実行します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.1.8. 明示的なリソースクォータの設定
プロジェクト要求テンプレートで明示的なリソースクォータを設定し、新規プロジェクトに特定のリソースクォータを適用します。
前提条件
- cluster-admin ロールを持つユーザーとしてのクラスターへのアクセスがあること。
- 
							OpenShift CLI (oc) をインストールします。
手順
- プロジェクト要求テンプレートにリソースクォータ定義を追加します。 - プロジェクト要求テンプレートがクラスターに存在しない場合: - ブートストラッププロジェクトテンプレートを作成し、これを - template.yamlというファイルに出力します。- oc adm create-bootstrap-project-template -o yaml > template.yaml - $ oc adm create-bootstrap-project-template -o yaml > template.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- リソースクォータの定義を - template.yamlに追加します。以下の例では、「storage-consumption」という名前のリソースクォータを定義します。テンプレートの- parameters:セクションの前に定義を追加する必要があります。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- プロジェクト内の Persistent Volume Claim (永続ボリューム要求、PVC) の合計数です。
- 2
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、要求されるストレージの合計はこの値を超えることができません。
- 3
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、gold ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 4
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、silver ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 5
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、silver ストレージクラスの要求の合計数はこの値を超えることができません。
- 6
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。この値が0に設定される場合、bronze ストレージクラスはストレージを要求できません。
- 7
- プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。この値が0に設定される場合、bronze ストレージクラスは要求を作成できません。
 
- openshift-confignamespace の変更された- template.yamlファイルでプロジェクト要求テンプレートを作成します。- oc create -f template.yaml -n openshift-config - $ oc create -f template.yaml -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- 設定を - kubectl.kubernetes.io/last-applied-configurationアノテーションとして追加するには、- --save-configオプションを- oc createコマンドに追加します。- デフォルトでは、テンプレートは - project-requestという名前になります。
 
- プロジェクト要求テンプレートがクラスター内にすでに存在する場合は、以下を実行します。 注記- 設定ファイルを使用してクラスター内のオブジェクトを宣言的または命令的に管理する場合は、これらのファイルを使用して既存のプロジェクト要求テンプレートを編集します。 - openshift-confignamespace のテンプレートを一覧表示します。- oc get templates -n openshift-config - $ oc get templates -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 既存のプロジェクト要求テンプレートを編集します。 - oc edit template <project_request_template> -n openshift-config - $ oc edit template <project_request_template> -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
											前述の「storage-consumption」の例などのリソースクォータ定義を既存のテンプレートに追加します。テンプレートの parameters:セクションの前に定義を追加する必要があります。
 
 
- プロジェクト要求テンプレートを作成した場合は、クラスターのプロジェクト設定リソースでこれを参照します。 - 編集するプロジェクト設定リソースにアクセスします。 - Web コンソールの使用 - 
													Administration Cluster Settings ページに移動します。 
- Global Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
 
- 
													Administration 
- CLI の使用 - project.config.openshift.io/clusterリソースを編集します。- oc edit project.config.openshift.io/cluster - $ oc edit project.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
 
- プロジェクト設定リソースの - specセクションを更新し、- projectRequestTemplateおよび- nameパラメーターを追加します。以下の例は、- project-requestというデフォルトのプロジェクト要求テンプレートを参照します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- プロジェクトの作成時にリソースクォータが適用されていることを確認します。 - プロジェクトを作成します。 - oc new-project <project_name> - $ oc new-project <project_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- プロジェクトのリソースクォータを一覧表示します。 - oc get resourcequotas - $ oc get resourcequotas- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- リソースクォータを詳細に記述します。 - oc describe resourcequotas <resource_quota_name> - $ oc describe resourcequotas <resource_quota_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow