K8s新手系列之CronJob

概述

官方文档:CronJob | Kubernetes

CronJob控制器以 Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。

学习Job可以阅读这篇文章:K8s新手系列之Job资源 - huangSir-devops - 博客园

image

回到顶部

CronJob作用

  • 按照指定时间周期(如每小时、每天、每周)创建 Job 对象。
  • Job 负责运行 Pod 执行具体任务,任务完成后 Pod 自动终止。

回到顶部

CronJob资源清单文件

 
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-job
spec:
schedule: "0 2 * * *" # 每天凌晨2点执行
concurrencyPolicy: Forbid # 禁止并发执行
startingDeadlineSeconds: 300 # 任务启动超时时间
successfulJobsHistoryLimit: 3 # 保留成功的Job数量
failedJobsHistoryLimit: 1 # 保留失败的Job数量
jobTemplate: # Job模板
spec:
template:
spec:
containers:
- name: backup
image: my-backup-image
command: ["/bin/sh", "-c", "backup-script.sh"]
restartPolicy: OnFailure # 失败时重启

字段说明

schedule:Cron 表达式,格式为 分钟 小时 日期 月份 星期
  • 示例:
    • 0 2 * * *:每天凌晨 2 点。
    • */15 * * * *:每 15 分钟。
    • 0 0 * * 0:每周日午夜。
concurrencyPolicy:控制并发执行策略
  • Allow(默认):允许并发运行多个 Job。
  • Forbid:禁止并发,若前一个未完成则跳过本次调度。
  • Replace:替换未完成的 Job,启动新 Job。
startingDeadlineSeconds

任务启动超时时间,若超过此时间仍未启动,则标记为失败。

jobTemplate

Job 的模板定义,包含 Pod 规范,与独立 Job 资源的 spec 字段相同。

回到顶部

实战案例

 
[root@master ~/cronjob]# cat cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
# 每分钟执行一次
schedule: "* * * * *"
# 禁止并发执行
concurrencyPolicy: Forbid
# 任务启动超时时间
startingDeadlineSeconds: 300
# 保留成功的Job数量
successfulJobsHistoryLimit: 10
# 保留失败的Job数量
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
containers:
- name: cj-busybox
image: busybox
args:
- /bin/sh
- -c
- echo "Hello, CronJob!"
restartPolicy: Never
# 创建cronjob
[root@master ~/cronjob]# kubectl apply -f cronjob.yaml
cronjob.batch/hello-cron created

查看资源

 
# 查看cronjob
# SUSPEND表示是否暂停调度(False表示正常运行)
# ACTIVE:当前活跃的 Job 数量(0表示没有正在运行的 Job)
# LAST SCHEDULE:上一次调度 Job 的时间(57s前)
[root@master ~/cronjob]# kubectl get cj
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello-cron * * * * * False 0 57s 18m
# 查看job
[root@master ~/cronjob]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-cron-29156032 1/1 6s 9m8s
hello-cron-29156033 1/1 6s 8m8s
hello-cron-29156034 1/1 5s 7m8s
hello-cron-29156035 1/1 6s 6m8s
hello-cron-29156036 1/1 6s 5m8s
hello-cron-29156037 1/1 5s 4m8s
hello-cron-29156038 1/1 6s 3m8s
hello-cron-29156039 1/1 5s 2m8s
hello-cron-29156040 1/1 5s 68s
hello-cron-29156041 1/1 5s 8s
# 查看Pod
[root@master ~/cronjob]# kubectl get po
NAME READY STATUS RESTARTS AGE
hello-cron-29156031-jnck2 0/1 Completed 0 10m
hello-cron-29156032-cxbsk 0/1 Completed 0 9m4s
hello-cron-29156033-bw6kf 0/1 Completed 0 8m4s
hello-cron-29156034-kkwc2 0/1 Completed 0 7m4s
hello-cron-29156035-bhzkv 0/1 Completed 0 6m4s
hello-cron-29156036-vlxrz 0/1 Completed 0 5m4s
hello-cron-29156037-v968r 0/1 Completed 0 4m4s
hello-cron-29156038-gj9c5 0/1 Completed 0 3m4s
hello-cron-29156039-7lnb4 0/1 Completed 0 2m4s
hello-cron-29156040-lqtfv 0/1 Completed 0 64s
hello-cron-29156041-bndq5 0/1 Completed 0 4s
<think>嗯,用户想了解Kubernetes CronJob的用法和配置示例。首先,我需要回忆一下CronJob的基本概念。CronJobKubernetes中用于定时任务,类似于Linux的cron,但管理的是容器化的任务。用户可能需要知道如何创建、配置以及常见问题的解决方法。 首先,我应该解释什么是CronJob,以及它的作用。然后,给出一个基本的配置示例,用YAML文件展示。这里需要注意字段的说明,比如schedule、jobTemplate、concurrencyPolicy等。用户可能需要了解如何设置定时表达式,如何处理并发任务,比如是否允许同时运行多个Job实例。 接下来,需要考虑用户可能遇到的问题,例如任务不执行、Job重复创建或者资源不足。这时候要给出排查步骤,比如检查CronJob状态、查看Pod日志等。还要提醒用户注意时区设置,默认是UTC,可能需要调整。 然后,生成相关问题,这部分要涵盖CronJob的高级配置、与普通Job的区别、监控方法、调试技巧以及最佳实践。这些问题应该能帮助用户更深入地理解和使用CronJob。 需要确保回答结构清晰,分步骤说明,并且配置示例正确。另外,引用格式要正确,虽然用户没有提供引用来源,但按照系统指令,可能需要假设有相关引用。不过示例中没有引用标识,可能需要检查是否符合用户的要求。最后,确保使用中文,语法正确,数学公式格式正确,不过这里可能涉及较少数学内容,主要集中在代码和配置上。</think>### Kubernetes CronJob 使用指南及配置示例 #### 1. CronJob 基础概念 Kubernetes CronJob 用于在集群中定时执行任务,类似于 Linux 系统的 cron 服务。它通过定义时间表达式(Cron格式)触发 Job 资源的创建,从而运行容器化任务[^1]。 #### 2. 核心配置字段 ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/5 * * * *" # 每5分钟执行一次 concurrencyPolicy: Forbid # 禁止并发执行 startingDeadlineSeconds: 60 # 启动截止时间 jobTemplate: # Job模板定义 spec: template: spec: containers: - name: task-container image: busybox command: ["/bin/sh", "-c", "date; echo Hello Kubernetes"] restartPolicy: OnFailure ``` #### 3. 关键参数解析 - **schedule**: 使用5字段 Cron 表达式: $$ \text{分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-6)} $$ 例如 `"0 3 * * 1"` 表示每周一3:00执行 - **concurrencyPolicy**: - `Allow`(默认):允许并发 - `Forbid`:跳过新任务 - `Replace`:替换正在运行的任务 - **successfulJobsHistoryLimit**: 保留成功Job记录数(默认3) - **failedJobsHistoryLimit**: 保留失败Job记录数(默认1) #### 4. 常见问题排查 **问题:任务未按计划执行** 1. 检查CronJob状态: ```bash kubectl get cronjob my-cronjob kubectl describe cronjob my-cronjob ``` 2. 查看控制器日志: ```bash kubectl logs -n kube-system <cronjob-controller-pod> ``` **问题:Job重复创建** - 确认时区设置(默认UTC),可通过修改容器时区: ```yaml env: - name: TZ value: Asia/Shanghai ``` #### 5. 生产实践建议 - 设置合理的资源请求/限制 - 配置活跃期限(`activeDeadlineSeconds`) - 结合 Prometheus 监控任务执行状态 - 使用 `kubectl debug` 调试失败任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值