一:批处理任务模式
- Job Template Expansion模式:一个Job对象对应一个待处理的Work item,
- Queue with Pod for Work Item:任务队列存放Work item,job启动多个Pod,每个Pod对应一个Work item。
- Queue with Variable Pod Count模式:任务队列存放Work item,Job启动的Pod数量是可变。
二:k8s 并行批处理3种Job
- 非并行Job
- 一个Job启动一个Pod,一旦Pod正常结束,Job将结束
- 固定完成次数的并行Job
- 并发运行指定数量的Pod,直到指定数量的Pod成功,Job结束
- spec.completions 指定Pod数量
- spec.parallelism 指定同时运行几个Pod
- 带有工作队列的并行Job
- 用户可以指定并行的Pod数量,当任何Pod成功结束后,不会再创建新的Pod
- 一旦有一个Pod成功结束,并且所有的Pods都结束了,该Job就成功结束
- 一旦有一个Pod成功结束,其他Pods都会准备退出
- Job 模板文件
apiVersion: batch/v1 kind: Job metadata: name: pai labels: jobgroup: jobexample spec: parallelism: 2 #并行几个任务 completions: 4 #期望几个任务可以完成 template: metadata: name: jobexample labels: jobgroup: jobexample spec: containers: - name: pai image: perl imagePullPolicy: IfNotPresent command: ["perl", "-Mbignum=bi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure #Never 没有always用法 #最多尝试几次任务 backoffLimit: 4 #任务最多运行多长时间 activeDeadlineSeconds: 100
- Crontab 与linux cron用法一致
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: #Forbid 当前job没有运行完成,不会创建新的job #Allow 运行多个job同时运行,不建议使用这个策略 #Replace 这个job会替换前一个没有运行完成的job,重新产生一个新job concurrencyPolicy: Replace suspend: true #暂停job任务执行 schedule: "*/1 * * * *" successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 2 jobTemplate: spec: template: spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure