我从 Kubernetes 开始,我有一个关于 CronJob 的问题,在我的项目中,我需要每分钟启动一个 cron 作业。在许多使用 CronJob 资源的教程中,我设置了它,我看到每分钟都会创建一个 pod 来执行命令,然后被销毁,并且无限期地销毁。我想知道在我的情况下(每分钟)使用 Kubernetes CronJob 资源是否很有趣,因为知道每分钟都会通过拉取图像等来创建一个 pod ......我发现这个过程有点麻烦,不是更好吗一个以传统方式执行 cron 的简单 pod?
3 回答
看看在 pod 内运行 cronjob 而不是 kubernetes CronJob。这样,您就不必每分钟都为启动一个新 pod 而烦恼。
我更喜欢使用 CronJobs 将 cronjobs 作为原生 Kubernetes 工作负载运行。与在一个 pod 中运行作业相比,作为 CronJob 运行允许 Kubernetes 有效地管理资源。您还可以轻松扩展作业数量,并且您不限于一个节点。
但是,您必须处理失败的作业、重叠的作业、幂等性等,您必须使用任何调度程序来解决这些问题。
此外,您可以根据您的业务用例考虑使用专用 pod。如果您正在实现发布者-订阅者,那么运行专用容器是有意义的。对于简单的工作,CronJobs 应该可以工作。
顺便说一句,您不必担心每次都拉图像。您可以将 imagePullPolicy 指定为 IfNotPresent。
仅当图像在本地不存在时才被拉取。
我认为权衡取决于 cronjob 运行的频率以及它是否可能做很多工作。如果不频繁,为什么要让一个 pod 坐在那里无所事事?此外,每次安排作业时,可以将 pod 安排在更合适/空/较新的节点上,而部署通常会将该 pod 留在安排它的节点上,直到您对其进行更新。
监控工具更有可能面向原生 K8S cronjobs,否则,你怎么知道你的工作被跳过/出错等?
如果更频繁并且您想要实时日志记录等内容,那么通过部署的 pod(s) 可能会有所帮助。