我有一个Kubernetes批处理作业在WebSphere集群上运行,扩展到10个pods。每个pod都有相同的代码库,并且每个pod都有多个JSR批处理作业。我想做滚动更新和零停机。
根据文档(https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/和https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-terminating-with-grace),我们可以创建停止前关闭钩子来捕获SIGTERM,并在terminationGracePeriodSeconds之前完成最后的清理活动,Kubernetes发出强制终止并退出容器。
我想知道的是,假设一个批处理作业已经在运行,如果我进行更新/重新部署,是否可以等到正在运行的作业完成,或者更新不运行作业的pod?
发布于 2020-01-27 23:38:10
我不知道有什么方法可以推迟关机,直到工作自然完成。通常,人们会尝试停止正在运行的作业,然后稍后重新启动它们。如果您可以确定哪些作业正在此服务器上运行,则可以对这些作业发出停止命令,并等待它们完成(通过检查作业状态),然后才允许服务器终止。如果您很好地停止了服务器,那么它将自动尝试停止作业,但只会等待一小段时间(30秒?)在关闭服务器之前。
停止正在运行的作业很棘手,因为它们不一定会停止。例如,如果作业正在执行Batchlet,那么Batchlet的stop( )方法将被驱动,但是批处理应用程序可以自由地忽略它,什么也不做(或者可能无法执行任何操作来停止,这取决于步骤的作用)。
至于阻止新工作进入服务器,这取决于工作是如何进入服务器的(有几种不同的可能性)。
https://stackoverflow.com/questions/59929644
复制相似问题