K8S 之 Job/CronJob
摘要
-
本文介绍 K8S 的 Job/CronJob ,本文以 CentOS 8 为例。
Job 介绍
-
Job 表示一次性任务,运行完成后就会停止。
-
Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。
-
随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。
-
删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。
Job 创建
-
yaml 文件: job.yaml
1 | apiVersion: batch/v1 # API 版本,这里使用 batch/v1,适用于 Job 资源 |
-
启动Job
1 | kubectl apply -f job.yaml |
-
查看 Job
1 | # 查看 Job |
-
删除 Job
1 | kubectl delete jobs/pi |
CronJob 介绍
-
CronJob 通过重复调度启动一次性的 Job。
-
CronJob 用于执行排期操作,例如备份、生成报告等。
-
一个 CronJob 对象就像 Unix 系统上的 crontab(cron table)文件中的一行。 它用 Cron 格式进行编写, 并周期性地在给定的调度时间执行 Job。
CronJob 示例:
1 | apiVersion: batch/v1 |
-
.spec.schedule
字段是必需的。该字段的值遵循 Cron 语法:
1 | # ┌───────────── 分钟 (0 - 59) |
-
除了标准语法,还可以使用一些类似 @monthly 的宏
输入 | 描述 | 等价 Cron 表达式 |
---|---|---|
@yearly 或 @annually |
每年 1 月 1 日的午夜运行一次 | 0 0 1 1 * |
@monthly |
每月第一天的午夜运行一次 | 0 0 1 * * |
@weekly |
每周的周日午夜运行一次 | 0 0 * * 0 |
@daily 或 @midnight |
每天午夜运行一次 | 0 0 * * * |
@hourly |
每小时的开始运行一次 | 0 * * * * |
-
管理cronjob
1 | # 创建cronjob |
以下是 Kubernetes 中 Job 和 CronJob 的对比表
特性 | Job | CronJob |
---|---|---|
用途 | 一次性任务,完成即结束 | 定时周期性任务,按照时间计划定时运行 |
调度方式 | 手动创建或由控制器触发 | 按照 Cron 表达式自动周期性调度 |
常用场景 | 数据批处理、数据库迁移、一次性任务 | 每天备份、定时报告生成、周期性检查 |
配置关键字段 | spec.template |
spec.schedule (Cron 表达式) + spec.jobTemplate |
启动频率 | 创建后立刻启动一次 | 根据 schedule 定期启动 |
并发控制 | 不支持并发策略 | 支持 concurrencyPolicy (Allow、Forbid、Replace) |
保留历史任务 | 无保留,任务完成后直接终结 | 可配置保留成功或失败任务数:successfulJobsHistoryLimit 、failedJobsHistoryLimit |
失败重试机制 | 支持 backoffLimit 、restartPolicy |
同样支持,作用于每次周期性运行产生的 Job 上 |