ストレージの消費を制限する

この例では、名前空間内で消費されるストレージの量を制限する方法を示します。

このデモでは、ResourceQuotaLimitRangePersistentVolumeClaimを使用します。

始める前に

  • Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:

    バージョンを確認するには次のコマンドを実行してください: kubectl version.

シナリオ: ストレージの消費を制限する

クラスター管理者がユーザーの代わりにクラスターを運用しており、コストを管理するために単一の名前空間が消費できるストレージの量を制御したいと考えています。

管理者は以下を制限したいと考えています:

  1. 名前空間内のPersistentVolumeClaimの数
  2. 各クレームが要求できるストレージの量
  3. 名前空間が持つことのできるストレージの合計量

ストレージ要求を制限するLimitRange

名前空間にLimitRangeを追加すると、ストレージ要求のサイズに最小値と最大値が適用されます。 ストレージはPersistentVolumeClaimを通じて要求されます。 LimitRangeを適用するアドミッションコントローラーは、管理者が設定した値を超えるまたは下回るPVCを拒否します。

この例では、10Giのストレージを要求するPVCは最大値の2Giを超えるため拒否されます。

apiVersion: v1
kind: LimitRange
metadata:
  name: storagelimits
spec:
  limits:
  - type: PersistentVolumeClaim
    max:
      storage: 2Gi
    min:
      storage: 1Gi

ストレージの最小要求は、基盤となるストレージプロバイダーが特定の最小値を必要とする場合に使用されます。 例えば、AWS EBSボリュームには1Giの最小要件があります。

PVCの数と累積ストレージ容量を制限するResourceQuota

管理者は名前空間内のPVCの数と、そのPVCの累積容量を制限することができます。 いずれかの最大値を超える新しいPVCは拒否されます。

この例では、名前空間内の6番目のPVCは最大数の5を超えるため拒否されます。 また、5Giの最大クォータと上記の2Giの最大制限を組み合わせた場合、それぞれ2Giの3つのPVCを持つことはできません。 5Giに制限された名前空間に対して6Giを要求することになるためです。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: storagequota
spec:
  hard:
    persistentvolumeclaims: "5"
    requests.storage: "5Gi"

まとめ

LimitRangeは要求可能なストレージの上限を設定でき、ResourceQuotaはクレームの数と累積ストレージ容量を通じて名前空間が消費するストレージを効果的に制限できます。 これにより、クラスター管理者はどのプロジェクトも割り当てを超えるリスクなく、クラスターのストレージ予算を計画できます。