容器按照持续运行的时间可分为两类:服务类容器和工作类容器。
服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等。
工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。
对于 Kubernetes 里个各种 Controller 来说:
Deployment、ReplicaSet 和 DaemonSet 都用于管理服务类容器。
Job、CronJon 则用于管理工作类容器。
下面我就介绍下如何使用 Job 运行一次性任务。
三、运行 Job
1,基本用法
(1)首先编辑一个简单的 Job 配置文件 myjob.yml,内容如下:
关于 restartPolicy(重启策略):
对于 Job,只能设置为 Never 或者 OnFailure。
对于其他 controller(比如 Deployment)可以设置为 Always 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | apiVersion: batch/v1 #当前job的Version kind: Job #指定当前资源的类型是Job metadata: name: myjob spec: template: metadata: name: myjob spec: containers: - image: busybox name: node-exporter command: # 设置容器的启动命令 - [ "echo" , "welcome to hangge.com" ] restartPolicy: Never #restartPolicy指当前的重启策略(失败的容器不会重启) |
(2)接着执行如下命令启动这个 Job:
1 | kubectl apply -f myjob.yml |
(3)执行如下命令可以查看 Job 的状态。completions 为 1/1 表示成功运行了这个 job
1 | kubectl get job |
(4)执行如下命令可以查看 Pod 的状态。
因为 Pod 执行完毕后容器已经退出,需要用 --show-all 才能查看 Completed 状态的 Pod。
1 | kubectl get pod --show-all |
(5)执行如下命令可以查看 Pod 的标准输出:
1 | kubectl logs myjob-pbrzp |
2,Job 的执行失败的情况
(1)这里我们将配置文件中的命令改成一个错误命令,同时重启策略仍然是 Never。
(2)查看 Job 状态可以这个 job 没有完成。
(3)而查看 Pod 状态会发现这里有许多失败的容器,而且数量还在持续增加。这是因为我们设置了 restartPolicy: Never,因此失败容器不会被重启,而是会启动新的 Pod,直到 SUCCESSFUL 为 1。但对于本样例,SUCCESSFUL 永远也到不了 1,所以 Job controller 会一直创建新的 Pod。
(4)但是如果我们将 restartPolicy 设置为 OnFailure 的化,容器失败后会自动重启,而不是重新创建个新容器。
3,并行执行 Job
现实中确实存在很多需要并行处理的场景。比如批处理程序,每个副本(Pod)都会从任务池中读取任务并执行,副本越多,执行时间就越短,效率就越高。这种类似的场景都可以用 Job 来实现。
(1)有时我们希望能同时运行多个 Pod,提高 Job 的执行效率。这个可以通过 parallelism 设置,下面我们将并行的 Pod 数量设置为 2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | apiVersion: batch/v1 #当前job的Version kind: Job #指定当前资源的类型是Job metadata: name: myjob spec: parallelism: 2 template: metadata: name: myjob spec: containers: - image: busybox name: node-exporter command: [ "echo" , "welcome to hangge.com" ] # 设置容器的启动命令 restartPolicy: Never #restartPolicy指当前的重启策略(失败的容器不会重启) |
(2)执行后可以看到 Job 一共启动了两个 Pod,而且 AGE 相同,可见这两个 Pod 是并行运行的。
(3)我们还可以通过 completions 设置 Job 成功完成 Pod 的总数。必须下面配置表示每次运行两个 Pod,直到总共有 6 个 Pod 成功完成。
注意:如果不指定 completions 和 parallelism,它们默认值均为 1。
(4)Job 执行后可看到 DESIRED 和 SUCCESSFUL 均为 6,符合预期。
原文链接:https://www.hangge.com/blog/cache/detail_2433.html