登录
首页 >  Golang >  Go问答

怎样在 Kubernetes 中确保 Pod 在复制后只执行一次逻辑?

来源:stackoverflow

时间:2024-02-22 22:09:28 261浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《怎样在 Kubernetes 中确保 Pod 在复制后只执行一次逻辑?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我的 golang 应用程序代码中有一个 cronjob。 现在,此代码位于 pod 内的容器内

发生了什么

假设我有一个 cronjob 每周日发送电子邮件。

应用程序开始运行,并在应用程序启动后立即创建 cronjobs。

现在,如果我有 3 个这样的 pod,则应用程序在每个 pod 中启动三次,并且有自己的 cronjob,因此电子邮件将发送三次。

我想要什么

电子邮件应该只发送一次,即所有 cronjobs 应该只运行一次,与我创建的副本数量无关

我怎样才能实现这个目标?

最好:我希望将作业放在应用程序内,因为如果将它们分开,我将必须调用 API 端点而不是直接调用服务。


正确答案


TL;DR:也许您需要重新考虑将 cronjobs 与通过 API 公开的函数放在一起的价值。

即将 cronjobs 放在一个没有副本的单独 pod 中。

从现有信息来看,这似乎最容易解决您的问题。

接下来的问题是,首先通过共同定位 cronjobs 获得了哪些价值或解决了哪些问题(除了方便之外)?

如果没有其他问题,或者该问题可以通过其他方式更轻松地解决,而不是解决托管解决方案带来的额外复杂性,那么您就有了答案.

另一个要应用的测试是哪种解决方案架构更容易让人理解(以及将来的扩展、修改或维护):

  1. 单独的 cronjobs,仅运行一次,并通过 API 完成工作

  2. 多个 cronjobs 看似有意放置在复制集中,但具有一些复杂的协调机制,旨在确保这些多个作业中只有一个实例实际上有效,而其他实例则基本上不起作用

到这里,我们也就讲完了《怎样在 Kubernetes 中确保 Pod 在复制后只执行一次逻辑?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>