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