Kubernetes多节点集群中的CPU不足

时间:2018-12-11 21:21:08

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

我正在尝试将应用程序部署到我的Kubernetes集群中。它是一个多节点群集。有IdMap<Foo>个aws实例。

3 m4.2xlrge

现在,在我用于该服务的m4.2xlarge vCPU :- 8 Memory :- 32 文件中,我已经提到

deployment.yaml

出现错误,limit: cpu: 11 request: cpu: 11 ,并且容器未调度。我已经有insufficient cpu个CPU资源可用,我已请求(8*3)=24个CPU资源。它应该在节点之间共享CPU资源。 11limit CPU是否适用于每个节点的容器?那意味着,每个aws实例是否应该至少有request个CPU?

2 个答案:

答案 0 :(得分:3)

已将Pod安排在单个节点上。资源requests:帮助决定可以在何处进行调度。如果您说requests: {cpu: 11},则必须有一些具有11个(未保留的)核心的单个节点。但是,如果您的群集仅具有8核m4.2xlarge节点,则没有单个节点将能够支持此功能。在这个级别上,Kubernetes不能以任何有用的方式“聚合”跨节点的内核。

如果由于进程具有大量线程来执行并发处理而请求大量CPU,请考虑调低线程数(甚至减少到1),然后在其中更改replicas:部署规范以运行其许多副本。每个单独的Pod都将在单个节点上进行调度,但是有了许多副本,您将获得许多Pod,这些Pod可以分布在三个节点上。

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

答案 1 :(得分:0)

当您为Pod指定limitrequest时,它会考虑每个节点的CPU或内存容量。换句话说,您无法在集群的单个工作节点上拥有一个请求更多CPU或内存的Pod,如果这样做,它将进入Pending状态,直到找到一个节点时才会出现匹配Pod的request

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

希望这会有所帮助!