【发布时间】:2019-09-06 23:54:55
【问题描述】:
我需要在 K8S 创建一个 Cron 作业。
有些作业每分钟运行一次,其中一些每 5 分钟运行一次 (24/7)
此作业需要对某些组件运行休息调用(获取),并且 检查可用性,如果有问题(发布)其他系统的休息呼叫
为了处理这个任务,我目前看到了两种方法
-
创建 k8s cronjob - 这是 native k8s CRD 并为此使用
shell script,https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
PROS 正在使用 K8S 原生方式来处理此类问题
缺点 - 很难调试,记录调试等
- 创建 k8s 作业/cronjob - 执行运行 Golang 程序,该程序将使用以下库作为 cronjob
优点 - 调试、记录等,https://github.com/robfig/cron
缺点 - 创建一些抽象......
任何建议,如果我需要完全控制这些工作,建议使用哪种方法更好
【问题讨论】:
-
CONS - very hard to debug, logs debug etc- 在这种情况下,内部带有 cron 计时器的普通 k8s pod 如何帮助调试?它将是同一个容器,只是每个作业运行一个容器。 -
@MaxLobur - 我在谈论本地调试,go code vs shell script
-
如果您正在运行 K8S cronjob,它会在每次调用作业时创建一个 pod,因此很容易调试。您没有在容器内运行这些 cronjobs 有什么原因吗?您可以使用生命周期挂钩,因此您不必更改 Dockerfile。
-
所以调试应该是 k8s cron 工作的优点。您编写的代码只执行一次任务并退出 - 易于调试。如果您自己实现 cron 计时器,则每次调试时都需要将其分开。
-
@cookiedough - 我想创建一个 k8s
cronjob/job,它执行一个运行一些 API 调用的 go 程序。这不是一个好方法?我不想为每个调用创建一个 pod ....
标签: go kubernetes cron