企业如何选择合适的技术方案?点击看专家聊数字化转型落地过程中的困难和解决办法 了解详情
写点什么

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

  • 2020 年 12 月 20 日
  • 本文字数:1403 字

    阅读完需:约 5 分钟

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:001476

评论

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

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

Carlos

“信息茧房”里的人

架构精进之路

程序员 自我思考

week04 学习总结 互联网面临挑战和架构模式

Z冰红茶

大型互联网应用技术方案

石刻掌纹

计算机操作系统基础(六)---作业管理之进程调度

书旅

Java php 多线程 操作系统 进程

万字长文,让 Java 程序员入门小众语言 Ruby

Phoenix

Java ruby 个人成长 编程语言

漫画通信:惊呆了,手机登录还可以这么玩!

阿里云Edge Plus

云通信 通信 通信云

架构师训练营第4周作业

时来运转

围绕 Office 365 的那些 CLI

手艺人杨柳

Office 365

程序员不得不知的十大职场误区

陆陆通通

程序员 职场 架构师 工资 误区

使用 Prometheus-Operator 监控 Calico

米开朗基杨

Prometheus calico

HTTP 的15个常见知识点复习

pingan8787

Java 大前端 Web HTTP

拿着锤子的人,哪里都是钉子

Neco.W

思维方式 思考力

第四周作业

技术小生

极客大学架构师训练营

架构师训练营第四章总结

叮叮董董

总结 架构师 训练营

架构师训练营第 4 周 总结

时来运转

重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

小傅哥

Java 设计模式 小傅哥 重构 备忘录模式

以应用为中心:开放应用模型(OAM)初探

郭旭东

Kubernetes OAM

自由职业的前半年,我是如何度过的?

王磊

Java 程序员

Prometheus 存储层的演进

伴鱼技术团队

性能优化 系统架构 Prometheus 存储 时序数据库

设计模式

Jeff

深入浅出Shiro系列

程序员的时光

架构师训练营第四章作业

叮叮董董

架构 技术方案 解决手段 互联网架构

为什么美国程序员工作比中国程序员工作轻松、加班少?

程序员生活志

程序员 加班

Linux系统查询端口命令

打鱼小王子

架构师训练营 - 第四周命题作业

牛牛

极客大学架构师训练营 作业

架构5班3-4组优秀作业

tracy

《机器学习理论导引》阅读攻略

华章IT

学习 周志华

项目域名配置流程

打鱼小王子

架构师训练营第四章作业

饶军

安畅迁移平台的云原生之路

雪雷

Kubernetes DevOps 云原生 CI/CD 迁移

K8S CronJob简单入门,和手动重复操作Say Goodbye!_文化 & 方法_Rancher_InfoQ精选文章