有时,调度一个应用程序进程、一些重复的操作(如发送邮件、告警、验证等)是极为必要的。在server上,我们通常使用一个cron,它极易设置和维护。如果你对此还不甚了解,可以访问以下链接,你需要知道的所有关于cron的信息都在此:
https://en.wikipedia.org/wiki/Cron

在使用Docker的时候,你可以运行crontab来完成以上操作,但当你使用Kubernetes应该使用什么组件来进行上述操作呢?

实际上,Kubernetes的运行方式有所不同,因为在负载均衡的情况下可能有一个或多个相同服务的实例,而不管启动多少个实例crontab仅运行一次。另一方面,我们需要crontab为一个或多个pod的每个进程都运行一次。在Kubernetes中有一个称为CronJob的特性解决了这一问题。

本文将介绍CronJob如何工作及其限制条件,最后给出几个tips来帮助你避免常见错误。

以下示例均基于kind。

如何创建CronJob:

apiVersion: batch/v1beta1kind: CronJobmetadata:  name: my-cron-jobspec:  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/resources/cron-job/

原文链接: https://dzone.com/articles/kubernetes-cronjob-an-introduction

©著作权归作者所有:来自51CTO博客作者RancherLabs的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. Matlab仿真模拟的4个非常基础!!实例(附源码)
  2. vue api实例方法 有四个 $watch $emit $forceUpdate $nextTick!
  3. Kubernetes Containerd集成进入GA阶段
  4. 阿里自研RISC-V芯片成功运行Android 10
  5. Kubernetes在喜马拉雅的实践:测试环境稳定性
  6. 谷歌开发MicroDroid,用于虚拟机的精简版Android
  7. 一文读懂OpenStack Glance是什么
  8. 以 DEBUG 方式深入理解线程的底层运行原理
  9. PHP:OOP基础/类(对象抽象化的结果)与对象 (类实例化结果)/构造方

随机推荐

  1. golang 乱码怎么解决
  2. golang判断字符串是否为空的方法
  3. golang怎么生成随机数
  4. golang 开源吗
  5. golang判断字符串是否数字的方法
  6. golang数组和切片的区别是什么
  7. golang用什么ide
  8. golang中协程和线程的区别是什么?
  9. golang编程语言能开发啥
  10. golang数据类型有哪些