第17章 制限範囲の設定
17.1. 概要
LimitRange オブジェクトで定義される制限範囲は、Pod、コンテナー、イメージ、イメージストリーム、および Persistent Volume Claim (永続ボリューム要求、PVC) のレベルでプロジェクトのコンピュートリソース制約を列挙し、Pod、コンテナー、イメージ、イメージストリームまたは Persistent Volume Claim (永続ボリューム要求、PVC) で消費できるリソースの量を指定します。
すべてのリソース作成および変更要求は、プロジェクトの各 LimitRange オブジェクトに対して評価されます。リソースが列挙された制約のいずれかに違反する場合、リソースは拒否されます。リソースが明示的な値を指定しない場合で、制約がデフォルト値をサポートする場合は、デフォルト値がリソースに適用されます。
コア Limit Range オブジェクトの定義
apiVersion: "v1" kind: "LimitRange" metadata: name: "core-resource-limits" 1 spec: limits: - type: "Pod" max: cpu: "2" 2 memory: "1Gi" 3 min: cpu: "200m" 4 memory: "6Mi" 5 - type: "Container" max: cpu: "2" 6 memory: "1Gi" 7 min: cpu: "100m" 8 memory: "4Mi" 9 default: cpu: "300m" 10 memory: "200Mi" 11 defaultRequest: cpu: "200m" 12 memory: "100Mi" 13 maxLimitRequestRatio: cpu: "10" 14
- 1
- 制限範囲オブジェクトの名前です。
- 2
- すべてのコンテナーにおいて Pod がノードで要求できる CPU の最大量です。
- 3
- すべてのコンテナーにおいて Pod がノードで要求できるメモリーの最大量です。
- 4
- すべてのコンテナーにおいて Pod がノードで要求できる CPU の最小量です。
- 5
- すべてのコンテナーにおいて Pod がノードで要求できるメモリーの最小量です。
- 6
- Pod の単一コンテナーが要求できる CPU の最大量です。
- 7
- Pod の単一コンテナーが要求できるメモリーの最大量です。
- 8
- Pod の単一コンテナーが要求できる CPU の最小量です。
- 9
- Pod の単一コンテナーが要求できるメモリーの最小量です。
- 10
- 指定されない場合にコンテナーによる使用制限となる CPU のデフォルト量です。
- 11
- 指定されない場合にコンテナーによる使用制限となるメモリーのデフォルト量です。
- 12
- 指定されない場合にコンテナーによる要求制限となる CPU のデフォルト量です。
- 13
- 指定されない場合にコンテナーの要求制限となるメモリーのデフォルト量です。
- 14
- 制限の要求に対する比率でコンテナーで実行できる CPU バーストの最大量です。
CPU およびメモリーの測定方法についての詳細は、「コンピュートリソース」を参照してください。
OpenShift Container Platform の Limit Range オブジェクトの定義
apiVersion: "v1"
kind: "LimitRange"
metadata:
name: "openshift-resource-limits"
spec:
limits:
- type: openshift.io/Image
max:
storage: 1Gi 1
- type: openshift.io/ImageStream
max:
openshift.io/image-tags: 20 2
openshift.io/images: 30 3
コアおよび OpenShift Container Platform リソースのどちらも単一の制限範囲オブジェクトで指定できます。ここでは明確にする目的でこれらを 2 つのサンプルに分けています。
17.1.1. コンテナーの制限
サポートされるリソース:
- CPU
- メモリー
サポートされる制約:
コンテナーごとに設定されます。指定される場合、以下が一致している必要があります。
表17.1 コンテナー
| 制約 | 動作 |
|---|---|
|
|
設定で |
|
|
設定で |
|
|
設定で
たとえば、コンテナーの |
サポートされるデフォルト:
Default[resource]-
指定がない場合は
container.resources.limit[resource]を所定の値にデフォルト設定します。 Default Requests[resource]-
指定がない場合は、
container.resources.requests[resource]を所定の値にデフォルト設定します。
17.1.2. Pod の制限
サポートされるリソース:
- CPU
- メモリー
サポートされる制約:
Pod のすべてのコンテナーにおいて、以下が一致している必要があります。
表17.2 Pod
| 制約 | 実施される動作 |
|---|---|
|
|
|
|
|
|
|
|
|
17.1.3. イメージの制限
サポートされるリソース:
- ストレージ
リソースタイプ名:
-
openshift.io/Image
イメージごとに設定されます。指定される場合、以下が一致している必要があります。
表17.3 イメージ
| 制約 | 動作 |
|---|---|
|
|
|
制限を超える Blob がレジストリーにアップロードされないようにするために、クォータを実施するようレジストリーを設定する必要があります。環境変数 REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ENFORCEQUOTA は true に設定される必要があります。この設定は、新規デプロイメントについてデフォルトで実行されます。古いデプロイメント設定を更新するには、「Enforcing quota in the Registry」を参照してください。
イメージのサイズは、アップロードされるイメージのマニフェストで常に表示される訳ではありません。これは、とりわけ Docker 1.10 以上で作成され、v2 レジストリーにプッシュされたイメージの場合に該当します。このようなイメージが古い Docker デーモンでプルされると、イメージマニフェストはレジストリーによってスキーマ v1 に変換されますが、この場合サイズ情報が欠落します。イメージに設定されるストレージの制限がこのアップロードを防ぐことはありません。
現在、この問題への対応が行われています。
17.1.4. イメージストリームの制限
サポートされるリソース:
-
openshift.io/image-tags -
openshift.io/images
リソースタイプ名:
-
openshift.io/ImageStream
イメージストリームごとに設定されます。指定される場合、以下が一致している必要があります。
表17.4 ImageStream
| 制約 | 動作 |
|---|---|
|
|
|
|
|
|
17.1.4.1. イメージ参照の数
リソース openshift.io/image-tags は、一意のイメージ参照を表します。使用できる参照は、ImageStreamTag、ImageStreamImage および DockerImage になります。それらは oc tag および oc import-image コマンドを使用するか、または タグのトラッキングを使用して作成されます。内部参照か外部参照であるかの区別はありませんが、イメージストリームの仕様でタグ付けされる一意の参照はそれぞれ 1 回のみカウントされます。この参照は内部コンテナーレジストリーへのプッシュを制限することはありませんが、タグの制限に役立ちます。
リソース openshift.io/images は、イメージストリームのステータスに記録される一意のイメージ名を表します。これにより、内部レジストリーにプッシュできるイメージ数を制限できます。内部参照か外部参照であるかの区別はありません。
17.1.5. PersistentVolumeClaim の制限
サポートされるリソース:
- ストレージ
サポートされる制約:
プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、以下が一致している必要があります。
表17.5 Pod
| 制約 | 実施される動作 |
|---|---|
|
|
Min[resource] ⇐ claim.spec.resources.requests[resource] (必須) |
|
|
claim.spec.resources.requests[resource] (必須) ⇐ Max[resource] |
Limit Range オブジェクトの定義
{
"apiVersion": "v1",
"kind": "LimitRange",
"metadata": {
"name": "pvcs" 1
},
"spec": {
"limits": [{
"type": "PersistentVolumeClaim",
"min": {
"storage": "2Gi" 2
},
"max": {
"storage": "50Gi" 3
}
}
]
}
}
17.2. 制限範囲の作成
制限範囲をプロジェクトに適用するには、必要な仕様に基づいてファイルシステムで制限範囲オブジェクトの定義を作成します。以下を実行します。
$ oc create -f <limit_range_file> -n <project>
17.3. 制限の表示
web コンソールでプロジェクトの Quota ページに移動し、プロジェクトで定義される制限範囲を表示できます。
CLI を仕様して制限範囲の詳細を表示することもできます。
まず、プロジェクトで定義される制限範囲の一覧を取得します。たとえば、demoproject というプロジェクトの場合は以下のようになります。
$ oc get limits -n demoproject NAME AGE resource-limits 6d
次に、関連のある制限範囲の説明を表示します。たとえば、resource-limits 制限範囲の場合は以下のようになります。
$ oc describe limits resource-limits -n demoproject Name: resource-limits Namespace: demoproject Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio ---- -------- --- --- --------------- ------------- ----------------------- Pod cpu 200m 2 - - - Pod memory 6Mi 1Gi - - - Container cpu 100m 2 200m 300m 10 Container memory 4Mi 1Gi 100Mi 200Mi - openshift.io/Image storage - 1Gi - - - openshift.io/ImageStream openshift.io/image - 12 - - - openshift.io/ImageStream openshift.io/image-tags - 10 - - -
17.4. 制限の削除
プロジェクトの制限を実施しないように有効な制限範囲を削除します。
$ oc delete limits <limit_name>

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.