问题:我们在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。很难说出您的软的功能,但是想到的一些可以帮助破解这种情况的事情是请求节流,水平吊舱自动计算机或以某种消息队列异步运行。