はじめに
この実験では、Kubernetes クラスター内のリソース消費を制限するために Kubernetes ResourceQuota をどのように使用するかを学びます。ResourceQuota を使用することで、Kubernetes クラスター内の名前空間に対する CPU やメモリなどのリソースの割り当てを制御および管理できます。簡単な例から始め、徐々により複雑なシナリオに進みます。各ステップでは、コード例と Kubernetes クラスターに適用する方法に関する説明を提供します。
Minikube クラスタを起動する
リソースを作成する前に、稼働している Kubernetes クラスターが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスターを初期化します。
minikube start- このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスターをセットアップします。
- Minikube の起動には、システムの性能に応じて数分かかる場合があります。
Minikube が稼働していることを確認する:
Minikube クラスターの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスターが稼働していない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。
ResourceQuota を作成する
このステップでは、名前空間で使用できる CPU とメモリの量を制限する単純な ResourceQuota を作成します。以下のように行うことができます。
- 以下の内容で
resourcequota.yamlという名前のファイルを作成します。
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "1"
memory: "1Gi"
この ResourceQuota は、以下のハード制限を設定します。
- CPU:1 コア
- メモリ:1GiB
kubectl applyコマンドを使用して、resourcequota.yamlファイルを Kubernetes クラスターに適用します。
kubectl apply -f resourcequota.yaml
- 以下のコマンドを実行して、ResourceQuota が正常に作成されたことを確認します。
kubectl describe resourcequota example-resourcequota
出力に ResourceQuota の詳細が表示されるはずです。
名前空間に ResourceQuota を適用する
このステップでは、「ステップ:ResourceQuota を作成する」で作成した ResourceQuota を名前空間に適用します。以下のように行うことができます。
- 以下の内容で
namespace.yamlという名前のファイルを作成します。
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
この名前空間の定義は、example-namespaceという名前の名前空間を作成します。
kubectl applyコマンドを使用して、namespace.yamlファイルを Kubernetes クラスターに適用します。
kubectl apply -f namespace.yaml
kubectl applyコマンドを使用して、ResourceQuota をexample-namespace名前空間に適用します。
kubectl apply -f resourcequota.yaml -n example-namespace
- 以下のコマンドを実行して、ResourceQuota が名前空間に適用されたことを確認します。
kubectl describe namespace example-namespace
出力に名前空間に適用された ResourceQuota の詳細が表示されるはずです。
ResourceQuota の制限をテストする
このステップでは、ResourceQuota で定義されたリソース制限を超えるポッドを作成し、ResourceQuota が制限を守っていることを確認します。以下のように行うことができます。
- 以下の内容で
pod-exceeding-limits.yamlという名前のファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
name: example-pod-exceeding-limits
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: "2"
memory: "2Gi"
このポッドの定義は、「ステップ:ResourceQuota を作成する」で作成した ResourceQuota(CPU:2コア、メモリ:2GiB)で設定された制限を超えるリソースを要求するコンテナ付きのポッドを作成します。
kubectl applyコマンドを使用して、pod-exceeding-limits.yamlファイルを Kubernetes クラスターに適用します。
kubectl apply -f pod-exceeding-limits.yaml
ポッドの作成操作が拒否されることがわかります。エラーメッセージは「Error from server (Forbidden): error when creating "pod-exceeding-limits.yaml": pods "example-pod-exceeding-limits" is forbidden: exceeded quota: example-resourcequota, requested: cpu=2,memory=2Gi, used: cpu=0,memory=0, limited: cpu=1,memory=1Gi」です。
ResourceQuota を変更する
このステップでは、既存の ResourceQuota を変更してリソース制限を更新する方法を学びます。以下のように行うことができます。
resourcequota.yamlファイルを編集して、CPU とメモリの制限をより高い値に更新します。
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "2"
memory: "2Gi"
これにより、ResourceQuota が更新されて、より高い CPU とメモリの制限(それぞれ 2 コアと 2GiB)を許可するようになります。
kubectl applyコマンドを使用して、更新されたresourcequota.yamlファイルを Kubernetes クラスターに適用します。
kubectl apply -f resourcequota.yaml
- 以下のコマンドを実行して、ResourceQuota が更新されたことを確認します。
kubectl describe resourcequotas example-resourcequota
出力に更新された CPU とメモリの制限が表示されるはずです。
まとめ
この実験では、Kubernetes クラスター内のリソース消費を制限するために Kubernetes ResourceQuota をどのように使用するかを学びました。まず、単純な ResourceQuota を作成し、名前空間に適用し、リソース制限を超えるポッドを作成することでその制限の実行をテストしました。また、既存の ResourceQuota を変更してリソース制限を更新する方法も学びました。ResourceQuota は、Kubernetes クラスター内のリソース管理とアプリケーションが過度のリソースを消費しないことを確認するための強力なツールです。


