はじめに
この実験では、Kubernetesクラスター内のリソース消費を制限するためにKubernetes ResourceQuotaをどのように使用するかを学びます。ResourceQuotaを使用することで、Kubernetesクラスター内の名前空間に対するCPUやメモリなどのリソースの割り当てを制御および管理できます。簡単な例から始め、徐々により複雑なシナリオに進みます。各ステップでは、コード例とKubernetesクラスターに適用する方法に関する説明を提供します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Kubernetesクラスター内のリソース消費を制限するためにKubernetes ResourceQuotaをどのように使用するかを学びます。ResourceQuotaを使用することで、Kubernetesクラスター内の名前空間に対するCPUやメモリなどのリソースの割り当てを制御および管理できます。簡単な例から始め、徐々により複雑なシナリオに進みます。各ステップでは、コード例とKubernetesクラスターに適用する方法に関する説明を提供します。
リソースを作成する前に、稼働しているKubernetesクラスターが必要です。Minikubeは、ローカルマシン上で動作する軽量のKubernetes環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/project
Minikubeを起動する:
Minikubeを起動してKubernetesクラスターを初期化します。
minikube start
Minikubeが稼働していることを確認する:
Minikubeクラスターの状態を確認します。
minikube status
kubelet
やapiserver
などのコンポーネントがRunning
と表示されていることを確認します。minikube start
を再度実行します。Minikubeの起動に問題がある場合は、必要に応じてminikube delete
を使用して環境をリセットします。
このステップでは、名前空間で使用できるCPUとメモリの量を制限する単純なResourceQuotaを作成します。以下のように行うことができます。
resourcequota.yaml
という名前のファイルを作成します。apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "1"
memory: "1Gi"
このResourceQuotaは、以下のハード制限を設定します。
kubectl apply
コマンドを使用して、resourcequota.yaml
ファイルをKubernetesクラスターに適用します。kubectl apply -f resourcequota.yaml
kubectl describe resourcequota example-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
kubectl describe namespace example-namespace
出力に名前空間に適用された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.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
kubectl describe resourcequotas example-resourcequota
出力に更新されたCPUとメモリの制限が表示されるはずです。
この実験では、Kubernetesクラスター内のリソース消費を制限するためにKubernetes ResourceQuotaをどのように使用するかを学びました。まず、単純なResourceQuotaを作成し、名前空間に適用し、リソース制限を超えるポッドを作成することでその制限の実行をテストしました。また、既存のResourceQuotaを変更してリソース制限を更新する方法も学びました。ResourceQuotaは、Kubernetesクラスター内のリソース管理とアプリケーションが過度のリソースを消費しないことを確認するための強力なツールです。