OpenShiftのプロジェクト制限設定方法
0.はじめに
OpenShift Container Platform(以下、OCP)入門者向けに、プロジェクト制限範囲について解説します。
OCPのプロジェクト制限範囲は、プロジェクト内でリソース(CPU、メモリ、ストレージなど)の使用上限や最小値を定義する機能です。
これにより、特定のPodやコンテナがプロジェクト内で過剰なリソースを消費するのを防ぎ、公平なリソース配分が促進されます。
では、次の章から具体的な解説を進めます!
1.プロジェクト制限範囲が役立つ理由
-
リソースの独占防止:
単一のPodやコンテナがリソースを独占するのを防ぎます。 -
公平なリソース割り当て:
全体のリソース消費を制御し、他のプロジェクトやユーザーが適切なリソースを利用できるようにします。 -
システムの安定性向上:
リソース制限を設けることで、クラスター全体の健全性を維持します。
2.リソースクォータとプロジェクト制限範囲の違い
リソースクォータとプロジェクト制限範囲は、いずれもOpenShiftでリソースの利用を制限するための機能ですが、対象や適用範囲、目的が異なります。
- リソースクォータは、プロジェクト全体のリソース使用量を制御する仕組みです。主にクラスター全体のリソース管理を目的としています。
- プロジェクト制限範囲は、個々のPodやコンテナのリソース使用量を制限する仕組みで、特定のアプリケーションやPodのリソース消費を細かく管理できます。
リソースクォータとプロジェクト制限範囲の違い
項目 | リソースクォータ (ResourceQuota) | プロジェクト制限範囲 (LimitRange) |
---|---|---|
適用範囲 | プロジェクト全体 | 各Podまたはコンテナ |
目的 | プロジェクト全体のリソース使用を制限 | 個々のPodやコンテナのリソース消費を制限 |
管理者の役割 | クラスター管理者が設定 | クラスター管理者またはプロジェクト管理者 |
対象リソース | CPU、メモリ、Pod数、PVC数などの総量 | 各コンテナのCPU、メモリ、一時ストレージなど |
制限の種類 | 最大値のみ | 最小値、最大値、デフォルト値 |
使用例 | ・プロジェクト全体のPod数を制限する ・PVCの総数を制限する |
・各Podの最大メモリ使用量を制限 ・デフォルトのCPUリクエストを設定 |
適用シナリオの比較
シナリオ | リソースクォータが適している場合 | プロジェクト制限範囲が適している場合 |
---|---|---|
複数プロジェクトがある環境 | 各プロジェクトのリソースを公平に分配したい | 各Podやコンテナが適切にリソースを消費するよう制御したい |
開発者の負担軽減 | 開発者がリソース使用量全体を意識する必要がある場合 | デフォルトのリソース設定を提供して負担を減らしたい |
リソース過剰消費の防止 | プロジェクト単位でのリソース制限が必要な場合 | 特定のPodやコンテナがリソースを独占しないようにしたい |
両者を併用することで、OpenShiftクラスター内のリソースを効率的に管理し、公平かつ安定した運用が可能になります。
3.プロジェクト制限範囲の設定手順
以下の手順で、プロジェクトに制限範囲(LimitRange)を設定します。
1. テスト用プロジェクトの作成
新しいプロジェクトを作成します。
oc new-project limit-range-demo
実行結果の例:
Now using project "limit-range-demo" on server "https://api.openshift.example.com:6443".
2. マニフェストファイル(LimitRange)の準備
limitrange.yaml
:
以下のYAMLファイルで、CPUとメモリの制限範囲を設定します。
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range-example
spec:
limits:
- type: Container
max:
cpu: "2"
memory: "2Gi"
min:
cpu: "200m"
memory: "128Mi"
default:
cpu: "500m"
memory: "256Mi"
defaultRequest:
cpu: "300m"
memory: "200Mi"
-
max
: コンテナが使用可能な最大リソース量。 -
min
: コンテナが使用する最低リソース量。 -
default
: 明示的に指定されなかった場合のデフォルト値。 -
defaultRequest
: リソースリクエストのデフォルト値。
3. 制限範囲の適用
作成したlimitrange.yaml
を適用します。
oc create -f limitrange.yaml
実行結果の例:
limitrange/limit-range-example created
4. 適用済みの制限範囲を確認
現在の制限範囲を確認します。
oc get limits
実行結果の例:
NAME CREATED AT
limit-range-example 2024-10-01T12:00:00Z
詳細情報を確認するには以下のコマンドを使用します。
oc describe limits limit-range-example
結果の例:
Name: limit-range-example
Namespace: limit-range-demo
Type Resource Min Max Default Request Default Limit
---- -------- ---- ---- --------------- -------------
Container cpu 200m 2 300m 500m
memory 128Mi 2Gi 200Mi 256Mi
5. 制限範囲を超えるPodを作成
次のYAMLファイルで、制限を超えたリソースを要求するPodを定義します。
limitrange-test.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: over-limit-pod
spec:
containers:
- name: test-container
image: bitnami/nginx
resources:
limits:
cpu: "3" # 制限を超過
memory: "3Gi" # 制限を超過
Podを作成してみます。
oc create -f limitrange-test.yaml
実行結果の例:
Error from server (Forbidden): pods "over-limit-pod" is forbidden: maximum cpu usage per Container is 2, but limit is 3.
制限を超えるリソースの要求は拒否されます。
6. 制限範囲内のPodを作成
次に、制限範囲内のリソースを要求するようにlimitrange-test.yaml
を修正します。
修正版 YAML:
apiVersion: v1
kind: Pod
metadata:
name: within-limit-pod
spec:
containers:
- name: test-container
image: bitnami/nginx
resources:
limits:
cpu: "1" # 制限内
memory: "1Gi" # 制限内
Podを再度作成します。
oc create -f limitrange-test.yaml
実行結果の例:
pod/within-limit-pod created
Podが正常に作成されます。
4.おわりに
今回はOpenShiftのプロジェクト制限範囲について理解を深めるために、以下を学びました。
-
リソース制限の設定:
- 高負荷のワークロードを持つPodが他のリソースを圧迫するのを防ぎます。
-
デフォルト設定の利用:
- 開発者がリソース制限を指定しなかった場合でも、適切なデフォルト値を適用します。
-
システム全体の健全性維持:
- プロジェクト間でリソース使用量を制御し、クラスター全体の健全性を保ちます。
1回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。
今後もOpenShiftについて解説していきます。
おわりっ!
Discussion