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です
これ以上リソースを使用できない場合は残念です。
はい、オーバーコミットは現在サポートされていません。計画的な改善 http://kubernetes.io/docs/user-guide/compute-resources です。 githubの関連する問題: https://github.com/kubernetes/kubernetes/issues/168
pS:理論的にはカスタムノードの容量を定義できますが、わかりません。
最近同じ問題が発生しました。調査の結果、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://cloud.google.com/blog/products/gcp/kubernetes-best-practices-resource-requests-and-limits