作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们前面介绍了很多工作负载,那些都是需要持续运行的的任务,但是实际运维当中有些任务是一次性的,哪针对这些需求我们应该用什么方式呢?Kubernetes给我们提供了一个资源是Job,下面我们就来介绍这个资源。
Kubernetes Job 是 Kubernetes 中的一种工作负载资源,用于管理批量处理任务。Job 的主要目的是确保指定数量的 Pod 成功终止。一旦达到这个目标,Job 就被认为完成了。
以下是一些关于 Kubernetes Job 的关键点:
任务完成:Job 负责创建一个或多个 Pods,并将继续替换它们,直到指定数量的 Pods 成功终止(即退出码为0)。成功完成后,不会创建更多的 Pods。
并行性:你可以配置 Job 来控制其并行度,也就是同时运行的 Pod 数量。对于非并行 Jobs,默认情况下只有一个 Pod 会被创建。
重启策略:对于 Job 中的 Pods,通常使用的重启策略是 OnFailure 或者 Never。这是因为 Job 的目标是让 Pod 完成而不是无限期地保持运行。
生命周期:一旦 Job 创建的 Pod 完成了它们的工作并且成功退出,Job 将不再创建新的 Pod。然而,Job 对象本身和它所创建的 Pod 仍然会保留在集群中,除非你明确删除它们或者设置 TTL 控制器来自动清理已完成的 Jobs。
apiVersion: batch/v1
kind: Job
metadata:
name: simple-job-example
spec:
completions: 3
parallelism: 2
backoffLimit: 4
activeDeadlineSeconds: 7200
ttlSecondsAfterFinished: 3600
template:
spec:
containers:
- name: job-container
image: busybox
command: ["sh", "-c", "echo Hello, Kubernetes Job! && sleep 30"]
restartPolicy: OnFailure
这个简化的例子包括了以下关键 Job 参数:
completions:指定了 Job 需要完成的成功 Pod 数量,总共需要运行的pod数量,比如有些任务就是一次性,不需要多个。该参数默认数字是1。
parallelism:定义了可以同时运行的 Pod 数量,如果总pod数量大于2才有意义,该参数默认数字是1。
activeDeadlineSeconds:设定了 Job 的最大运行时间,超过该时间 Job 将被终止,也就是如果达到这个的时间,它没执行完成,则会被认为失败。如果未配置参数,则该pod会一直执行,不会主动退出。
backoffLimit:设置了 Job 在被认为失败之前可以尝试的次数,该任务会被重新触发(比如是容器以非0代码退出,并且restartPolicy参数是Never),才会执行重新执行。
ttlSecondsAfterFinished:指定 Job 完成后多长时间自动删除,有助于集群资源管理,正常执行完成的pod会显示下面的状态,这个是正常退出状态的容器,设置这个时间,它会把这个退出状态的pod删除(退出状态的pod也会占用部分主机资源)。
restartPolicy:决定了容器出现意外故障的pod策略,如果是OnFailure则会重启pod,不会触发job重试。下图是正常执行job退出的pod状态(后面我们也会单独来出一期来讲解这个pod状态)。

#job状态是这的,正常执行完成的job
NAME COMPLETIONS DURATION AGE
job.batch/simple-job-example 3/3 67s 79s
作者以前的工作经验这个Job主要用于业务的数据库的DDL操作,把DDL操作封装在一个Job,这样我们就可以把很多操作封装在Kubernetes的标准api里面,通过Kubernetes来管理所有的业务。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。
2万+

被折叠的 条评论
为什么被折叠?



