对于Kubernetes,有没有一种方法可以在更新pod之前等待pod完成正在进行的任务?

对于Kubernetes,有没有一种方法可以在更新pod之前等待pod完成正在进行的任务?,kubernetes,deployment,celery,Kubernetes,Deployment,Celery,我在kubernetes内部管理一个应用程序, 我有一个前端(nginx,烧瓶)和一个后端(芹菜) 使用中间件(rabbitmq)将长时间运行的任务发送到后端 我的问题是,我可以随时接收长时间运行的任务,我不希望它干扰我升级应用程序版本的计划 我正在使用命令kubectl apply-f$MY_FILE部署/更新我的应用程序。但如果我在芹菜po忙的时候这么做,pod将被终止,我将失去任务 我尝试使用准备就绪探测器,但吊舱仍被终止。 我的问题是,有没有办法让kube只瞄准“空闲”的豆荚,然后等待忙

我在kubernetes内部管理一个应用程序, 我有一个前端(nginx,烧瓶)和一个后端(芹菜) 使用中间件(rabbitmq)将长时间运行的任务发送到后端

我的问题是,我可以随时接收长时间运行的任务,我不希望它干扰我升级应用程序版本的计划

我正在使用命令
kubectl apply-f$MY_FILE
部署/更新我的应用程序。但如果我在芹菜po忙的时候这么做,pod将被终止,我将失去任务

我尝试使用准备就绪探测器,但吊舱仍被终止。 我的问题是,有没有办法让kube只瞄准“空闲”的豆荚,然后等待忙碌的豆荚完成


谢谢

在pod终止之前,您可以使用预停止挂钩完成正在进行的任务

Kubernetes在容器终止之前立即发送预停止事件。除非Pod的宽限期到期,否则Kubernetes对容器的管理会一直阻塞到预停止处理程序完成为止。有关更多详细信息,请参阅


一种方法是使用新映像创建另一个部署,将其作为服务公开。仅将任何新请求传递到此新部署/服务

同时,旧的部署/服务仍然可以继续处理现有的请求,而不接受任何新的请求。处理完所有请求后,即可删除旧的部署/服务

这种方法唯一的问题是,由于旧/新部署/服务并行运行,在一段时间内需要的资源大约是原来的两倍


有点像a/B测试。仅供参考。。。Istio使操作变得简单。

谢谢您的回答,我会试试看!是的,它工作得很好,我现在只需要做一些调整。谢谢!是的,这是一个解决方案,但为了做到这一点,因为我的后端没有被芹菜暴露,我不能像你建议的那样停止流量。在这种情况下,logique必须在我的后端实现,我希望避免这种情况,因为对我来说这是kube的工作@ArghyaSadhu找到了解决办法。