Kubernetes リソースクォータ管理

KubernetesKubernetesBeginner
今すぐ練習

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

はじめに

この実験では、Kubernetesクラスター内のリソース消費を制限するためにKubernetes ResourceQuotaをどのように使用するかを学びます。ResourceQuotaを使用することで、Kubernetesクラスター内の名前空間に対するCPUやメモリなどのリソースの割り当てを制御および管理できます。簡単な例から始め、徐々により複雑なシナリオに進みます。各ステップでは、コード例とKubernetesクラスターに適用する方法に関する説明を提供します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") 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-15823{{"Kubernetes リソースクォータ管理"}} kubernetes/get -.-> lab-15823{{"Kubernetes リソースクォータ管理"}} kubernetes/create -.-> lab-15823{{"Kubernetes リソースクォータ管理"}} kubernetes/edit -.-> lab-15823{{"Kubernetes リソースクォータ管理"}} kubernetes/apply -.-> lab-15823{{"Kubernetes リソースクォータ管理"}} kubernetes/describe -.-> lab-15823{{"Kubernetes リソースクォータ管理"}} 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を使用して環境をリセットします。

ResourceQuotaを作成する

このステップでは、名前空間で使用できるCPUとメモリの量を制限する単純なResourceQuotaを作成します。以下のように行うことができます。

  1. 以下の内容でresourcequota.yamlという名前のファイルを作成します。
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "1"
    memory: "1Gi"

このResourceQuotaは、以下のハード制限を設定します。

  • CPU:1コア
  • メモリ:1GiB
  1. kubectl applyコマンドを使用して、resourcequota.yamlファイルをKubernetesクラスターに適用します。
kubectl apply -f resourcequota.yaml
  1. 以下のコマンドを実行して、ResourceQuotaが正常に作成されたことを確認します。
kubectl describe resourcequota example-resourcequota

出力にResourceQuotaの詳細が表示されるはずです。

名前空間にResourceQuotaを適用する

このステップでは、「ステップ:ResourceQuotaを作成する」で作成したResourceQuotaを名前空間に適用します。以下のように行うことができます。

  1. 以下の内容でnamespace.yamlという名前のファイルを作成します。
apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace

この名前空間の定義は、example-namespaceという名前の名前空間を作成します。

  1. kubectl applyコマンドを使用して、namespace.yamlファイルをKubernetesクラスターに適用します。
kubectl apply -f namespace.yaml
  1. kubectl applyコマンドを使用して、ResourceQuotaをexample-namespace名前空間に適用します。
kubectl apply -f resourcequota.yaml -n example-namespace
  1. 以下のコマンドを実行して、ResourceQuotaが名前空間に適用されたことを確認します。
kubectl describe namespace example-namespace

出力に名前空間に適用されたResourceQuotaの詳細が表示されるはずです。

ResourceQuotaの制限をテストする

このステップでは、ResourceQuotaで定義されたリソース制限を超えるポッドを作成し、ResourceQuotaが制限を守っていることを確認します。以下のように行うことができます。

  1. 以下の内容で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)で設定された制限を超えるリソースを要求するコンテナ付きのポッドを作成します。

  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": 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を変更してリソース制限を更新する方法を学びます。以下のように行うことができます。

  1. resourcequota.yamlファイルを編集して、CPUとメモリの制限をより高い値に更新します。
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "2"
    memory: "2Gi"

これにより、ResourceQuotaが更新されて、より高いCPUとメモリの制限(それぞれ2コアと2GiB)を許可するようになります。

  1. kubectl applyコマンドを使用して、更新されたresourcequota.yamlファイルをKubernetesクラスターに適用します。
kubectl apply -f resourcequota.yaml
  1. 以下のコマンドを実行して、ResourceQuotaが更新されたことを確認します。
kubectl describe resourcequotas example-resourcequota

出力に更新されたCPUとメモリの制限が表示されるはずです。

まとめ

この実験では、Kubernetesクラスター内のリソース消費を制限するためにKubernetes ResourceQuotaをどのように使用するかを学びました。まず、単純なResourceQuotaを作成し、名前空間に適用し、リソース制限を超えるポッドを作成することでその制限の実行をテストしました。また、既存のResourceQuotaを変更してリソース制限を更新する方法も学びました。ResourceQuotaは、Kubernetesクラスター内のリソース管理とアプリケーションが過度のリソースを消費しないことを確認するための強力なツールです。