前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >院长手把手教学---CronJob实验

院长手把手教学---CronJob实验

作者头像
院长技术
发布2020-12-02 10:01:43
4690
发布2020-12-02 10:01:43
举报
文章被收录于专栏:院长运维开发

CronJob Spec

代码语言:javascript
复制
spec.template格式同Pod

RestartPolicy仅支持Never或OnFailure

单个Pod时默认Pod成功运行后Job即结束

.spec.completions 标志Job结束需要成功运行的Pod个数,默认为1

.spec.parallelism标志并运行的Pod的个数,默认为1

.spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

.spec.schedule:调度,必需字段,指定任务运行周期,格式同Cron

.spec.jobTemplate:Job模板,必需字段,指定需要运行的任务,格式同Cron

.spec.startingDeadlineSeconds:启动Job的期限(秒级别),该字段是可选的,如果因为任何原因而错过被调度的时间,那么错误执行时间的Job将被认为是失败的,如果没有指定,则没有期限

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

.spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit:历史限制,是可选的字段,它们指定了可以保留多少完成和失败的Job,默认情况下,它们分别设置为3和1,设置限制值为0,相关类型的Job完成后将不会被保留。

.spec.concurrencyPolicy:并发策略,该字段也是可选的,它指定了如何处理被CronJob创建的Job的并发执行,只允许指定下面的策略中的一种:
  Allow(默认):允许并发运行Job
  Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个
  Replace:取消当前正在运行的Job,用一个新的来替换
注意:当前策略只能应用于同一个CronJob创建的Job,如果存在多个CronJob,他们创建的Job之间总是并发运行

CronJob

代码语言:javascript
复制
CronJob管理基于时间的Job,即:
1. 在给定时间点只运行一次
2. 周期性的在给定时间点运行

使用条件:

代码语言:javascript
复制
当前使用的kubernetes的集群,版本>=1.8,(对CronJob)

典型的用法如下所示:

代码语言:javascript
复制
在给定的时间点调度Job运行
创建周期性运行的Job,例如:数据库备份,发送邮件

创建资源清单

[root@k8s-master ~]# vim cronjob.yaml

代码语言:javascript
复制
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              imagePullPolicy: IfNotPresent
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
  schedule: "*/1 * * * *"

创建Pod资源

[root@k8s-master ~]# kubectl apply -f cronjob.yaml

代码语言:javascript
复制
cronjob.batch/hello created

查看job,发现已经有两个了,每一分钟创建一个

[root@k8s-master ~]# kubectl get job

代码语言:javascript
复制
NAME               COMPLETIONS   DURATION   AGE
hello-1606808040   1/1           2s         81s
hello-1606808100   1/1           2s         21s

查看cronjob

[root@k8s-master ~]# kubectl get cronjob

代码语言:javascript
复制
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        35s             101s

查看Pod资源,状态已经是完成,两个Pod的时间是相差一分钟

[root@k8s-master ~]# kubectl get pods

代码语言:javascript
复制
NAME                                READY   STATUS             RESTARTS   AGE
hello-1606808040-njjsj              0/1     Completed          0          94s
hello-1606808100-qvk9l              0/1     Completed          0          34s

查看Pod日志,两个Pod的日志时间相差一分钟

代码语言:javascript
复制
[root@k8s-master ~]# kubectl logs hello-1606808040-njjsj
Tue Dec  1 07:34:07 UTC 2020
Hello from the Kubernetes cluster

[root@k8s-master ~]# kubectl logs hello-1606808100-qvk9l 
Tue Dec  1 07:35:07 UTC 2020
Hello from the Kubernetes cluster

注意:删除cronjob的时候不会自动删除job,这些job可以用kubectl delete job来删除

代码语言:javascript
复制
kubectl delete cronjob hello

CronJob本身的一些限制

代码语言:javascript
复制
创建Job操作应该是幂等的
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CronJob Spec
  • CronJob
  • 使用条件:
  • 典型的用法如下所示:
    • 创建资源清单
      • 创建Pod资源
        • 查看job,发现已经有两个了,每一分钟创建一个
          • 查看cronjob
            • 查看Pod资源,状态已经是完成,两个Pod的时间是相差一分钟
              • 查看Pod日志,两个Pod的日志时间相差一分钟
                • 注意:删除cronjob的时候不会自动删除job,这些job可以用kubectl delete job来删除
                • CronJob本身的一些限制
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档