Docker(三十一)k8s cronjob 计划任务使用
基本原理其实就是,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 完成后将不会被保留。
页:
[1]