Kubernetes 由于CPU不足,Pod处于挂起状态

Kubernetes 由于CPU不足,Pod处于挂起状态,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,在我的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 查看该节点的已分配统计信

在我的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%。但是不可能过度提交资源吗

服务器的平均CPU使用率约为10%


如果我不能使用更多资源,那就太遗憾了。

是的,目前不支持过度使用。这是计划中的改进。 github的相关问题:


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个POD

这里的“修复”是更改默认的
LimitRange
设置您自己的限制,然后删除旧的POD,以便使用更新的值重新创建它们,或者在创建POD时直接设置POD限制

一些阅读材料:


对于我来说,在不同的名称空间中创建所有部署和服务(而不是
默认值
)修复了此问题。

我在尝试部署到集群时遇到了相同的问题。在我的例子中,为我的应用程序的测试分支自动创建了不需要的pod。要诊断问题,我需要执行以下操作:

kubectl获得订单

kubectl description po
-对于一个现有POD,检查它在哪个节点上运行

kubectl获取节点

kubectl description node
-查看现有pod使用的节点的CPU使用情况,如下所示:

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                       Requests      Limits
  --------                       --------      ------
  cpu                            1010m (93%)   4 (210%)
然后,可以使用以下方法删除不需要的吊舱:

kubectl获得部署

kubectl delete部署…
-然后是我需要删除的pod部署的名称


一旦我删除了足够多未使用的pod,我就能够部署新的pod了。

Hi。真可惜。这使得滚动更新变得很困难,因为由于CPU限制,它们无法工作,尽管它只使用了10%的CPU。。。你有没有想过如何解决这个问题?你有没有尝试在Kubernetes中启用自动缩放?对我添加了自动缩放。但由于资源的限制,它不能长豆荚。哥们,很棒的资源,真的帮了我大忙。谢谢你把它放在一起!