由于不足 CPU,Pod 处于挂起状态
Pod in pending state due to Insufficient CPU
在我的 GCE Kubernetes 集群上,我无法再创建 pods。
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 pods。
这里的"fix"是改变默认的LimitRange
设置你自己的限制,然后删除旧的pods以便用更新的值重新创建,或者直接设置pods 创建它们时的限制。
一些阅读material:
https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-resource-requests-and-limits
对我来说,在不同的命名空间(default
除外)中创建所有部署和服务解决了这个问题。
我在尝试部署到集群时遇到了同样的问题。在我的例子中,为我的应用程序的测试分支自动创建了不需要的 pods。要诊断问题,我需要执行以下操作:
kubectl get po
kubectl describe po
- 对于现有 pods 之一,检查它 运行 在
上的哪个节点
kubectl get nodes
kubectl describe node
- 查看现有 pod 正在使用的节点的 CPU 使用情况,如下所示:
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1010m (93%) 4 (210%)
然后,可以使用以下方法删除不需要的 pods:
kubectl get deployments
kubectl delete deployment ....
- 然后是我需要删除的 pod 的部署名称。
一旦我删除了足够多的未使用的pods,我就能够部署新的。
在我的 GCE Kubernetes 集群上,我无法再创建 pods。
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 pods。
这里的"fix"是改变默认的LimitRange
设置你自己的限制,然后删除旧的pods以便用更新的值重新创建,或者直接设置pods 创建它们时的限制。
一些阅读material:
https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-resource-requests-and-limits
对我来说,在不同的命名空间(default
除外)中创建所有部署和服务解决了这个问题。
我在尝试部署到集群时遇到了同样的问题。在我的例子中,为我的应用程序的测试分支自动创建了不需要的 pods。要诊断问题,我需要执行以下操作:
kubectl get po
kubectl describe po
- 对于现有 pods 之一,检查它 运行 在
kubectl get nodes
kubectl describe node
- 查看现有 pod 正在使用的节点的 CPU 使用情况,如下所示:
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1010m (93%) 4 (210%)
然后,可以使用以下方法删除不需要的 pods:
kubectl get deployments
kubectl delete deployment ....
- 然后是我需要删除的 pod 的部署名称。
一旦我删除了足够多的未使用的pods,我就能够部署新的。