魏晓东 发表于 2026-2-12 23:32:58

【云原生】CronJob周期性任务详解

CronJob周期性任务



一、CronJob先容



[*]CronJob用于实行排期操纵,比方备份、天生陈诉等。一个CronJob对象就像Linux体系上的crontab(cron table)文件中一行。它用Cron格式举行编写,并周期性地给定的调理事故实行Job。
[*]CronJob有所限定,也比力特殊。比方在某些环境下,单个CronJob可以创建多个并发任务。
[*]当控制平面为CronJob创建新的Job和(间接)Pod时,CronJob的.metadata.name是定名这些Pod的部分底子。CronJob的名称必须是一个合法的DNS子域值,但这会对Pod的主机名产交易外的结果。未得到最佳兼容性,名称应依照更严格的DNS标签规则。纵然名称是一个DNS子域,它也不能高出52个字符。这是由于CronJob控制器将自动在你所提供的Job名称后附加11个字符,而且存在Job名称的最大长度不能高出53个字符的限定。
二、创建CronJob



[*]CronJob必要一个设置文件。以下是针对一个CronJob的清单,该CronJob每分钟运行一个简朴的演示任务:
# vim cronjob.yaml
apiVersion: "batch/v1"
kind: CronJob
metadata:
name: hello
spec:
# 周期性执行任务
# 分 时 日 月 周
schedule: "* * * * *"
# 定义了当CronJob触发时要运行的作业模板
jobTemplate:
    spec:
      template:
      spec:
          containers:
          - name: hello
            image: busybox:latest
            imagePullPolicy: IfNotPresent
            # Pod内部执行的shell命令
            command: ["/bin/sh","-c","date; echo Hello from the Kubernetes cluster"]
          # 以非零状态退出Pod,才会重启Pod
          restartPolicy: OnFailure
三、查察资源



[*]Cronjob是一级一级的去创建的,cronjob创建的是job然后由job创建任务pod
[*]也可以通过cronjob、job、pod的名称可以很显着的看出,它们的层级关系
3.1、查察Cronjob

# kubectl get cronjob
NAME    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   * * * * *   False   0      12s             2m23s
3.2、查察Job

# kubectl get job
NAME             COMPLETIONS   DURATION   AGE
hello-28710961   1/1         1s         2m49s
hello-28710962   1/1         1s         109s
hello-28710963   1/1         0s         49s
3.3、查察Pod

# kubectl get pod
NAME                   READY   STATUS      RESTARTS   AGE
hello-28710962-gx4gm   0/1   Completed   0          2m26s
hello-28710963-bvjrv   0/1   Completed   0          86s
hello-28710964-4clln   0/1   Completed   0          26s

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页: [1]
查看完整版本: 【云原生】CronJob周期性任务详解