实时警报通知:微信告警通知的重要性解析
1437
2022-10-12
Kubernetes使用Cronjob定时执行Python脚本
Cronjob简介
介绍Cronjob之前,先来了解下Jobs,Jobs是一次性执行任务,它是为结束为运行的,它不想deployment、replicasets会一直持续运行.
如果你想在特定的时间表运行jobs,比如2小时运行一次,那就得用到Cronjob,也就是在Job的基础上增加了时间调度,Cronjob控制器是管理Job控制器的运行时间,它会等到设定的时间去创建Job资源,Job会去创建Pod来运行任务。Cronjob有点类似Linux系统的Cronjob。
Cron 时间表语法
# ┌───────────── 分钟 (0 - 59)# │ ┌───────────── 小时 (0 - 23)# │ │ ┌───────────── 月的某天 (1 - 31)# │ │ │ ┌───────────── 月份 (1 - 12)# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)# │ │ │ │ │# │ │ │ │ │# │ │ │ │ │# * * * * *
输入 | 描述 | 相当于 |
---|---|---|
@yearly (or @annually) | 每年 1 月 1 日的午夜运行一次 | 0 0 1 1 * |
@monthly | 每月第一天的午夜运行一次 | 0 0 1 * * |
@weekly | 每周的周日午夜运行一次 | 0 0 * * 0 |
@daily (or @midnight) | 每天午夜运行一次 | 0 0 * * * |
@hourly | 每小时的开始一次 | 0 * * * * |
实现
创建Cronjob
apiVersion: batch/v1beta1kind: CronJobmetadata: name: es-index-delspec: schedule: "*/1 * * * *" #设置为每分钟执行 failedJobsHistoryLimit: 1000 successfulJobsHistoryLimit: 1000 jobTemplate: spec: template: spec: volumes: - name: cronjob nfs: #挂载nfs服务器 python脚本放在/data/local/nfs/cronjob/ server: 192.168.253.225 path: /data/local/nfs/cronjob/ - name: time-zone hostPath: path: /etc/localtime containers: - name: es-index-del image: python:3.9 imagePullPolicy: IfNotPresent command: ["python"] args: ["/data/esdel.py","--index_name='demo'","--ip='192.168.253.219'","index_time_delete","60"] volumeMounts: - name: cronjob mountPath: /data #将存放脚本的nfs路径挂载到/data restartPolicy: OnFailure
常见配置参数详解:
failedJobsHistoryLimit: 保留失败任务的数量
successfulJobsHistoryLimit:保留成功任务的数量。
concurrencyPolicy:
- Allow:允许并发任务执行。
- Forbid:不允许并发任务执行,如果新任务的执行时间到了而老任务没有执行完,CronJob 会忽略新任务的执行。
- Replace:如果新任务的执行时间到了而老任务没有执行完,用新任务替换当前正在运行的任务。
startingDeadlineSeconds: 设置任务在多少时间内错误次数达到100后就不再调度, 单位s
suspend: 是否挂起后续要执行的任务
schedule: 定时任务执行规则(使用 Cron 表达式编写表达式)
运行Cronjob
kubectl apply -f esdel.yaml
创建好 CronJob 后,使用下面的命令来获取其状态:
# kubectl get cronjobNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEes-index-del */1 * * * * False 0
返回结果看到的那样,CronJob 还没有调度或执行任何任务。大约需要一分钟任务才能创建好
查看任务调度情况
kubectl get jobsNAME COMPLETIONS DURATION AGEes-index-del-1644402060 1/1 2s 29s
可以看到有一个任务被调度。
再次查看cronjob
# kubectl get cronjobNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEes-index-del */1 * * * * False 0 37s 113s
有 0 个活跃的任务意味着任务执行完毕或者执行失败
查看pod日志
es-index-del-1644402060-fklf9为pod名称
# kubectl logs es-index-del-1644402060-fklf9Elasticsearch Connection Succeededdemo-2021.12.11 = {'acknowledged': True}demo-2021.12.12 = {'acknowledged': True}demo-2021.12.13 = {'acknowledged': True}demo-2021.12.14 = {'acknowledged': True}demo-2021.12.15 = {'acknowledged': True}demo-2021.12.16 = {'acknowledged': True}demo-2021.12.17 = {'acknowledged': True}demo-2021.12.18 = {'acknowledged': True}demo-2021.12.19 = {'acknowledged': True}demo-2021.12.20 = {'acknowledged': True}
python脚本执行成功
更多文章请扫一扫
发表评论
暂时没有评论,来抢沙发吧~