一.job
Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
中文文档:https://www.kubernetes.org.cn/job
Kubernetes支持以下几种Job:
- 非并行Job:通常创建一个Pod直至其成功结束
- 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
- 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功
根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种pattern:
1.job的使用
[root@k8s-master01 job]# vim job.yaml
apiVersion: batch/v1 kind: Job metadata: labels: job-name: echo name: echo namespace: default spec: suspend: true # 1.21+ ttlSecondsAfterFinished: 100 //Job在执行结束之后(状态为completed或Failed)自动清理。设置为0表示执行结束立即删除,不设置则不会清除,需要开启TTLAfterFinished特性 backoffLimit: 4 //如果任务执行失败,失败多少次后不再执行 completions: 1 //有多少个Pod执行成功,认为任务是成功的,为空默认和parallelism数值一样 parallelism: 1 //并行执行任务的数量,如果parallelism数值大于未完成任务数,只会创建未完成的数量;比如completions是4,并发是3,第一次会创建3个Pod执行任务,第二次只会创建一个Pod执行任务 template: spec: containers: - command: - echo - Hello, Job image: registry.cn-beijing.aliyuncs.com/dotbalo/busybox imagePullPolicy: Always name: echo resources: {} restartPolicy: Never
创建验证:
[root@k8s-master01 job]# kubectl create -f job.yaml job.batch/echo created [root@k8s-master01 job]# kubectl get pod NAME READY STATUS RESTARTS AGE echo-9wlwq 0/1 Completed 0 7s nginx-66cfc7f7d5-jkmvh 1/1 Running 1 6d1h nginx-66cfc7f7d5-zdk4r 1/1 Running 1 6d1h [root@k8s-master01 job]# kubectl get job //执行完毕 NAME COMPLETIONS DURATION AGE echo 1/1 4s 24s [root@k8s-master01 job]# kubectl logs -f echo-9wlwq //查看日志 Hello, Job
二.cronjob
中文文档:https://www.kubernetes.org.cn/cronjob
CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。在Kubernetes 1.5,使用CronJob需要开启batch/v2alpha1 API,即–runtime-config=batch/v2alpha1。
1.crontab的使用
[root@k8s-master01 job]# vim cronjob.yaml apiVersion: batch/v1beta1 //1.21+ batch/v1 kind: CronJob metadata: labels: run: hello name: hello namespace: default spec: concurrencyPolicy: Allow //并发调度策略。可选参数如下:Allow:允许同时运行多个任务。Forbid:不允许并发运行,如果之前的任务尚未完成,新的任务不会被创建。Replace:如果之前的任务尚未完成,新的任务会替换的之前的任务。 failedJobsHistoryLimit: 1 //保留多少失败的任务。 jobTemplate: metadata: spec: template: metadata: labels: run: hello spec: containers: - args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster image: registry.cn-beijing.aliyuncs.com/dotbalo/busybox imagePullPolicy: Always name: hello resources: {} restartPolicy: OnFailure //重启策略,和Pod一致。 securityContext: {} schedule: '*/1 * * * *' //调度周期,和Linux一致,分别是分时日月周。 successfulJobsHistoryLimit: 3 //保留多少已完成的任务,按需配置。 suspend: false //如果设置为true,则暂停任务,默认为false。
创建验证
[root@k8s-master01 job]# kubectl create -f cronjob.yaml cronjob.batch/hello created [root@k8s-master01 job]# kubectl get cj //查看cronjob,简称cj NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello */1 * * * * False 0 43s 56s [root@k8s-master01 job]# kubectl get pod //查看pod NAME READY STATUS RESTARTS AGE echo-9wlwq 0/1 Completed 0 19m hello-1629201900-9q7wt 0/1 Completed 0 2m3s hello-1629201960-jtxj6 0/1 Completed 0 63s hello-1629202020-87n74 0/1 ContainerCreating 0 2s nginx-66cfc7f7d5-jkmvh 1/1 Running 1 6d1h nginx-66cfc7f7d5-zdk4r 1/1 Running 1 6d1h [root@k8s-master01 job]# kubectl logs hello-1629201900-9q7wt //查看执行日志 Tue Aug 17 12:05:03 UTC 2021 Hello from the Kubernetes cluster