使用多个pod在openshift上部署Spring批处理

时间:2018-04-12 07:31:51

标签: openshift spring-batch

我在Openshift上部署了一个应用程序,我使用了至少2个pod。

我的战争包含一个由Spring cron安排的Spring Batch应用程序。

当然,每个pod同时启动同一批,这是我的问题/问题。

有没有办法避免这种行为?我想只启动一个批处理实例(或者有没有办法配置Spring批处理以检查批处理是否已经运行?)

提前致谢。

2 个答案:

答案 0 :(得分:1)

假设您使用部署,这不是微不足道的,但这里有一些可以帮助您的想法。

  1. 使用Kubernetes的ScheduledJobs / CronJobs。这意味着您将完全放弃控制从您的应用程序启动批处理并启动专用pod以执行批处理作业并死亡

  2. 使用主选手边车建立执行批次的权利(https://github.com/kubernetes/contrib/tree/master/election

  3. 自行实施一些锁定机制

  4. 使用StatefulSet和绑定批处理只能在特定的主机名上运行(即通过config var传递给Pods,如BATCH_HOSTNAME.StatefulSets具有确定性名称,因此您可以说该批处理应仅在my-pods-0 <上运行/ p>

答案 1 :(得分:0)

听起来你需要在你的情况下选举领袖。 Spring Integration提供了领导者选举功能,您可以使用它来确定谁是主人。那个主人将是真正开始工作的人。另一个会忽略预定的事件。您可以在此处的文档中阅读有关Spring Integration的领导者选举的更多信息:https://docs.spring.io/spring-integration/api/org/springframework/integration/support/leader/LockRegistryLeaderInitiator.html