web-dev-qa-db-ja.com

CPUが不十分なために保留状態のポッド

GCE Kubernetesクラスターでポッドを作成できなくなりました。

Warning FailedScheduling    pod (www.caveconditions.com-f1be467e31c7b00bc983fbe5efdbb8eb-438ef) failed to fit in any node
fit failure on node (gke-prod-cluster-default-pool-b39c7f0c-c0ug): Insufficient CPU

そのノードに割り当てられた統計を見る

Non-terminated Pods:        (8 in total)
  Namespace         Name                                        CPU Requests    CPU Limits  Memory Requests Memory Limits
  ---------         ----                                        ------------    ----------  --------------- -------------
  default           dev.caveconditions.com-n80z8                            100m (10%)  0 (0%)      0 (0%)      0 (0%)
  default           lamp-cnmrc                                  100m (10%)  0 (0%)      0 (0%)      0 (0%)
  default           mongo-2-h59ly                                   200m (20%)  0 (0%)      0 (0%)      0 (0%)
  default           www.caveconditions.com-tl7pa                            100m (10%)  0 (0%)      0 (0%)      0 (0%)
  kube-system           fluentd-cloud-logging-gke-prod-cluster-default-pool-b39c7f0c-c0ug       100m (10%)  0 (0%)      200Mi (5%)  200Mi (5%)
  kube-system           kube-dns-v17-qp5la                              110m (11%)  110m (11%)  120Mi (3%)  220Mi (5%)
  kube-system           kube-proxy-gke-prod-cluster-default-pool-b39c7f0c-c0ug              100m (10%)  0 (0%)      0 (0%)      0 (0%)
  kube-system           kubernetes-dashboard-v1.1.0-orphh                       100m (10%)  100m (10%)  50Mi (1%)   50Mi (1%)
Allocated resources:
  (Total limits may be over 100%, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md)
  CPU Requests  CPU Limits  Memory Requests Memory Limits
  ------------  ----------  --------------- -------------
  910m (91%)    210m (21%)  370Mi (9%)  470Mi (12%)

確かに私は91%を割り当てており、さらに10%を割り当てることはできません。しかし、リソースを過剰にコミットすることは不可能ですか?

サーバーの使用率は平均で約10%のCPUです

enter image description here

これ以上リソースを使用できない場合は残念です。

10
Chris

はい、オーバーコミットは現在サポートされていません。計画的な改善 http://kubernetes.io/docs/user-guide/compute-resources です。 githubの関連する問題: https://github.com/kubernetes/kubernetes/issues/168

pS:理論的にはカスタムノードの容量を定義できますが、わかりません。

4
serhii

最近同じ問題が発生しました。調査の結果、GKEのデフォルトのLimitRangeにCPUリクエストの制限が100mに設定されていることがわかりました。これは、kubectl get limitrange -o=yamlを実行して確認できます。次のようなものが表示されます。

apiVersion: v1
items:
- apiVersion: v1
  kind: LimitRange
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"LimitRange","metadata":{"annotations":{},"name":"limits","namespace":"default"},"spec":{"limits":[{"defaultRequest":{"cpu":"100m"},"type":"Container"}]}}
    creationTimestamp: 2017-11-16T12:15:40Z
    name: limits
    namespace: default
    resourceVersion: "18741722"
    selfLink: /api/v1/namespaces/default/limitranges/limits
    uid: dcb25a24-cac7-11e7-a3d5-42010a8001b6
  spec:
    limits:
    - defaultRequest:
        cpu: 100m
      type: Container
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

この制限はすべてのコンテナに適用されます。たとえば、4コアのノードがあり、PODごとに2つのコンテナが作成されると仮定すると、約20個までのポッドしか作成できません。

ここでの「修正」は、デフォルトのLimitRangeを変更して独自の制限を設定し、古いポッドを削除して更新された値で再作成するか、ポッドの制限を作成するときに直接設定することです。

いくつかの読み物:

https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/#specify-a-cpu-request-and-a-cpu-limit

https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/#create-a-limitrange-and-a-pod

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#how-pods-with-resource-limits-are-run

https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-resource-requests-and-limits

5
JCM