确保具有高变化内存 / CPU负载的Kubernetes的可用性



问题:我们在kubernetes Pod上运行的代码在其运行时具有很高的差异;具体而言,它偶尔有CPU&触发某些条件时,内存尖峰。这些触发器涉及具有硬实时需求的用户查询(系统必须在< 5秒内响应)。

在服务尖峰吊舱的节点没有足够的CPU/RAM的条件下,Kubernetes通过完全杀死POD来响应这些过多的要求。这在任何时候都导致无输出

在分配豆荚时,我们可以以什么方式确保考虑这些尖峰;更重要的是,由于这些原因,没有发生POD关闭?

谢谢!

可以通过两种方式实现带负载的豆荚的高可用性:

配置更多CPU/MOMEME

由于应用程序在高峰时间配置过程中需要更多的CPU/内存,以使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-resources-container/

>自动级别

理想的做法是根据流量自动自动启用吊舱。

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

根据要求配置CPU%,默认情况下为80%。最小和最大是可以相应配置的POD数量。

因此,每次吊舱都以50%的速度击中CPU%时,将推出新的POD并继续进行,直到它发射10个POD,并且适用于反之亦然。

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

限制是一个限制,预计会这样做。

您可以做的是无限制运行 - 然后在节点上运行时的任何其他情况下的行为 - 在节点时会发生OOM,而不是POD达到内存限制。但这听起来像是要麻烦。并请注意,即使您设置了高限制,实际上是实际的要求保证了一些资源到POD的要求,因此即使在POD上的2GI限制也可以在512MI上OOM,如果请求为128mi

您应该以不会产生这样的尖峰的方式设计您的应用程序,或者可以忍受豆荚上的OOM。很难说出您的软的功能,但是想到的一些可以帮助破解这种情况的事情是请求节流,水平吊舱自动计算机或以某种消息队列异步运行。

最新更新