この例では、名前空間内で消費されるストレージの量を制限する方法を示します。
このデモでは、ResourceQuota、LimitRange、PersistentVolumeClaimを使用します。
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください: kubectl version.
クラスター管理者がユーザーの代わりにクラスターを運用しており、コストを管理するために単一の名前空間が消費できるストレージの量を制御したいと考えています。
管理者は以下を制限したいと考えています:
名前空間に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の数と、その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はクレームの数と累積ストレージ容量を通じて名前空間が消費するストレージを効果的に制限できます。 これにより、クラスター管理者はどのプロジェクトも割り当てを超えるリスクなく、クラスターのストレージ予算を計画できます。