我需要在 K8S 上创建一个 Cron 作业。
有些作业每分钟运行一次,有些作业每 5 分钟运行一次 (24/7)
此作业需要对某些组件运行休息调用(获取)和 检查可用性,如果有问题(发布)到其他系统的休息电话
为了处理这个任务,我目前看到两种方法
- 创建 k8s cronjob - 这是原生 k8s CRD 并为其使用
shell 脚本
,https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
PROS 使用 K8S 原生方式处理此类问题
缺点 - 很难调试,记录调试等
- 创建 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/