(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】must specify cpu,memoryとなってPodが作成できないエラー

スポンサーリンク

事象

デプロイメントを作成するも

$ 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

以上、ご参考になれば幸いです。