如何创建Kubernetes jobs和cronjobs?

kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的,而不是像deployment、replicasets、replication controllers和daemonsets等其他对象那样持续运行。
本文将介绍如何创建kubernetes jobs和cronjobs,以及一些小技巧。
kubernetes jobs会一直运行到job中指定的任务完成。也就是说,如果pods给出退出代码0,那么job就会退出。而在正常的kubernetes中,无论退出代码是什么,deployment对象在终止或出现错误时都会创建新的pod,以保持deployment的理想状态。
在job运行过程中,如果托管pod的节点发生故障,job pod将被自动重新安排到另一个节点。
kubernetes jobs用例‍‍‍‍
对于kubernetes jobs最好的用例实践是:
1.批处理任务:比如说你想每天运行一次批处理任务,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们分配给一个服务来处理文件。
2.运维/ad-hoc任务:比如你想要运行一个脚本/代码,该脚本/代码会运行一个数据库清理活动,甚至备份一个kubernetes集群。
如何创建kubernetes job
在本例中,我们将使用ubuntu 容器来运行一个带有for循环的shell脚本,并根据你传递给容器的参数来呼应消息。这个参数是一个数字,决定shell脚本循环应该运行多少次。
例如,如果你传递了参数100,那么shell脚本将呼应消息100次然后容器将会退出。
你可以访问以下链接查看dockerfile和shell脚本:
https://github.com/devopscube/kubernetes-jobs-example/tree/master/docker
我们先从一个简单设置的job开始。
step1:使用自定义的docker镜像创建一个job.yaml文件,命令参数为100。100将会作为参数传递给docker entrypoint脚本。
apiversion: batch/v1 
step2 :使用kubectl创建一个job.yaml文件的job
kubectl apply -f job.yam
step3:使用kubectl检查job的状态
kubectl get jobs
step4:使用kubectl获取pod列表
kubectl get po
step5:使用kubectl获取job pod 日志。使用你在输出中看到的pod名称替换原本的pod名称。
kubectl logs kubernetes-job-example-bc7s9 -f
你应该看到如下输出:
并行运行多job pods
当一个job被部署后,你可以让它在多个pod上并行运行。例如,在一个job中如果你想要运行6个 pods,同时并行运行2个pods,你需要添加以下2个参数到你的job manifets中:
completions: 6
以下是带有那些参数的manifest:
apiversion: batch/v1为kubernetes job生成随机名称 
你不能从一个job manifest文件中创建多个job,因为kubernetes会报错,说存在一个同名的job。为了规避这个问题,你可以在元数据中添加 generatename 名称参数。
例如:
apiversion: batch/v1
在上方示例中,每次你运行该manifest,job将以kube-job-作为前缀,后面跟着一个随机字符串来创建。
如何创建kubernetes cronjob
如果你想按照特定的时间表运行批处理job,例如,每2个小时运行一次。你可以用cron表达式创建一个kubernetes cronjob。job会按照你在job中提到的时间表自动启动。
下面我们将介绍如何指定一个cron计划,你可以使用crontab生成器(https://crontab-generator.org/)来生成自己的时间计划。
schedule: 0,15,30,45 * * * *
下图显示了kubernetes cronjob schedule语法。
来源:kubernetes.io
如果我们以cronjob的形式每15分钟运行一次我们之前的job,manifest应该如下所示。创建一个名为cron-job.yaml的文件,并复制以下manifest:
apiversion: batch/v1beta1
让我们使用kubectl部署cronjob。
kubectl create -f cron-job.yaml
列出cronjobs:
kubectl get cronjobs
你可以列出cronjob pod并从处于运行状态或完成状态的pods中获取日志来检查cronjob日志。
手动运行kubernetes cronjob
在某些情况下,你可能希望以临时的方式执行cronjob。你可以通过从现有的cronjob创建一个job来实现。
例如,如果你想手动触发一个cronjob,我们应该这样做:
kubectl create job --from=cronjob/kubernetes-cron-job manual-cron-job
--from=cronjob/kubernetes-cron-job将复制cronjob模板并创建一个名为manual-cron-job的job。
kubernetes job的关键参数
根据你的需求,你还可以使用kubernetes jobs/cronjobs的几个关键参数:
1.failedjobhistorylimit & successfuljobshistorylimit:根据你提供的保留数量删除失败和成功的job历史记录。当你尝试列出job时,这对于减少所有失败的条目非常有用。例如:
2.backofflimit:如果你的pod失败,重试的总次数。
3.activedeadlineseconds:如果你想对cronjob的运行时间进行硬性限制,可以使用此参数。例如,如果你想只运行1分钟的cronjob,你可以将其设置为60。
通过本文我们了解了创建job以及cron job的步骤并且一些详细的配置过程和关键参数,希望藉由本文可以帮助你开始上手了解k8s job和cron job,轻松搞定批处理任务!
图片来源:kubernetes.io
文章来源:php开源社区


Google来袭:价值1500美元的智能眼镜
基于Arduino的智能垃圾桶设计 电路非常简单
在电视机领域HDwir能取代LVDS技术的原因分析
Blu Wireless 将 Imagination 的 MIPS Aptiv CPU 与其突破性 60GHz 系统 IP 结合,瞄准 WiGig 和回程市场应用
剑指海外!天奇股份最新宣布!
如何创建Kubernetes jobs和cronjobs?
2022世界半导体大会,8月18-20日,南京揭幕!
无铅锡膏并不是0%的铅成分,你知道吗?
访问团全面了解和体验了商汤科技创新AI技术及应用
什么是VXLAN?为什么需要VXLAN?
新日东升:应用于FPC生产的PTH系列产品,得到广泛供应商认可
渊亭科技宣布完成亿元人民币B轮融资
取暖器上架亚马逊有什么要求?
物联网技术主要作用是什么?
飞思卡尔城域小区基站处理器推动LTE架构迈向移动宽带时代
简谈BlueNRG-LP和-LPS的代码空间优化
人工智能扩展人类自身能力,发展应用中的安全风险及应对策略
什么是VDSL
当高等教育遇到人工智能会有什么样的效果
电解电容器的储运与焊接注意事项