🎛️

OpenShiftのプロジェクト制限設定方法

2024/12/15に公開

0.はじめに

OpenShift Container Platform(以下、OCP)入門者向けに、プロジェクト制限範囲について解説します。

OCPのプロジェクト制限範囲は、プロジェクト内でリソース(CPU、メモリ、ストレージなど)の使用上限や最小値を定義する機能です。

これにより、特定のPodやコンテナがプロジェクト内で過剰なリソースを消費するのを防ぎ、公平なリソース配分が促進されます。

では、次の章から具体的な解説を進めます!

1.プロジェクト制限範囲が役立つ理由

  1. リソースの独占防止:
    単一のPodやコンテナがリソースを独占するのを防ぎます。

  2. 公平なリソース割り当て:
    全体のリソース消費を制御し、他のプロジェクトやユーザーが適切なリソースを利用できるようにします。

  3. システムの安定性向上:
    リソース制限を設けることで、クラスター全体の健全性を維持します。

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のプロジェクト制限範囲について理解を深めるために、以下を学びました。

  1. リソース制限の設定:

    • 高負荷のワークロードを持つPodが他のリソースを圧迫するのを防ぎます。
  2. デフォルト設定の利用:

    • 開発者がリソース制限を指定しなかった場合でも、適切なデフォルト値を適用します。
  3. システム全体の健全性維持:

    • プロジェクト間でリソース使用量を制御し、クラスター全体の健全性を保ちます。

1回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。

今後もOpenShiftについて解説していきます。

おわりっ!

参考サイト

Discussion