go - Cron 作业作为程序或原生 k8s 方式

标签 go kubernetes cron

我需要在 K8S 上创建一个 Cron 作业。
有些作业每分钟运行一次,有些作业每 5 分钟运行一次 (24/7)

此作业需要对某些组件运行休息调用(获取)和 检查可用性,如果有问题(发布)到其他系统的休息电话

为了处理这个任务,我目前看到两种方法

  1. 创建 k8s cronjob - 这是原生 k8s CRD 并为其使用shell 脚本https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

PROS 使用 K8S 原生方式处理此类问题

缺点 - 很难调试,记录调试等

  1. 创建 k8s 作业/cronjob - 执行运行一个 Golang 程序,它将使用以下库作为 cronjob

PROS - 调试、日志记录等,https://github.com/robfig/cron

缺点 - 创建一些抽象......

如果我需要完全控制这些工作,有什么建议和建议是更好的使用方法

最佳答案

我会分几个步骤解决这个问题。

首先,编写执行 REST 调用的程序,检查结果,可能发布警报,然后退出。您可以使用任何您喜欢的语言或工具包来编写这个程序。如果您对 Go 感到满意,那很好;我可能会自己选择 Python;它可以作为 shell 脚本,但可能比许多替代方案更笨拙。 完全独立于 Kubernetes 构建此程序。尽可能多地测试它以说服自己它可以满足您的要求。

让 REST 轮询程序运行后,然后才将其构建到 Docker 镜像中;将其推送到注册表;并创建一个 CronJob按计划运行它的 Kubernetes 资源。

鉴于您对任务的描述,我不会编写专门的程序来复制 Kubernetes 的内置计划任务运行器。你可以;我会像上面一样开发它,但使用 Deployment 而不是 CronJob;但 CronJob 路径可能更简单也更可靠。

关于go - Cron 作业作为程序或原生 k8s 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715625/

相关文章:

go - 在 gorp 中使用 Select 的问题

GoLang-术语框 : panic: open/dev/tty: no such device or address

go - 具有多个 UI 的工具的项目结构

docker - 容器化和编排使用哪个工具以及原因

kubernetes - 完成kubernetes作业会对API服务器造成多少压力?

go - 为什么 golang slice 内部设计成这样?

kubernetes - Kubernetes 的调度器是如何工作的?

linux - 如何在 Ubuntu 服务器 14.04 中将目录复制到外部驱动程序?

python - 自动更新证书时,centos 7 的 crontab 中的 python 代码有什么用?

linux - Linux 的 crontab 天异常(exception)