はじめに
この実験では、Kubernetes の LimitRange について学びます。LimitRange は、Kubernetes のポッド内のリソース消費に制限を設定するために使用されます。LimitRange は、ポッドに割り当てられるリソースを管理し、リソース競合の問題を防ぐための Kubernetes の機能です。
LimitRange のさまざまな側面を理解するために、簡単な例から始まり、徐々により複雑なシナリオに向かって、一連の手順を踏みます。各手順には、YAML マニフェスト形式のコード例が含まれており、これを Kubernetes クラスタに適用することで、LimitRange の実際の効果を確認できます。
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 を使用して環境をリセットします。
単純な LimitRange を作成する
この手順では、名前空間内のポッドの CPU とメモリ リソースに制限を設定する単純な LimitRange を作成します。以下のように行います。
- 以下の内容を持つ
limitrange.yamlという新しい YAML ファイルを作成します。
apiVersion: v1
kind: LimitRange
metadata:
name: example-limitrange
spec:
limits:
- type: Container
max:
cpu: "1"
memory: "1Gi"
min:
cpu: "100m"
memory: "100Mi"
default:
cpu: "500m"
memory: "500Mi"
この LimitRange は、以下の制限を設定します。
- 最大 CPU:1 コア
- 最大メモリ:1 GiB
- 最小 CPU:100 ミリコア (100m)
- 最小メモリ:100 MiB
- 既定の CPU:500 ミリコア (500m)
- 既定のメモリ:500 MiB
kubectl applyコマンドを使用して、limitrange.yamlファイルを Kubernetes クラスタに適用します。
kubectl apply -f limitrange.yaml
- 以下のコマンドを実行して、LimitRange が正常に作成されたことを確認します。
kubectl describe limitrange example-limitrange
spec セクションで指定した制限が表示されている LimitRange example-limitrange が表示されるはずです。
ポッドに LimitRange を適用する
この手順では、「単純な LimitRange を作成する」で作成した LimitRange に従うポッドを作成します。以下のように行います。
- 以下の内容を持つ
pod.yamlという新しい YAML ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx
image: nginx
このポッド定義は、Nginx イメージを実行する単一コンテナを持つ単純なポッドを作成します。
kubectl applyコマンドを使用して、pod.yamlファイルを Kubernetes クラスタに適用します。
kubectl apply -f pod.yaml
- 以下のコマンドを実行して、ポッドが正常に作成されたことを確認します。
kubectl get pods example-pod
Running のステータスで example-pod というポッドが表示されるはずです。
- 以下のコマンドを実行して、ポッドに適用されているリソース制限を確認します。
kubectl describe pod example-pod
ポッドの CPU とメモリ制限が定義通り表示されるはずです。
LimitRange のエンフォースメントをテストする
この手順では、LimitRange に定義されたリソース制限を超えるポッドを作成して、LimitRange の制限をテストします。以下のように行います。
- 以下の内容を持つ
pod-exceeding-limits.yamlという新しい YAML ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
name: example-pod-exceeding-limits
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: "2"
memory: "2Gi"
このポッド定義は、LimitRange で設定された制限 (CPU: 2 コア、メモリ: 2 GiB) を超えるリソースを要求するコンテナを持つポッドを作成します。
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": pod "example-pod-exceeding-limits" Forbidden: [Maximum cpu usage per container is 1, but limited to 2, maximum memory usage per container is 1Gi, but limited to 2Gi] です。
LimitRange を更新する
この手順では、「単純な LimitRange を作成する」で作成した LimitRange を更新して、リソース制限を変更します。以下のように行います。
limitrange.yamlファイルを編集して、必要に応じてリソース制限を更新します。たとえば:
apiVersion: v1
kind: LimitRange
metadata:
name: example-limitrange
spec:
limits:
- type: Container
max:
cpu: "2"
memory: "2Gi"
min:
cpu: "200m"
memory: "200Mi"
default:
cpu: "1"
memory: "1Gi"
この更新された LimitRange は、以下の制限を設定します。
- 最大 CPU:2 コア
- 最大メモリ:2 GiB
- 最小 CPU:200 ミリコア (200m)
- 最小メモリ:200 MiB
- 既定の CPU:1 コア
- 既定のメモリ:1 GiB
kubectl applyコマンドを使用して、更新されたlimitrange.yamlファイルを Kubernetes クラスタに適用します。
kubectl apply -f limitrange.yaml
- 以下のコマンドを実行して、LimitRange が正常に更新されたことを確認します。
kubectl describe limitranges example-limitrange
出力に更新されたリソース制限が反映されているはずです。
まとめ
この実験では、Kubernetes の LimitRange を使用してポッド内のリソース消費を制限する方法を学びました。まず単純な LimitRange を作成し、それをポッドに適用し、制限の実行をテストし、そして LimitRange を更新してリソース制限を変更しました。LimitRange は、Kubernetes でのリソース管理とクラスタ内の効率的なリソース利用を確保するための強力なツールです。


