持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
k8s中的job
前文
本文内容主要为关于k8s中job相关知识的总结与整理,由于其中包含部分个人的理解,因此可能存在不准确或不全面之处。
什么是job
相比于常规的通过deployment部署的pod,job主要是强调任务的一次性执行。对于pod而言,当我们部署起一个pod时,它是一个完整的提供长期服务的组件。只要不进行关闭且pod启动成功,它会一直运行下去。而job本身来说,它属于专门应用于任务执行的组件。当任务执行完毕后,job与常见的pod不同,会自动的退出结束。但当job被成功退出后,job不会被删除,而是被保留用于日志的查找,以便检查我们所需要的日志及输出内容等等。
job的应用
apiVersion: batch/v1
kind: Job
metadata:
name: job
spec:
parallelism: 2
completions: 10
template:
spec:
restartPolicy: OnFailure
containers:
- name: echo
image: xx
command: [for i in 1 2 3 4 5 ; do echo $i ; done]
如上面的配置文件所示,我们定义了一个job任务,任务中进行了一系列的打印。当打印结束时,job所对应的容器会被退出处理。在job的配置中,我们定义了job执行过程中,总共的任务数量以及同时执行的并发数量。也就是对于这个job来说,不会在第一个pod执行完毕时及整个任务结束,而是会将指定数目的pod全部完成执行。当job任务彻底执行完毕后,也就是10个任务均执行结束,我们会得到一组已退出的pod,但这些pod不会被删除,方便我们进行日志的查询。
此外,我们的工作任务还可以进行其他参数的指定,例如当指定数目的pod执行成功后,自动进行工作任务的退出,以及可以按照队列的方式,指定当第一个pod执行完毕后,即将整体的工作任务进行终止处理,在某些特定的场景下会有响应的作用。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。