【发布时间】:2022-06-27 16:19:12
【问题描述】:
我正在尝试找到一种解决方案来在 Kubernetes 部署的应用程序中运行 cron 作业,而不会出现不需要的重复项。为了给你一点背景,我将描述我的场景:
我想安排在指定日期执行一次的作业。更准确地说:创建这样的作业可以随时发生,并且只有在那时才能知道其执行日期。需要完成的工作始终相同,但需要参数化。 我的应用程序在 Kubernetes 集群中运行,我不能假设它只会同时运行一个实例。因此,由于我的所有应用程序实例都会生成它,因此创建所述作业将导致它的多次执行。但是,我想保证一个作业在整个集群中只运行一次。
我试图为多个作业运行的问题找到解决方案:
- 创建一个本地文件并在开始新作业时检查它是否已经存在。如果存在,请取消作业。
-> 这在我的情况下是不可能的,因为重复的作业可能会在其他机器上运行!
-> 我无法使用此功能,因为我必须从我的应用程序内部动态创建 cron 作业。我无法从在该集群内运行的 pod 更改集群配置。也许有办法,但在我看来,必须有一个比让应用程序访问它正在运行的集群更好的解决方案。
能否请您给我任何指示,我可能会找到解决方案?
我在 Digital Ocean 上使用托管 Kubernetes 集群:
客户端版本:v1.22.4, 服务器版本:v1.21.5
【问题讨论】:
-
您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是否使用裸机安装或某些云提供商?重现您的问题很重要。
-
@Mykola 我更新了我的问题以包含有关集群及其版本的信息。
-
你能添加你的 Pod 配置文件吗?对于通过 IP 进行的外部连接,您可以使用NodePort、Loadbalancer、Ingress 服务,但我认为这不是一个好主意。如果要连接到节点 CLI,请使用
kubectl execcommannd。
标签: kubernetes cron