Kubernetes学习之Crontab控制器

本文介绍了Kubernetes的CronJob控制器,它类似Linux的crontab,用于按计划执行作业。CronJob支持一次性或周期性任务,允许设置并发执行策略,如允许、禁止或替换并发任务。它管理Job对象,控制Pod的生命周期,并根据设定保留成功或失败的作业历史记录。此外,还讨论了CronJob的控制机制,包括如何处理接近的时间点上多次执行的Job和并发策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、认识CronJob控制器
  CronJob控制器用于管理Job控制器资源的运行时间。Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但是CronJob可以以类似于Linux操作系统中的周期任务作业计划(crontab)的方式控制其运行的时间点及重复运行的方式,具体如下:
  1)在未来某个时间点运行作业一次
  2)在指定的时间点重复运行作业
  CronJob对象支持使用时间格式类似于CronJob,略微有不同的是,CronJob控制器在指定的时间点时,"?“和”*"的意义相同,都表示任何可用的有效值。
在这里插入图片描述

二、创建CronJob对象
  CronJob控制器的spec字段可嵌套使用以下字段:
  1)jobTemplate<Object>:Job控制器模板,用于为CronJob控制器生成Job对象;必选字段;
  2)schedule<string>:Cron格式的作业调度运行时间点;必须字段;
  3)concurrencyPolicy<string>:并发执行策略,可用的值有"Allow(允许)"、"Forbid(禁止)“和"Replace(替换)”,用于定义前一次作业运行尚未完成时是否以及如何运行后一次作业;
  4)failedJobHistoryLimit<integer>:为失败的任务执行保留的历史记录数,默认为1;
  5)successfulJobHistoryLimit<integer>:为成功的任务执行保留的历史记录数,默认为3;
  6)startingDeadlineSeconds<integer>:因各种原因缺乏执行作业的时间点所导致的启动作业错误的超时时长,会被记入错误历史记录;
  7)suspend<bollean>:是否挂起后续的任务执行,默认为false,对运行中的作业不会产生影响;

]# cat cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: crontab-example
  labels:
    app: mycronjob
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
    metadata:
      labels:
        app: mycronjob-jobs
    spec:
      parallelism: 2
      template:
        spec:
          containers:
          - name: myjob
            image: alpine
            imagePullPolicy: IfNotPresent
            command: 
            - /bin/sh
            - -c 
            - date; echo Hello from the Kubernetes cluster; sleep 10
          restartPolicy: OnFailure

]# kubectl apply -f cronjob.yaml 
cronjob.batch/crontab-example created

2)查看CronJob控制器信息

]# kubectl get cronjob -o wide 
NAME              SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE   CONTAINERS   IMAGES   SELECTOR
crontab-example   */2 * * * *   False     0        <none>          8s    myjob        alpine   <none>

命令结果的显示:
  SCHEDULE:是指其调度的时间点
  SUSPEND:表示后续任务是否处于挂起状态,即暂停任务的调度和运行
  ACTIVE:表示活动状态的Job对象的数量
  LAST SCHEDULE:表示上次调度运行至此刻的时长

]# kubectl get pods -o wide  -w 
NAME                               READY   STATUS      RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
crontab-example-1597022880-bj7c8   0/1     Completed   0          71s   10.244.2.30   node2   <none>           <none>
crontab-example-1597022880-nvc4r   0/1     Completed   0          71s   10.244.1.73   node1   <none>           <none>

crontab-example-1597023000-rjfvw   0/1     Pending     0          0s    <none>        <none>   <none
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值