第19章 制限範囲の設定
19.1. 概要
LimitRange
オブジェクトで定義される制限範囲は、Pod、コンテナー、イメージ、イメージストリーム、および Persistent Volume Claim (永続ボリューム要求、PVC) のレベルでプロジェクトのコンピュートリソース制約を列挙し、Pod、コンテナー、イメージ、イメージストリームまたは Persistent Volume Claim (永続ボリューム要求、PVC) で消費できるリソースの量を指定します。
すべてのリソース作成および変更要求は、プロジェクトの各 LimitRange
オブジェクトに対して評価されます。リソースが列挙された制約のいずれかに違反する場合、リソースは拒否されます。リソースが明示的な値を指定しない場合で、制約がデフォルト値をサポートする場合は、デフォルト値がリソースに適用されます。
OpenShift Container Platform 3.10 では、一時ストレージのテクノロジープレビューを使用して一時ストレージの制限と要求を指定できます。この機能は、デフォルトでは無効になっています。この機能を有効にするには、「一時ストレージの設定」を参照してください。
コア 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 - type: "Pod" max: cpu: "2" 4 memory: "1Gi" 5 ephemeral-storage: "1Gi" 6
- 1
- 内部レジストリーにプッシュできるイメージの最大サイズです。
- 2
- イメージストリームの仕様に基づく一意のイメージタグの最大数です。
- 3
- イメージストリームのステータスに基づく一意のイメージ参照の最大数です。
- 4
- すべてのコンテナーにおいて Pod がノードで要求できる CPU の最大量です。
- 5
- すべてのコンテナーにおいて Pod がノードで要求できるメモリーの最大量です。
- 6
- 一時ストレージのテクノロジープレビュー機能が OpenShift Container Platform 3.10 で有効にされる場合に、すべてのコンテナーにおいて Pod がノードで要求できる一時ストレージの最大量です。
コアおよび OpenShift Container Platform リソースのどちらも単一の制限範囲オブジェクトで指定できます。ここでは明確にする目的でこれらを 2 つのサンプルに分けています。
19.1.1. コンテナーの制限
サポートされるリソース:
- CPU
- メモリー
サポートされる制約:
コンテナーごとに設定されます。指定される場合、以下が一致している必要があります。
制約 | 動作 |
---|---|
|
設定で |
|
設定で |
|
設定で
たとえば、コンテナーの |
サポートされるデフォルト:
Default[resource]
-
指定がない場合は
container.resources.limit[resource]
を所定の値にデフォルト設定します。 Default Requests[resource]
-
指定がない場合は、
container.resources.requests[resource]
を所定の値にデフォルト設定します。
19.1.2. Pod の制限
サポートされるリソース:
- CPU
- メモリー
サポートされる制約:
Pod のすべてのコンテナーにおいて、以下が一致している必要があります。
制約 | 実施される動作 |
---|---|
|
|
|
|
|
|
19.1.3. イメージの制限
サポートされるリソース:
- ストレージ
リソースタイプ名:
-
openshift.io/Image
イメージごとに設定されます。指定される場合、以下が一致している必要があります。
制約 | 動作 |
---|---|
|
|
制限を超える Blob がレジストリーにアップロードされないようにするために、クォータを実施するようレジストリーを設定する必要があります。環境変数 REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ENFORCEQUOTA
は true
に設定される必要があります。この設定は、新規デプロイメントについてデフォルトで実行されます。
イメージのサイズは、アップロードされるイメージのマニフェストで常に表示される訳ではありません。これは、とりわけ Docker 1.10 以上で作成され、v2 レジストリーにプッシュされたイメージの場合に該当します。このようなイメージが古い Docker デーモンでプルされると、イメージマニフェストはレジストリーによってスキーマ v1 に変換されますが、この場合サイズ情報が欠落します。イメージに設定されるストレージの制限がこのアップロードを防ぐことはありません。
現在、この問題への対応が行われています。
19.1.4. イメージストリームの制限
サポートされるリソース:
-
openshift.io/image-tags
-
openshift.io/images
リソースタイプ名:
-
openshift.io/ImageStream
イメージストリームごとに設定されます。指定される場合、以下が一致している必要があります。
制約 | 動作 |
---|---|
|
|
|
|
19.1.4.1. イメージ参照の数
リソース openshift.io/image-tags
は、一意のイメージ参照を表します。使用できる参照は、ImageStreamTag
、ImageStreamImage
および DockerImage
になります。それらは oc tag
および oc import-image
コマンドを使用するか、または タグのトラッキングを使用して作成されます。内部参照か外部参照であるかの区別はありませんが、イメージストリームの仕様でタグ付けされる一意の参照はそれぞれ 1 回のみカウントされます。この参照は内部コンテナーレジストリーへのプッシュを制限することはありませんが、タグの制限に役立ちます。
リソース openshift.io/images
は、イメージストリームのステータスに記録される一意のイメージ名を表します。これにより、内部レジストリーにプッシュできるイメージ数を制限できます。内部参照か外部参照であるかの区別はありません。
19.1.5. PersistentVolumeClaim の制限
サポートされるリソース:
- ストレージ
サポートされる制約:
プロジェクトのすべての Persistent Volume Claim (永続ボリューム要求、PVC) において、以下が一致している必要があります。
制約 | 実施される動作 |
---|---|
|
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 } } ] } }
19.2. 制限範囲の作成
制限範囲をプロジェクトに適用するには、必要な仕様に基づいてファイルシステムで制限範囲オブジェクトの定義を作成します。以下を実行します。
$ oc create -f <limit_range_file> -n <project>
19.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 - - -
19.4. 制限の削除
プロジェクトの制限を実施しないように有効な制限範囲を削除します。
$ oc delete limits <limit_name>