このページでは、Namespace内で実行できるPodの総数に対するクォータを設定する方法を説明します。 クォータはResourceQuotaオブジェクト内で指定します。
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
クラスター内でNamespaceを作成できる権限が必要です。
この演習で作成するリソースをクラスター内の他のリソースから分離するために、Namespaceを作成します。
kubectl create namespace quota-pod-example
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