k8s基础资源类型——job与cronjob
Kubernetes job资源对象用于定义并启动一个批处理任务。Job 负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
1、Job 批处理任务
1、Job 介绍
-
Kubernetes job资源对象用于定义并启动一个批处理任务。
-
Job 负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
2、Job 类型
-
非并行 Job:通常创建一个 Pod 直至其成功结束
-
固定结束次数的 Job:设置 .spec.completions [kəmˈpliʃənz],创建多个 Pod,直到.spec.completions 个 Pod 成功结束
-
spec.backoffLimit指定在此Job在标记为失败之前重试的次数,默认为6次
-
spec.completions标志Job结束需要成功运行的Pod个数,默认为1
-
spec.parallelism标志并行运行的Pod的个数,默认为1
-
具体语法格式可以通过kubectl explain job.spec 查看
-
-
带有工作队列的并行 Job:设置 .spec.Parallelism [ˈpærəlelɪzəm] 但不设置.spec.completions ,当所有 Pod 结束并且至少一个成功时,Job 就认为是成功,根据 .spec.completions 和 .spec.Parallelism 的设置。
-
Job 划分为以下几种 pattern:
-
Job 类型 使用示例 行为 completions Parallelism 一次性Job 数据库迁移 创建一个 Pod 直至其成功结束 1 1 固定结束次数的Job 处理工作队列的Pod 依次创建一个 Pod 运行直至 completions 个成功结束 2+ 1 固定结束次数的并行 Job 多个 Pod同时处理工作队列 依次创建多个 Pod 运行直至 completions 个成功结束 2+ 2+ 并行 Job 多个 Pod同时处理工作队列 创建一个或多个 Pod直至有一个成功结束 1 2+
3、Job 特性
-
运行完成后退出,但是不会被删除,便于用户查看日志信息,了解任务完成的情况
-
删除job时,产生的pod也会被一起删除
-
job中可以运行多个pod(任务执行多次),且可以并行运行缩短任务完成的时间
-
限制job中的pod的完成时间,即设置超时时间
-
可以设置类似定时计划任务的job,定期执行
4、 配置实例
--查看job
--运行完成后退出,但是不会被删除,pod中会显示为完成状态
--也可以可以通过parallelism:来设置并发数量
2、CronJob 定时任务调度
1、CronJob 介绍
-
CronJob 用于以时间为基准周期性地执行任务,这些自动化任务和运行在Linux或UNIX系统上的CronJob一样。CronJob对于创建定期和重复任务非常有用,例如执行备份任务、周期性调度程序接口、发送电子邮件等。
-
CronJob 运行流程为 创建job ——> 然后job会创建pod ——> 然后执行调度 ——> 然后销毁pod 理解为 在高频率的定时任务就是不断的创建pod然后删除pod
-
创建CronJob有两种方式,一种是直接使用kubectl创建,一种是使用yaml文件创建。
-
指定时间只执行一次的coronjob,按照指定时间周期性执行的cronjob
2、使用 kubectl 创建 CronJob
[root@k8s-master cronjob]# kubectl create cronjob hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
3、yaml 文件的方式创建
[root@k8s-master cronjob]# cat<<EOF>>test-cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata: name: test-cronjob spec: schedule: "*/1 * * * *" # 参考定时计划任务(分时日月周) startingDeadlineSeconds: 15 # pod必须在规定时间后的15秒内开始执行,若超过该时间未执行,则任务将不运行,且标记失败 jobTemplate: spec: template: metadata: labels: app: test-cronjob spec: containers: - name: test-jo image: busybox args: - "/bin/sh" - "-c" - "date; echo Hello from the Kubernetes cluster" restartPolicy: OnFailure EOF
-
查看创建的CronJob:
[root@k8s-master cronjob]# kubectl get cronjob
-
等待1分钟可以查看执行的任务(Jobs):
[root@k8s-master cronjob]# kuberctl get jobs
-
CronJob每次调用任务的时候会创建一个Pod执行命令,执行完任务后,Pod状态就会变成Completed,如下所示:
[root@k8s-master cronjob]# kuberctl get pods
-
可以通过logs查看Pod的执行日志:
[root@k8s-master cronjob]# kubectl logs -f hello-1558779360-jcp4r Sat May 25 10:16:23 UTC 201 Hello from the Kubernetes cluster
-
如果要删除CronJob,直接使用delete即可:
[root@k8s-master cronjob]# kubectl delete cronjob hello
更多推荐
所有评论(0)