有时,调度一个应用程序进程、一些重复的操作(如发送邮件、告警、验证等)是极为必要的。在 server 上,我们通常使用一个 cron,它极易设置和维护。如果你对此还不甚了解,可以访问以下链接,你需要知道的所有关于 cron 的信息都在此:
https://en.wikipedia.org/wiki/Cron
在使用 Docker 的时候,你可以运行 crontab 来完成以上操作,但当你使用 Kubernetes 应该使用什么组件来进行上述操作呢?
实际上,Kubernetes 的运行方式有所不同,因为在负载均衡的情况下可能有一个或多个相同服务的实例,而不管启动多少个实例 crontab 仅运行一次。另一方面,我们需要 crontab 为一个或多个 pod 的每个进程都运行一次。在 Kubernetes 中有一个称为 CronJob 的特性解决了这一问题。
本文将介绍 CronJob 如何工作及其限制条件,最后给出几个 tips 来帮助你避免常见错误。
以下示例均基于 kind。
如何创建 CronJob:
CronJob 已经创建,它每分钟运行一个 curl 镜像。
同时,你需要设置资源限制(如 CPU 和内存),如果你将 AWS、Azure 或 GCP 实例作为 args,最好的可视化方式是在 Google 上进行简单的 curl 即可。
这一实例永远不会重启,而且成功和失败的历史 job 都有一个限制,在本例中这一次数设置为 3。
spec.successfulJobsHistoryLimit:要保留的成功完成的 cronjob 的数量
spec.failedJobsHistoryLimit:要保留的失败的 cronjob 的数量
如果你想了解更多关于 CronJob API 的信息,我强烈建议你阅读以下链接中的内容:
https://docs.koki.io/short/resources/cron-job
现在,运行以下命令以在 Kubernetes 中应用你的 CronJob。
如果没有错误发生,你能使用以下命令看到你最近配置的 cronjob:
我使用 Lens 来可视化所有可用的 cronjob,它对 Kubernetes 中的跟踪和监控都非常有用。
查看日志:
运行以下命令即可删除这一条目:
在本例中运行了一个简单的 Cron 以及一个实例。
我发现 CronJob 有一个局限性是需要通过在每个进程中添加一行来为同一进程调度多个 CronJob。但是,Kubernetes 1.8 beta 中不提供 CronJob,你必须使用并行机制(parallelism)复制相同的 CronJob。对于另一个调度,你需要创建另一个 cron 条目。我期待着将来有机会为同一进程调度多个模式。
结论
Kubernetes CronJob 非常有用并且易于学习,你可访问以下链接阅读和了解有关 API 参数的更多信息,并运行一些测试以更好地了解其工作原理:
https://docs.koki.io/short/resources/cron-job/
本文转载自:RancherLabs(ID:RancherLabs)
原文链接:K8S CronJob简单入门,和手动重复操作Say Goodbye!
评论