写点什么

K8S CronJob 简单入门,和手动重复操作 Say Goodbye!

2020 年 12 月 20 日

K8S CronJob简单入门,和手动重复操作Say Goodbye!

有时,调度一个应用程序进程、一些重复的操作(如发送邮件、告警、验证等)是极为必要的。在 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/


本文转载自:RancherLabs(ID:RancherLabs)

原文链接:K8S CronJob简单入门,和手动重复操作Say Goodbye!


2020 年 12 月 20 日 07:00761

评论

发布
暂无评论
发现更多内容

架构师系列11 微服务架构的思考

桃花原记

skynet源码分析之网络层—Lua层

赖猫

c++ lua skynet

今天,我们为什么应该读懂华为人工智能?

脑极体

TypeScript | 第五章:高级类型

梁龙先森

typescript 前端 七日更

你不得不知道的反射(非常重要)

安琪拉的博客

Java 反射 java反射

【Java入门】Array

HQ数字卡

Java 七日更

花火交易所系统APP软件开发

开發I852946OIIO

系统开发

乘百度AI之风,媒体从业者们这样登上智能云端

脑极体

架构师训练营大作业1

邓昀垚

刘华:戏说Docker和K8s,一文让你成为懂王

刘华Kenneth

Docker 云计算 Kubernetes DevOps k8s

一个HashMap能跟面试官扯上半个小时

安琪拉的博客

Java HashMap底层原理

游戏自动化测试——局内战斗

行者AI

测试

python3参考秘籍-附PDF下载

程序那些事

Python 程序那些事 Python秘籍 Python数据分析

刨根问底,kafka到底会不会丢消息

爱笑的架构师

kafka 消息队列 Kafka知识点 消息中间件 七日更

GitHub标星78.9K的算法宝典,让你分分钟刷爆LeetCode,更有“左神”精讲视频加持,金三银四offer手到擒来

云流

程序员 面试 算法 架构师

“关灯”看这出戏,依旧是百年至美

脑极体

如何解决MySQL主从数据库没有同步的问题?

冰河

MySQL 高可用 主从复制

关于自己的一个梦(控制)

Yuchen

情绪控制 心理 个人 控制感 自我思考

架构师训练营第五周总结

Geek_xq

一周信创舆情观察(12.14~12.20)

统小信uos

多线程之信号量(By C++)

赖猫

c++ 多线程

笔记|怎样成为高效学习的人

熊斌

学习 个人成长 成长笔记 七日更

Java异常处理的9个最佳实践,看看自己是不是都用过?

geekymv

Java 异常处理

够屌!看完“大牛程序员必修16课”足足让你超越80%Java面试者!赶紧冲!

比伯

Java 编程 程序员 架构 面试

微服务:服务本身的设计、维护以及治理

积极&丧

架构师训练营第五周作业

Geek_xq

Hystrix-技术专题-基础运作原理

李浩宇/Alex

生产环境全链路压测建设历程 20:某快递 A 股上市公司的生产压测案例之彩蛋

数列科技杨德华

全链路压测 七日更

图解HTTP权威指南(二)| 连接管理

李先生

运维 HTTP SRE TCP/IP

领域驱动落地实现

星际行者

DDD 领域驱动

2020 年美国程序员收入报告出炉,字节跳动上榜

多颗糖

程序员 招聘

海量并发场景下的缓存架构设计

海量并发场景下的缓存架构设计

K8S CronJob简单入门,和手动重复操作Say Goodbye!-InfoQ