【问题标题】:Spring boot scheduler running cron job for each pod为每个 pod 运行 cron 作业的 Spring Boot 调度程序
【发布时间】:2022-01-26 18:48:03
【问题描述】:

当前设置

我们有 3 个运行 spring boot 应用程序的 kubernetes pod 的 kubernetes 集群设置。我们使用 Spring Boot 调度程序每 12 小时运行一次作业以获取一些数据并缓存它。(有队列设置,但我不会继续这些细节,因为我的查询是在进入队列之前进行设置)

问题

因为我们有 3 个 pod 并且调度程序处于应用程序级别,所以我们对数据集进行了 3 次调用,每个 pod 都会获得响应,并且在缓存中处理的 pod 首先成为主节点,其他 2 个 pod 从该实例复制数据。

我认为这是一个问题,因为我们将增加作业数量以获取更多数据集,因此这将成倍增加调用次数。

我不是 Devops 方面的人,并且对 azure 的了解有限,因此我需要社区的帮助

需要

有哪些方法可以改善这一点?我想分离出 Cron 计划只运行一次,而不是每个 pod 1 - 我可以将 cronjob 保持在集群级别吗,我在这里读过 https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ 这会解决问题吗?

2 - 我在谷歌上搜索并发现其他选项是运行一个 Cronjob,它将安排一个作业完成,这会有所帮助,但不确定它的真正含义。

在此先感谢您抽出时间阅读。

【问题讨论】:

    标签: kubernetes cron kubernetes-pod kubernetes-cluster


    【解决方案1】:

    根据我对您的问题的理解,您似乎有以下两种选择(至少)-

    1. 如果您在 springboot 主应用程序中继续有调度逻辑,那么您可能想要探索类似shedlock 的东西,这有助于确保您通过应用程序代码安排的作业仅通过外部锁提供程序(如 MySQL、Redis、等当应用程序代码在多个节点(或您的情况下为 kubernetes pod)上运行时。
    2. 如果您可以将特定于调度程序的应用程序代码分离到其自己的可执行进程中(即,该代码可以在单独的一组 pod 中运行,而不是您的主应用程序代码 pod),那么您可以利用 kubernetes cronjob 来调度 kubernetes 作业在内部创建 pod 并运行您的应用程序逻辑。这种方法的好处是您可以使用本机 kubernetes cronjob parameters like concurrency and few others 来确保作业在预定时间内通过单个 pod 仅运行一次。

    使用方法 (1),您可以将调度程序代码与您的主应用程序结合起来,并在同一个 pod 中一起运行它们。

    使用方法 (2),您必须将您的代码(在调度程序中运行)与整个应用程序代码 containerize it into its own image 分开,然后使用这个引用 official guide examplekubernetes cronjob best practices 的新映像配置 kubernetes cronjob 调度(由我撰写,但可以找到其他示例)。

    这两种方法各有优缺点,因此您可以评估它们以最适合您的需求。

    【讨论】:

    • 欢迎来到 Stack Overflow,感谢您的贡献。如果您要参考自己的文章,请务必阅读 How to not be a spammer 以确保您没有违反 Stack Overflow 的自我宣传政策。至少,您需要披露您是文章引用的作者。
    • 感谢@JeremyCaney 分享最佳实践,在 Stack Overflow 上进行交互时我一定会遵守这些。为了确认,我试图通过提供潜在选项和有用的外部链接来回答这个问题,即使问题中没有共享代码示例并且 OP 正在寻找可用选项作为答案。我已经表明我提供的链接之一是由我创作的,并且还提到 OP 可以免费检查其他示例。
    • 啊,是的,我现在看到了那个披露;我很抱歉之前错过了它。再次感谢您的贡献,并注意自我推销规则。
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2012-12-21
    • 2020-08-05
    • 1970-01-01
    • 2012-01-11
    • 2010-11-19
    • 2020-03-24
    • 2021-04-07
    相关资源
    最近更新 更多