基本原理其实就是,k8s 会单独启动一个pod 来专门跑任务,等任务跑完后,就把这个pod 删除
上yaml
apiVersion: batch/v1beta1kind: CronJobmetadata: name: delesindexjobspec: 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
(默认):允许并发运行 JobForbid
:禁止并发运行,如果前一个还没有完成,则直接跳过下一个Replace
:取消当前正在运行的 Job,用一个新的来替换
2,有些任务执行的过程比较快,同时k8s 又会把pod删除,那么pod 执行job时候输出的日志,很难看到,这个时候需要把任务挂起,这里也会有个功能开关,默认是关闭
.spec.suspend
:挂起,该字段也是可选的。如果设置为 true
,后续所有执行都会被挂起。它对已经开始执行的 Job 不起作用。默认值为 false
。
3,查看历史执行记录
.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
:历史限制,是可选的字段。它们指定了可以保留多少完成和失败的 Job。默认没有限制,所有成功和失败的 Job 都会被保留。然而,当运行一个 Cron Job 时,Job 可以很快就堆积很多,推荐设置这两个字段的值。设置限制的值为
0
,相关类型的 Job 完成后将不会被保留。