使用 Kubernetes 有没有办法在更新之前等待 pod 完成其正在进行的任务?
With Kubernetes Is there a way to wait for a pod to finish its ongoing tasks before updating it?
我在 kubernetes 中管理一个应用程序,
我有一个前端(nginx,烧瓶)和一个后端(芹菜)
使用中间件(rabbitmq)
将长 运行 任务发送到后端
我的问题是,我随时都会收到很长的 运行 任务,我不希望它打扰我升级应用程序版本的计划。
我正在使用命令 kubectl apply -f $MY_FILE
来 deploy/update 我的应用程序。但是,如果我在 celery po 忙碌时执行此操作,则 pod 将终止,并且我将丢失任务。
我尝试使用就绪探测器,但 pods 仍在终止。
我的问题是,有没有办法让 kube 只定位 'free' pods,然后等待 busy on 完成?
谢谢
您可以使用 preStop 挂钩在 pod 终止之前完成正在进行的任务。
Kubernetes 在容器终止之前立即发送 preStop 事件。 Kubernetes 对 Container 的管理会阻塞直到 preStop 处理程序完成,除非 Pod 的宽限期 expires.For 更多详细信息,请参阅 Termination of Pods.
一种方法是使用新映像创建另一个部署,将其公开为服务。仅将任何新请求传递给这个新 deployment/service.
同时,旧的 deployment/service 仍然可以继续处理现有的请求,而不接受任何新的请求。处理完所有请求后,可以删除旧的 deployment/service。
这种方法的唯一问题是,在一段时间内需要的资源大约是 old/new deployment/service 运行 的两倍。
类似于 A/B 测试。仅供参考 ... Istio 使用 traffic management.
很容易
我在 kubernetes 中管理一个应用程序, 我有一个前端(nginx,烧瓶)和一个后端(芹菜) 使用中间件(rabbitmq)
将长 运行 任务发送到后端我的问题是,我随时都会收到很长的 运行 任务,我不希望它打扰我升级应用程序版本的计划。
我正在使用命令 kubectl apply -f $MY_FILE
来 deploy/update 我的应用程序。但是,如果我在 celery po 忙碌时执行此操作,则 pod 将终止,并且我将丢失任务。
我尝试使用就绪探测器,但 pods 仍在终止。 我的问题是,有没有办法让 kube 只定位 'free' pods,然后等待 busy on 完成?
谢谢
您可以使用 preStop 挂钩在 pod 终止之前完成正在进行的任务。
Kubernetes 在容器终止之前立即发送 preStop 事件。 Kubernetes 对 Container 的管理会阻塞直到 preStop 处理程序完成,除非 Pod 的宽限期 expires.For 更多详细信息,请参阅 Termination of Pods.
一种方法是使用新映像创建另一个部署,将其公开为服务。仅将任何新请求传递给这个新 deployment/service.
同时,旧的 deployment/service 仍然可以继续处理现有的请求,而不接受任何新的请求。处理完所有请求后,可以删除旧的 deployment/service。
这种方法的唯一问题是,在一段时间内需要的资源大约是 old/new deployment/service 运行 的两倍。
类似于 A/B 测试。仅供参考 ... Istio 使用 traffic management.
很容易