k8s之Job和CronJob

Job

什么是Job?

该对象是用来执行运行一段时间后会退出的任务。

使用Job

使用yaml描述Job对象,其中restartPolicy是重启策略,需要设定为OnFailure,代表着如果失败则重启,如果是正常执行完成退出,则不需要再次启动。默认的值是Always,会保持着该Pod总是运行的。

template下的Pod模板,Job通过该模板来创建Pod。

apiVersion: batch/v1
kind: Job
metadata:
  name: echo-job

spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
      - image: busybox
        name: echo-job
        command: ["/bin/echo"]
        args: ["hello", "world"]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WkqjGLtw-1662126673545)(https://gcore.jsdelivr.net/gh/tenqaz/BLOG-CDN@main/20220721102314.png)]

使用yaml文件创建Job,然后查看job的pod对象,会发现它的STATUS状态为Completed,因为该job正常完成结束退出了。

[root@k8s-worker1 zwf]# kubectl apply -f job.yaml -n zwf
job.batch/echo-job created

[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME                       READY   STATUS      RESTARTS   AGE
echo-job-45pmc             0/1     Completed   0          5s

再来看下该Completed的log,会发现已经输出了hello world

[root@k8s-worker1 zwf]# kubectl logs echo-job-45pmc  -n zwf
hello world

Job的参数

  • activeDeadlineSeconds,设置 Pod 运行的超时时间。

  • backoffLimit,设置 Pod 的失败重试次数。

为什么不直接在Pod上实现,而要新创建对象Job?

保持单一原则,将业务特性与容器管理分开。

CronJob

什么是ConJob?

该对象用于定时任务。

使用CronJob

使用Yaml描述CronJob对象,会发现该对象多了一个schedule字段,这个是用来描述定时任务周期的规则,jobTemplate是Job对象的模板,也就是在定时周期内不断创建Job对象来达到定时任务的目的,也是一种组合的方式。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: echo-cj

spec:
  schedule: '*/1 * * * *'
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - image: busybox
            name: echo-cj
            imagePullPolicy: IfNotPresent
            command: ["/bin/echo"]
            args: ["hello", "world"]

k8s之Job和CronJob_第1张图片

使用定义的Yaml创建CronJob

[root@k8s-worker1 zwf]# kubectl apply -f cronjob.yaml -n zwf
cronjob.batch/echo-cj created

[root@k8s-worker1 zwf]# kubectl get cronjob -n zwf
NAME      SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
echo-cj   */1 * * * *   False     1        1s              2m24s

等待3分钟后,创建了3个CronJob的Pod,并且通过AGE可以发现是每分钟创建一个。

[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME                       READY   STATUS      RESTARTS   AGE
echo-cj-27698578-jtfxm     0/1     Completed   0          2m23s
echo-cj-27698579-cdzxg     0/1     Completed   0          83s
echo-cj-27698580-rfp72     0/1     Completed   0          23s

欢迎关注,互相学习,共同进步~

我的个人博客

我的微信公众号:编程黑洞

你可能感兴趣的:(k8s,kuberneters,kubernetes,k8s)