NamespaceのPodクォータを設定する

Namespace内で作成できるPodの数を制限します。

このページでは、Namespace内で実行できるPodの総数に対するクォータを設定する方法を説明します。 クォータはResourceQuotaオブジェクト内で指定します。

始める前に

Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:

クラスター内でNamespaceを作成できる権限が必要です。

Namespaceの作成

この演習で作成するリソースをクラスター内の他のリソースから分離するために、Namespaceを作成します。

kubectl create namespace quota-pod-example

ResourceQuotaの作成

ResourceQuotaの例として、次のマニフェストを示します:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"

ResourceQuotaを作成します:

kubectl apply -f https://k8s.io/examples/admin/resource/quota-pod.yaml --namespace=quota-pod-example

ResourceQuotaの詳細情報を参照します:

kubectl get resourcequota pod-demo --namespace=quota-pod-example --output=yaml

出力結果には、このNamespaceには2つのPodのクォータが設定されており、現在Podが存在しないこと、つまりクォータが使用されていないことを示しています。

spec:
  hard:
    pods: "2"
status:
  hard:
    pods: "2"
  used:
    pods: "0"

Deploymentの例として、次のマニフェストを示します:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-quota-demo
spec:
  selector:
    matchLabels:
      purpose: quota-demo
  replicas: 3
  template:
    metadata:
      labels:
        purpose: quota-demo
    spec:
      containers:
      - name: pod-quota-demo
        image: nginx

このマニフェストは、replicas: 3により、Kubernetesは同じアプリケーションを実行する3つの新しいPodを作成しようとしていることを示しています。

Deploymentを作成します:

kubectl apply -f https://k8s.io/examples/admin/resource/quota-pod-deployment.yaml --namespace=quota-pod-example

Deploymentの詳細情報を参照します:

kubectl get deployment pod-quota-demo --namespace=quota-pod-example --output=yaml

出力結果には、Deploymentで3つのレプリカが指定されているにもかかわらず、先ほど定義したクォータにより、2つのPodしか作成されていないことを示しています:

spec:
  ...
  replicas: 3
...
status:
  availableReplicas: 2
...
lastUpdateTime: 2021-04-02T20:57:05Z
    message: 'unable to create pods: pods "pod-quota-demo-1650323038-" is forbidden:
      exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'

リソースの選択

このタスクでは、Podの総数を制限するResourceQuotaを定義しましたが、他の種類のオブジェクトの総数も制限できます。 例えば、あなたは単一のNamespace内に存在できるCronJobの数を制限するといった決定を行うかもしれません。

クリーンアップ

Namespaceを削除します:

kubectl delete namespace quota-pod-example

次の項目

クラスター管理者向け

アプリケーション開発者向け