假设我有两个 pod:一个用于提供网页,另一个用于执行一致的计算,例如一个 pod 上有一个 Flask 服务器,另一个 pod 上有一个 Spark Executor。
突然间,一项新功能为 Flask 服务器上的特定路由创建了大量流量。通常,执行器是数字且一致的,而 Flask 服务器是稀疏的且受内存/IO 限制,但这会导致工作负载非常相似,并导致此节点上的 CPU 停滞。
Kubernetes 的调度程序能否识别这一点并重新安排 pod?
答案1
不,它不是这样运作的。
一旦 pod 被调度,K8s 就不会跟踪其 cpu/memory/io。您需要自行测量并更改部署。
我并不是说这做不到。我只是说 k8s 不是开箱即用的,而且我也不知道有任何第三方解决方案可以做到这一点。
以下是我建议你可以做的事情:
既然你知道你不想让 Flask 和 Spark 一起工作,那么你可以使用亲和性功能。更具体地说:podAntiAffinity
你还可以做一件事就是设置 pod资源限制/请求。
通过这种方式,您可以确保 pod 仅使用允许使用的资源量,因此它不会使节点停滞。添加 pod 资源限制通常被认为是一种很好的做法。