有时,调度一个应用程序过程、一些反复的操作(如发送邮件、告警、验证等)是极为必要的。在 server 上,咱们通常应用一个 cron,它极易设置和保护。如果你对此还不甚了解,能够拜访以下链接,你须要晓得的所有对于 cron 的信息都在此:
https://en.wikipedia.org/wiki/Cron
在应用 Docker 的时候,你能够运行 crontab 来实现以上操作,但当你应用 Kubernetes 应该应用什么组件来进行上述操作呢?
实际上,Kubernetes 的运行形式有所不同,因为在负载平衡的状况下可能有一个或多个雷同服务的实例,而不论启动多少个实例 crontab 仅运行一次。另一方面,咱们须要 crontab 为一个或多个 pod 的每个过程都运行一次。在 Kubernetes 中有一个称为 CronJob 的个性解决了这一问题。
本文将介绍 CronJob 如何工作及其限度条件,最初给出几个 tips 来帮忙你防止常见谬误。
以下示例均基于 kind。
如何创立 CronJob:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cron-job
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-cron-job
image: curlimages/curl
resources:
limits:
cpu: "1"
memory: "300Mi"
requests:
cpu: "1"
memory: "300Mi"
args:
- /bin/sh
- -c
- date; echo "Starting an example of CronJob"; resp=$(curl -I --http2 https://www.google.com) ; echo $resp; exit 0
restartPolicy: Never
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
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。
$ kubectl apply -f cronjob.yml
如果没有谬误产生,你能应用以下命令看到你最近配置的 cronjob:
$ kubectl get cronjob
我应用 Lens 来可视化所有可用的 cronjob,它对 Kubernetes 中的跟踪和监控都十分有用。
查看日志:
运行以下命令即可删除这一条目:
$ kubectl delete cronjob my-cron-job
在本例中运行了一个简略的 Cron 以及一个实例。
我发现 CronJob 有一个局限性是须要通过在每个过程中增加一行来为同一过程调度多个 CronJob。然而,Kubernetes 1.8 beta 中不提供 CronJob,你必须应用并行机制(parallelism)复制雷同的 CronJob。对于另一个调度,你须要创立另一个 cron 条目。我期待着未来有机会为同一过程调度多个模式。
结 论
Kubernetes CronJob 十分有用并且易于学习,你可拜访以下链接浏览和理解无关 API 参数的更多信息,并运行一些测试以更好地理解其工作原理:
https://docs.koki.io/short/re…
原文链接:https://dzone.com/articles/ku…