使用高差异内存/ CPU负载确保Kubernetes的可用性?

时间:2017-12-04 23:03:29

标签: kubernetes

问题:我们在Kubernetes Pods上运行的代码在其运行时间内具有非常高的差异;具体来说,它偶尔有CPU&amp;触发某些条件时,内存峰值。这些触发器涉及具有硬实时要求的用户查询(系统必须在<5秒内响应)。

在服务尖峰吊舱的节点没有足够的CPU / RAM的条件下,Kubernetes通过完全杀死吊舱来响应这些过多的请求;无论如何都会导致无输出

我们可以通过什么方式确保在分配pod时考虑这些峰值;更重要的是,由于这些原因没有发生吊舱关闭?

谢谢!

2 个答案:

答案 0 :(得分:1)

带有负载的吊舱的高可用性可以通过两种方式实现:

  

配置更多CPU /内存

由于应用程序在峰值时间内需要更多的CPU /内存,因此配置POD的资源将负责额外的负载。配置POD如下:

resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

您可以根据使用情况增加限制。但这种做法可能导致两个问题

1)未充分利用的资源

由于资源大量分配,除非流量激增,否则可能会浪费这些资源。

2)部署失败

POD部署可能会失败,因为kubernetes节点中没有足够的资源来满足请求。

了解更多信息:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

<强>&GT;自动缩放

这样做的理想方法是根据流量自动调整POD。

kubectl autoscale deployment <DEPLOY-APP-NAME> --cpu-percent=50 --min=1 --max=10 

根据需求配置cpu-percent,默认为80%。最小值和最大值是可以相应配置的PODS的数量。

因此,每当POD以50%达到CPU百分比时,将启动新的pod,并持续到最多启动10个PODS,同样适用于反之亦然。

了解更多信息:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

答案 1 :(得分:0)

限制是一个限制,期望这样做,期限。

你可以做的就是无限制地运行 - 然后它会在节点上运行时表现得像任何其他情况一样 - 当Node,而不是Pod达到内存限制时,会发生OOM。但这听起来像是在寻找麻烦。并且请注意,即使您设置了一个上限,它也可以确保pod的某些资源,所以即使在Pod上限制为2Gi,如果请求为128Mi,也可以在512Mi上进行OOM

您应该以不会产生此类峰值或容忍pod上的OOM的方式设计您的应用。很难说出你的软件究竟做了什么,但有些事情可以帮助解决这个问题,包括请求限制,水平pod自动调节器或与某种消息队列异步运行。