2022年10月更文挑战28-k8s中的job

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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执行完毕后,即将整体的工作任务进行终止处理,在某些特定的场景下会有响应的作用。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。