我们在开放式班次容器平台上部署了一个 Java 应用程序。有 4 个相同的无状态 Pod 运行该应用程序。在我们的应用程序中,调度程序每 15 分钟运行一次以处理一些数据。我只需要在其中一个 pod 中执行调度程序运行。因为在所有 pod 中都这样做会导致重复操作。我怎样才能做到这一点?我正在寻找一些最好和最简单的方法来实现这一点而不会太复杂。请给我一些选择。
问问题
32 次
2 回答
1
它真的需要在其中一个 pod 中运行吗?因为正如您所发现的那样,这有些问题。根据定义,pod 是相同的,因此要沿着这条路走下去,您将不得不使用某种外部协调器,例如数据库或 PV。*
另一方面,如果您使用CronJob 之类的东西,您可以让 OpenShift 为您完成有关调度和“仅发生一次”的工作。您还将获得更好的可见性、日志记录和故障排除。您甚至可以重新使用您的图像,也许只是使用不同的 CMD。
*从技术上讲,这不是真的,你可以在你的 pod 中使用某种共识机制,但如果你只是想要一个 cron 工作,那就太复杂了。
于 2022-01-28T17:34:50.383 回答
0
使用分布式锁。如果锁失败,其他 pod 正在执行任务。
于 2022-01-26T10:04:52.380 回答