【问题标题】:Insufficient cpu in Kubernetes multi node clusterKubernetes多节点集群cpu不足
【发布时间】:2019-05-12 22:31:15
【问题描述】:

我正在尝试将应用程序部署到我的 Kubernetes 集群中。它是一个多节点集群。有 3 m4.2xlrge aws 实例。

m4.2xlarge
vCPU :- 8
Memory :- 32

现在,在我的 deployment.yaml 文件中,我已经提到了该服务

limit:
  cpu: 11
request:
  cpu: 11

它给出错误,insufficient cpu 并且容器没有调度。我已经有(8*3)=24 CPU 资源可用,我请求了11 CPU。它应该跨节点共享 CPU 资源。 limitrequest CPU 是否适用于每个节点的容器?这意味着,每个 aws 实例至少应该有 11 CPU 吗?

【问题讨论】:

标签: amazon-web-services docker kubernetes containers cpu


【解决方案1】:

Pod 被调度在单个节点上。资源requests: 帮助决定它可以安排在哪里。如果您说requests: {cpu: 11},那么一定有一些具有 11 个(未预留)核心的单节点可用;但如果您的集群只有 8 核 m4.2xlarge 节点,则没有单个节点能够支持这一点。在这个级别,Kubernetes 无法以任何有用的方式跨节点“聚合”核心。

如果您请求大量 CPU 是因为您的进程有很多线程来执行并发处理,请考虑将线程数降低(甚至可能只有 1 个),然后在部署规范中更改 replicas:运行它的许多副本。每个单独的 Pod 将被安排在单个节点上,但如果有许多副本,您将获得许多可以分布在三个节点上的 Pod。

如果您的进程确实需要超过 8 个内核来运行,那么您需要具有超过 8 个内核的单个系统;考虑一个 m4.4xlarge(相同的 RAM 与 CPU 比率)或一个 c4.4xlarge(相同的总 RAM,两倍内核)。

【讨论】:

    【解决方案2】:

    当您为 pod 指定 limitrequest 时,它会考虑每个节点的 CPU 或内存容量。换句话说,您不能让 Pod 请求更多 CPU 或内存,而这在集群的单个工作节点上可用,如果您这样做,它将进入 Pending 状态并且在找到匹配的节点之前不会出现Pod 的request

    在您的情况下,大小为 m4.2xlarge 的工作节点有 8 个 vCPU,并且在部署文件中,您为 Pod 请求了 11 个 vCPU。即使您有 3 个大小为 m4.2xlarge 的节点,这也永远不会起作用。 Pod 总是安排在单个工作节点上,因此集群的总 CPU 容量是否超过 11 个 vCPU 无关紧要,因为 Pod 只能消耗来自单个工作节点的资源。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多