Bin*_*Ves 5 kubernetes google-kubernetes-engine
我目前正在 n1 standard1 节点(1vCPU 和 3.75GB 内存)上运行 Kubernetes 集群。我尝试部署 4 个工作负载。
我已将每个部署的资源请求和限制设置为 100m 和 128Mi(对于容器),但是当我尝试部署第三个 Pod 时,即使节点同时仅使用 9% CPU,我仍然没有足够的 CPU 可用性。
有谁知道会发生什么?任何回应将不胜感激!
小智 2
显示以下错误的最可能原因:
\n是否有一些对象(例如Pods)未在集群内部分配。
有一些链接引用相同的消息:
\n特别关注问题中显示的示例。
\n设置如下:
\nGKE节点具有:1 vCPU和3.75GBRAM调度到该单节点集群上的资源:
\nDeployments,其中每个都有以下字段: resources:\n requests: # <-- IMPORTANT\n cpu: "100m" # <-- IMPORTANT\n memory: "128Mi"\n limits:\n cpu: "100m"\n memory: "128Mi"\nRun Code Online (Sandbox Code Playgroud)\n举个例子,我尝试复制设置尽可能接近问题中的设置:
\n$ kubectl get podsNAME READY STATUS RESTARTS AGE\nnginx-four-99d88fccb-v664b 0/1 Pending 0 51m\nnginx-one-8584c66446-rcw4p 1/1 Running 0 53m\nnginx-three-5bcb988986-jp22f 1/1 Running 0 51m\nnginx-two-6c9545d7d4-mrpw6 1/1 Running 0 52m\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,有一个Pod处于Pending状态。进一步调查表明:
$ kubectl describe pod/nginx-four-99d88fccb-v664b将显示很多信息,Pod但需要检查的部分是Events:
Events:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Warning FailedScheduling 56m (x2 over 56m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu.\n Normal Scheduled 56m default-scheduler Successfully assigned default/nginx-two-6c9545d7d4-mrpw6 to gke-gke-old-default-pool-641f10b7-36qb\n Normal Pulling 56m kubelet Pulling image "nginx"\n Normal Pulled 56m kubelet Successfully pulled image "nginx"\n Normal Created 56m kubelet Created container nginx\n Normal Started 56m kubelet Started container nginx\nRun Code Online (Sandbox Code Playgroud)\n从上面的输出可以看出:
\nFailedScheduling: ... 0/1 nodes are available: 1 Insufficient cpu正如问题中所发布的:
\n\n\n即使节点同时只使用 9% 的 cpu,我仍然遇到没有足够的 cpu 可用性的情况。
\n
此 CPU 可用性与分配的资源严格相关。您的 CPU 使用率可能在 10% 左右,但仍然会遇到Insufficient CPU消息。原因如下:
\n\n当您创建 Pod 时,Kubernetes 调度程序会选择 Pod 运行的节点。每个节点对于每种资源类型都有最大容量:它可以为 Pod 提供的 CPU 和内存量。调度器确保对于每种资源类型,调度的Container的资源请求总和小于节点的容量。请注意,尽管节点上的实际内存或 CPU 资源使用率非常低,但如果容量检查失败,调度程序仍然拒绝将 Pod 放置在节点上。当资源使用量稍后增加时(例如,在请求率的每日峰值期间),这可以防止节点上的资源短缺。
\n\n
看一下我之前包含的resources.requests部分中的部分Deployment。那里指定每个Pod成员都Deployment希望保证集群中的100m时间CPU可用。4x 100m= 400m.
如果您运行(应用工作负载后):
\n$ kubectl describe nodeAllocated resources:\n (Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu -->939m (99%)<-- 501m (53%)\n memory 1081Mi (40%) 1721Mi (65%)\n ephemeral-storage 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)\n attachable-volumes-gce-pd 0 0\nRun Code Online (Sandbox Code Playgroud)\n939M 已经从1000M(已调度的)分配了CPU 3/4 Pods。这就是为什么Pod无法安排其中一项的原因(即使CPU使用率为 10%)。
\n\n附注!
\n这对于每个集群都是特定的,但这个集群在安排任何工作负载之前报告了请求
\n639m。CPU
要解决这个问题,您可以:
\n.resources.requests部分requests和limits其他资源:
\n\n| 归档时间: |
|
| 查看次数: |
29460 次 |
| 最近记录: |