事象
デプロイメントを作成するも
$ kubectl create deployment nginx-dep --image=nginx deployment.apps/nginx-dep created $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-dep 0/1 0 0 xs $ kubectl get pod No resources found in default namespace. $ kubectl get rs NAME DESIRED CURRENT READY AGE nginx-dep-57fc9f5569 1 0 0 90s
以下のようにエラーとなっている。
$ kubectl describe rs nginx-dep-57fc9f5569 ... Type Status Reason ---- ------ ------ ReplicaFailure True FailedCreate Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreate 108s replicaset-controller Error creating: pods "nginx-dep-57fc9f5569-2v76t" is forbidden: failed quota: test: must specify cpu,memory
環境情報
- kubectl v1.18.5
原因/解決策
「failed quota: test: must specify cpu,memory」というメッセージにある通りKubernetes配下のPodにて使用するリソースがQuotaに制限されています。
実際に確認すると確かにCPUやMemoryが制限されています。
$ kubectl get quota NAME CREATED AT test ... $ kubectl describe quota test Name: test Namespace: default Resource Used Hard -------- ---- ---- cpu 0 2 memory 0 1G
デプロイメントのspecにてresourcesが空欄なので
spec: containers: - image: nginx imagePullPolicy: Always name: nginx resources: {}
以下のように変更すれば
resources: limits: memory: "500Mi" cpu: "500m"
冒頭のエラーが解消されます。
以下、補足です。
補足
Quotaは以下のように作成でき、Namespace毎のPodの合計を制限できます。
$ kubectl create quota test --hard=cpu=2,memory=1G
デプロイメントを見てもReplicaSetが失敗しているという文言しかないですが
Conditions: Type Status Reason ---- ------ ------ Progressing True NewReplicaSetCreated Available False MinimumReplicasUnavailable ReplicaFailure True FailedCreate
ReplicaSetの詳細を見れば冒頭のメッセージが確認できます。
Podの起動後は以下のようにUsedが増えています。
$ kubectl describe quota test Name: test Namespace: default Resource Used Hard -------- ---- ---- cpu 500m 2 memory 500Mi 1G
以上、ご参考になれば幸いです。