Kubernetes使用Cronjob定时执行Python脚本

网友投稿 1437 2022-10-12

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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 6s

返回结果看到的那样,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脚本执行成功

更多文章请扫一扫

上一篇:Clickhouse在运维大数据中的探索与实践
下一篇:如何手工创建(Create)一个Oracle 10g数据库
相关文章

 发表评论

暂时没有评论,来抢沙发吧~