8.3.2. コンポーネントの制限について
LimitRange オブジェクトを作成または編集する際に、各コンポーネントに指定できる制限範囲パラメーターについては、以下の例を参照してください。
これらの例は明確にするために使用されます。必要に応じて、いずれかまたはすべてのコンポーネントの単一の LimitRange オブジェクトを作成できます。
- コンテナーの制限
制限範囲により、Pod の各コンテナーが特定のプロジェクトに要求できる最小および最大 CPU およびメモリーを指定できます。コンテナーがプロジェクトに作成される場合、
Pod仕様のコンテナー CPU およびメモリー要求はLimitRangeオブジェクトに設定される値に準拠する必要があります。そうでない場合には、Pod は作成されません。以下の要件が満たされなければなりません。-
コンテナーの CPU またはメモリーの要求および制限は、
LimitRangeオブジェクトで指定されるコンテナーのminリソース制約以上である必要があります。 -
コンテナーの CPU またはメモリーの要求と制限は、
LimitRangeオブジェクトで指定されたコンテナーのmaxリソース制約以下である必要があります。
LimitRangeオブジェクトがmaxCPU を定義する場合、Pod仕様に CPUrequest値を定義する必要はありません。ただし、制限範囲で指定される最大 CPU 制約を満たす CPUlimit値を指定する必要があります。以下の要件が満たされなければなりません。コンテナー制限の要求に対する比率は、
LimitRangeオブジェクトに指定されるコンテナーのmaxLimitRequestRatio値以下である必要があります。LimitRangeオブジェクトでmaxLimitRequestRatio制約を定義する場合、新規コンテナーにはrequestおよびlimit値の両方が必要になります。Red Hat OpenShift Service on AWS は、limitをrequestで除算して制限の要求に対する比率を算出します。この値は、1 より大きい正の整数でなければなりません。たとえば、コンテナーの
limit値がcpu: 500で、request値がcpu: 100である場合、cpuの要求に対する制限の比は5になります。この比率はmaxLimitRequestRatioより小さいか等しくなければなりません。
Pod仕様でコンテナーリソースメモリーまたは制限を指定しない場合、制限範囲オブジェクトに指定されるコンテナーのdefaultまたはdefaultRequestCPU およびメモリー値はコンテナーに割り当てられます。コンテナー
LimitRangeオブジェクトの定義apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: "Container" max: cpu: "2" memory: "1Gi" min: cpu: "100m" memory: "4Mi" default: cpu: "300m" memory: "200Mi" defaultRequest: cpu: "200m" memory: "100Mi" maxLimitRequestRatio: cpu: "10"各項目の説明:
metadata.name- 制限範囲オブジェクトの名前を指定します。
spec.limit.max.cpu- Pod の単一コンテナーが要求できる CPU の最大量を指定します。
spec.limit.max.memory- Pod の単一コンテナーが要求できるメモリーの最大量を指定します。
spec.limit.min.cpu- Pod の単一コンテナーが要求できる CPU の最小量を指定します。
spec.limit.min.memory- Pod の単一コンテナーが要求できるメモリーの最小量を指定します。
spec.limit.default.cpu-
コンテナーが使用できる CPU のデフォルト量 (
Pod仕様に指定されていない場合) を指定します。 spec.limit.default.memory-
コンテナーが使用できるメモリーのデフォルト量 (
Pod仕様に指定されていない場合) を指定します。 spec.limit.defaultRequest.cpu-
コンテナーが要求できる CPU のデフォルト量 (
Pod仕様に指定されていない場合) を指定します。 spec.limit.defaultRequest.memory-
コンテナーが要求できるメモリーのデフォルト量 (
Pod仕様に指定されていない場合) を指定します。 spec.limit.maxLimitRequestRatio.cpu- コンテナーの最大制限対リクエスト比率を指定します。
-
コンテナーの CPU またはメモリーの要求および制限は、
- Pod の制限
制限範囲により、所定プロジェクトの Pod 全体でのすべてのコンテナーの CPU およびメモリーの最小および最大の制限を指定できます。コンテナーをプロジェクトに作成するには、
Pod仕様のコンテナー CPU およびメモリー要求はLimitRangeオブジェクトに設定される値に準拠する必要があります。そうでない場合には、Pod は作成されません。Pod仕様でコンテナーリソースメモリーまたは制限を指定しない場合、制限範囲オブジェクトに指定されるコンテナーのdefaultまたはdefaultRequestCPU およびメモリー値はコンテナーに割り当てられます。Pod 内のすべてのコンテナーにおいて、以下の要件が満たされる必要があります。
-
コンテナーの CPU またはメモリーの要求および制限は、
LimitRangeオブジェクトに指定される Pod のminリソース制約以上である必要があります。 -
コンテナーの CPU またはメモリーの要求および制限は、
LimitRangeオブジェクトに指定される Pod のmaxリソース制約以下である必要があります。 -
コンテナー制限の要求に対する比率は、
LimitRangeオブジェクトに指定されるmaxLimitRequestRatio制約以下である必要があります。
Pod
LimitRangeオブジェクト定義apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: "Pod" max: cpu: "2" memory: "1Gi" min: cpu: "200m" memory: "6Mi" maxLimitRequestRatio: cpu: "10"各項目の説明:
metadata.name- 制限範囲オブジェクトの名前を指定します。
spec.limit.max.cpu- すべてのコンテナーにおいて Pod が要求できる CPU の最大量を指定します。
spec.limit.max.memory- すべてのコンテナーにおいて Pod が要求できるメモリーの最大量を指定します。
spec.limit.min.cpu- すべてのコンテナーにおいて Pod が要求できる CPU の最小量を指定します。
spec.limit.min.memory- すべてのコンテナーにおいて Pod が要求できるメモリーの最小量を指定します。
spec.limit.maxLimitRequestRatio.cpu- コンテナーの最大制限対リクエスト比率を指定します。
-
コンテナーの CPU またはメモリーの要求および制限は、
- イメージの制限
制限範囲を使用すると、OpenShift イメージレジストリーにプッシュできるイメージの最大サイズを指定できます。
OpenShift イメージレジストリーにイメージをプッシュする場合、以下の要件を満たす必要があります。
-
イメージのサイズは、
LimitRangeオブジェクトで指定されるイメージのmaxサイズ以下である必要があります。
イメージ
LimitRangeオブジェクトの定義apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: openshift.io/Image max: storage: 1Gi各項目の説明:
metadata.name- 制限範囲オブジェクトの名前を指定します。
spec.limit.max.storage- OpenShift イメージレジストリーにプッシュできるイメージの最大サイズを指定します。
警告イメージのサイズは、アップロードされるイメージのマニフェストで常に表示される訳ではありません。これは、とりわけ Docker 1.10 以上で作成され、v2 レジストリーにプッシュされたイメージの場合に該当します。このようなイメージが古い Docker デーモンでプルされると、イメージマニフェストはレジストリーによってスキーマ v1 に変換されますが、この場合サイズ情報が欠落します。イメージに設定されるストレージの制限がこのアップロードを防ぐことはありません。
-
イメージのサイズは、
- イメージストリームの制限
制限の範囲により、イメージストリームの制限を指定できます。
各イメージストリームについて、以下の要件を満たす必要があります。
-
imagestream.spec.tagsから派生した一意の参照の数は、LimitRangeオブジェクト内のopenshift.io/image-tags制約以下である必要があります。 -
imagestream.status.tagsに記録される一意のイメージアイデンティティーの数は、LimitRangeオブジェクトのopenshift.io/images制約以下である必要があります。
重要openshift.io/image-tagsとopenshift.io/imagesという名称は、タグ名の最大数と、タグごとのイメージの最大数を意味するものではありません。最初の制限は、ImageStreamspec.tagsリソース内のタグ定義とその参照に適用されます。2 つ目は、ImageStreamstatus.tagsリソースに記録された、個別に解決されたイメージ (通常はダイジェストによる) に適用されます。タグの作成または更新 (OpenShift イメージレジストリーへのプッシュを含む) は、いずれかの制限を超える場合は拒否されることがあります。イメージストリーム
LimitRangeオブジェクト定義apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: openshift.io/ImageStream max: openshift.io/image-tags: 20 openshift.io/images: 30以下は、
metadata.name-
LimitRangeオブジェクトの名前を指定します。 spec.limit.max.openshift.io/image-tags-
imagestream.spec.tags内のタグ定義からカウントされる、重複のない参照の最大数を指定します。 spec.limit.max.openshift.io/images-
imagestream.status.tagsに記録される一意のイメージアイデンティティー (ダイジェストと同じイメージ名) の最大数を指定します。
openshift.io/image-tagsの制限は、imagestream.spec.tagsのエントリーからの一意の参照をカウントします。参照は、ImageStreamTag、ImageStreamImage、またはDockerImageのいずれかです。タグ定義は、oc tagまたはoc import-imageを使用して追加できます。内部参照と外部参照は同じように扱われ、仕様内の重複のない参照はそれぞれ 1 回としてカウントされます。更新によってカウントが制限値を超える場合、OpenShift イメージレジストリーへのプッシュによって更新が行われる場合も含め、要求は拒否されます。openshift.io/imagesの制限は、imagestream.status.tags内の一意のイメージアイデンティティーをカウントし、イメージストリームがステータスに保持できる異なるイメージの数を制限します。内部参照か外部参照であるかの区別はありません。-
- Persistent Volume Claim (永続ボリューム要求、PVC) の制限
制限の範囲により、Persistent Volume Claim(永続ボリューム要求、PVC) で要求されるストレージを制限できます。
プロジェクト内のすべての永続的なボリューム要求において、以下の要件が満たされている必要があります。
-
永続ボリューム要求 (PVC) のリソース要求は、
LimitRangeオブジェクトに指定される PVC のmin制約以上である必要があります。 -
永続ボリューム要求 (PVC) のリソース要求は、
LimitRangeオブジェクトに指定される PVC のmax制約以下である必要があります。
PVC
LimitRangeオブジェクト定義apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: "PersistentVolumeClaim" min: storage: "2Gi" max: storage: "50Gi"各項目の説明:
metadata.name-
LimitRangeオブジェクトの名前を指定します。 spec.limit.min.storage- 永続ボリューム要求で要求できるストレージの最小量を指定します。
spec.limit.max.storage- 永続ボリューム要求で要求できるストレージの最大量を指定します。
-
永続ボリューム要求 (PVC) のリソース要求は、