Kubernetes 多节点集群中 cpu 不足

Insufficient cpu in Kubernetes multi node cluster

我正在尝试将应用程序部署到我的 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 吗?

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

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

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

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

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

希望对您有所帮助!