Kubernetes LimitRange によるリソース管理

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Kubernetes の LimitRange について学びます。LimitRange は、Kubernetes のポッド内のリソース消費に制限を設定するために使用されます。LimitRange は、ポッドに割り当てられるリソースを管理し、リソース競合の問題を防ぐための Kubernetes の機能です。

LimitRange のさまざまな側面を理解するために、簡単な例から始まり、徐々により複雑なシナリオに向かって、一連の手順を踏みます。各手順には、YAML マニフェスト形式のコード例が含まれており、これを Kubernetes クラスタに適用することで、LimitRange の実際の効果を確認できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-15819{{"Kubernetes LimitRange によるリソース管理"}} kubernetes/create -.-> lab-15819{{"Kubernetes LimitRange によるリソース管理"}} kubernetes/edit -.-> lab-15819{{"Kubernetes LimitRange によるリソース管理"}} kubernetes/apply -.-> lab-15819{{"Kubernetes LimitRange によるリソース管理"}} kubernetes/describe -.-> lab-15819{{"Kubernetes LimitRange によるリソース管理"}} end

Minikube クラスタを起動する

リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。

    cd /home/labex/project
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube は、システムの性能に応じて数分かかる場合があります。
  3. Minikube が動作していることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認します。
    • クラスタが動作していない場合は、minikube start を再度実行します。

Minikube を起動する際に問題が発生した場合は、必要に応じて minikube delete を使用して環境をリセットします。

単純な LimitRange を作成する

この手順では、名前空間内のポッドの CPU とメモリ リソースに制限を設定する単純な LimitRange を作成します。以下のように行います。

  1. 以下の内容を持つ 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
  1. kubectl apply コマンドを使用して、limitrange.yaml ファイルを Kubernetes クラスタに適用します。
kubectl apply -f limitrange.yaml
  1. 以下のコマンドを実行して、LimitRange が正常に作成されたことを確認します。
kubectl describe limitrange example-limitrange

spec セクションで指定した制限が表示されている LimitRange example-limitrange が表示されるはずです。

ポッドに LimitRange を適用する

この手順では、「単純な LimitRange を作成する」で作成した LimitRange に従うポッドを作成します。以下のように行います。

  1. 以下の内容を持つ pod.yaml という新しい YAML ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: nginx
      image: nginx

このポッド定義は、Nginx イメージを実行する単一コンテナを持つ単純なポッドを作成します。

  1. kubectl apply コマンドを使用して、pod.yaml ファイルを Kubernetes クラスタに適用します。
kubectl apply -f pod.yaml
  1. 以下のコマンドを実行して、ポッドが正常に作成されたことを確認します。
kubectl get pods example-pod

Running のステータスで example-pod というポッドが表示されるはずです。

  1. 以下のコマンドを実行して、ポッドに適用されているリソース制限を確認します。
kubectl describe pod example-pod

ポッドの CPU とメモリ制限が定義通り表示されるはずです。

LimitRange の制限をテストする

この手順では、LimitRange に定義されたリソース制限を超えるポッドを作成して、LimitRange の制限をテストします。以下のように行います。

  1. 以下の内容を持つ 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) を超えるリソースを要求するコンテナを持つポッドを作成します。

  1. 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 を更新して、リソース制限を変更します。以下のように行います。

  1. 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
  1. kubectl apply コマンドを使用して、更新された limitrange.yaml ファイルを Kubernetes クラスタに適用します。
kubectl apply -f limitrange.yaml
  1. 以下のコマンドを実行して、LimitRange が正常に更新されたことを確認します。
kubectl describe limitranges example-limitrange

出力に更新されたリソース制限が反映されているはずです。

まとめ

この実験では、Kubernetes の LimitRange を使用してポッド内のリソース消費を制限する方法を学びました。まず単純な LimitRange を作成し、それをポッドに適用し、制限の実行をテストし、そして LimitRange を更新してリソース制限を変更しました。LimitRange は、Kubernetes でのリソース管理とクラスタ内の効率的なリソース利用を確保するための強力なツールです。