基本原理其实就是,k8s 会单独启动一个pod 来专门跑任务,等任务跑完后,就把这个pod 删除

上yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: delesindexjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: delesindexjob
            image: centos
            args:
            - /bin/sh
            - -c
            - curl -X DELETE  "ip:9200/zipkin-qa:span-`date +%F -d "-7 days"`"
            #或者把args字段去掉,用commnd字段
            # command: ["curl", "-X", "POST","--header",'hashtag-notice-header: 3509bc492a27b938ce3843d17083d31d', "http://172.17.122.118:8085/fa055/notice/hotHashTag12" ]
          restartPolicy: OnFailure
          imagePullSecrets:
          - name: qcloudregistrykey
          - name: tencenthubkey

es 数据库需要定期删除,所以我就只保留了7天的,然后调用相关接口进行删除,这里是每分钟执行一次,其实可以一天执行一次就可以

这里有两个坑,

1,之前用的alpine 但是发现用了curl 命令时候并不是很好穿参数,导致任务执行失败

2,拉取镜像认证,因为是用的腾讯云,但是之前抄的官方文档,始终都是拉取失败,后来加上secrests 后就好了



两个注意点

1,有些任务并不能循环的时间内完成,但是同时又要执行下一个jobs,那么这个时候是需要并发执行的,这个时候需要执行并发的开关打开,默认是打开的

spec.concurrencyPolicy并发策略,该字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的并发执行。只允许指定下面策略中的一种:

  • Allow(默认):允许并发运行 Job

  • Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个

  • Replace:取消当前正在运行的 Job,用一个新的来替换

2,有些任务执行的过程比较快,同时k8s 又会把pod删除,那么pod 执行job时候输出的日志,很难看到,这个时候需要把任务挂起,这里也会有个功能开关,默认是关闭

.spec.suspend :挂起,该字段也是可选的。如果设置为 true,后续所有执行都会被挂起。它对已经开始执行的 Job 不起作用。默认值为 false

3,查看历史执行记录

  • .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit :历史限制,是可选的字段。它们指定了可以保留多少完成和失败的 Job。

    默认没有限制,所有成功和失败的 Job 都会被保留。然而,当运行一个 Cron Job 时,Job 可以很快就堆积很多,推荐设置这两个字段的值。设置限制的值为 0,相关类型的 Job 完成后将不会被保留。