Roy学Kubernetes(13):控制器之Jobs
Job创建一个或多个Pod并确保指定数量的Pod成功执行并终止。 当pod成功完成后,Job会跟踪任务完成情况。 达到指定数量的成功完成时,任务(即Job)完成。您还可以使用Job并行运行多个Pod。
一个简单的例子是创建一个Job任务对象,以便可靠地运行一个Pod来完成。 如果第一个Pod失败或被删除(例如由于节点硬件故障或节点重启),Job对象将启动一个新的Pod。
Job示例
job.yaml
1 | apiVersion: batch/v1 |
运行Job
1 | [root@node1 ~]# kubectl apply -f job.yaml |
查看job状态
1 | [root@node1 ~]# kubectl describe jobs/pi |
可通过kubectl get pods查看到成功完成Job的Pod。通过kubectl logs对应Pod名,可以获取此Pod的Job执行结果。
并行Jobs
Job有如下三类:
- 非并行的任务
- 通常,只有一个Pod启动,除非Pod失败。
- 一旦Pod成功终止,任务就完成了。
- 指定完成数的并行任务:
- 为.spec.completions指定非零正值。
- Job代表整体任务,当1到.spec.completions范围内的每个值都有一个成功的Pod时,它就完成了。
- 工作队列类的并行任务:
- 不要指定.spec.completions,默认为.spec.parallelism。
- Pod必须在它们之间或外部服务之间进行协调,以确定每个应该工作的内容。
- 每个Pod能够独立地确定是否完成了所有对等操作,从而完成整个Job任务。
- 当Job中的任何Pod成功终止时,则不会创建新的Pod。
- 一旦至少一个Pod成功终止并且所有Pod终止,则任务成功完成。
- 一旦任何Pod退出成功,其他任何Pod都不会为此任务做任何工作或输出。因为他们都处于退出的过程中。
对于非并行Job,您可以保留.spec.completions和.spec.parallelism。 当两者都未设置时,两者都默认为1
Job终止和清理
Job完成后,不会再创建Pod,但也不会删除Pod,保留Pod是为了完成后仍能查看它的日志。 Job对象在完成后也会保留,以便你可以查看其状态。删除 job可使用kubectl delete jobs(例如kubectl delete jobs pi或kubectl delete -f job.yaml),它创建的所有pod也将被删除。
默认情况下,除非Pod失败(restartPolicy = Never)或Container出错(restartPolicy = OnFailure),否则Job将不间断运行,此时Job一旦达到.spec.backoffLimit值,Job将被标记为失败,任何正在运行的Pod将被终止。
终止Job的另一种方法是设置活跃截止期。 通过将Job的.spec.activeDeadlineSeconds字段设置为秒数来执行此操作。 无论创建多少个Pod,activeDeadlineSeconds
都应用于Job的持续时间。 一旦Job达到activeDeadlineSeconds
,它的所有正在运行的Pod都将被终止,Job状态将变为type:Failed with reason:DeadlineExceeded。
请注意,Job的.spec.activeDeadlineSeconds优先于其.spec.backoffLimit。 因此,重试一个或多个失败的Pod的Job在达到activeDeadlineSeconds
指定的时间限制后将不会部署其他Pod,即使尚未达到backoffLimit值也是如此。
配置示例:
1 | apiVersion: batch/v1 |
系统中通常不再需要完成的Job。 将它们保留在系统中会给API服务器带来压力。 如果Job由更高级别的控制器(如CronJobs)直接管理,CronJobs可以根据指定的基于容量的清理策略清理Job。
可为Job指定成功后的TTL生命周期
1 | apiVersion: batch/v1 |
上述配置表示Job pi-with-ttl将在完成后100秒自动删除。如果该字段设置为0,则Job将在完成后立即自动删除。 如果未设置该字段,则TTL控制器完成后将不会清除此Job。
请注意,此TTL机制是alpha功能参数,在Kubernetes v1.12版本中才引入。
你可以使用CronJob创建一个将在指定时间/日期运行的Job,类似于Unix工具crontab,我会在后面篇章详细讲解CronJob。
- 本文链接:http://www.whyvv.top/k8s13.html
- 版权声明:版权所有,转载请注明出处。
分享