Job 与 CronJob
本文介绍 Kuboard 中 Job(任务)与 CronJob(定时任务)的使用方法,包括适用场景、入口、列表、创建与编辑、详情页状态。
适用场景
Job 与 CronJob 都属于 Kubernetes batch(批量)API 组、名称空间级别资源,共同点是「运行一批容器组完成任务后即结束」,与 Deployment、StatefulSet 这类持续运行的工作负载不同。
| 资源 | 典型场景 |
|---|---|
| Job(任务) | 一次性任务:数据迁移、批量导入导出、CI/CD 构建步骤、定时备份的单次执行 |
| CronJob(定时任务) | 周期性任务:每天凌晨备份数据库、每小时清理日志、定期生成报表 |
一次执行与周期执行
Job 创建后只运行一次,由控制器创建容器组并重试,直到达到期望的成功次数(completions)或重试耗尽(backoffLimit);CronJob 按调度表达式周期性创建 Job,其「历史任务」就是创建过的一批 Job。
Job / CronJob 常作为长期运行工作负载的补充,后者请参考 部署(Deployment)。
入口位置
| 导航项 | 资源 |
|---|---|
| 任务 | batch/v1 Job |
| 定时任务 | batch/v1 CronJob |
各页面地址由系统根据资源类型自动生成,无需记忆;需要分享时直接在浏览器地址栏复制当前页面地址即可。
Job 列表页
在左侧导航点击 工作负载 → 任务 进入 Job 列表页。列表页默认将异常负载(失败 / 未完成任务)优先显示在最前;右上角可切换两种浏览模式:树形模式(跟随左侧导航的集群 / 名称空间上下文)与搜索模式(顶部自行选择集群、名称空间,支持按名称搜索)。
表格列如下:
| 列 | 说明 |
|---|---|
| 选择框 | 勾选后支持批量删除(Kubernetes 与缓存中的条目分开确认) |
| 集群 | Job 所在集群 |
| 名称空间 | Job 所在名称空间 |
| 名称 | 点击进入详情页;有查看权限时显示为链接 |
| 创建时间 | 相对时间显示,可排序、可按时间范围搜索 |
| 时区 | 集群时区(默认隐藏列,用作搜索条件) |
| 操作 | 编辑、YAML(只读查看/编辑)、删除 |
创建方式
点击列表页右上角 新增,依次选择:集群(就绪状态)、名称空间、创建方式(从表单创建 或 从 YAML 创建)。「从 YAML 创建」打开 YAML 编辑器直接填写后创建;「从表单创建」跳转到表单创建页。提交前 Kuboard 会检查目标集群是否支持该资源,不可用时弹出资源可用性提示。
创建 Job(从表单)
创建页表单由三个标签页组成:
| 标签页 | 内容 |
|---|---|
| 元数据 | 名称、名称空间、标签(Labels)、注解(Annotations) |
| 任务信息 | Job 的批量参数(见下表) |
| 容器组模板 | 容器镜像、资源配额、环境变量等 |
「任务信息」标签页字段如下:
| 字段 | 说明 | 默认值 |
|---|---|---|
| completions | 期望的成功容器组数;并发数为 1 时默认为 1,否则留空表示按并发容器组数取值 | 1 |
| 并发容器组数 | 同时执行的容器组最大数量 | 1 |
| 容器组重启策略 | OnFailure(失败后重试)或 Never(不重试),必填 | OnFailure |
| 最大重试次数 | 重试指定次数后,将任务标识为失败 | 6 |
| 最大运行时长 | 任务可运行的最大时长(秒),超过自动终止 | 不指定 |
| 完成后存活时间 | 任务完成或失败后保留的时长(秒);为 0 表示立刻自动删除 | 不自动删除 |
数值字段必须输入数字且不能小于 1(完成后存活时间允许为 0);容器组重启策略只允许 OnFailure / Never,重试由 Job 控制器负责,不使用 Always。
表单不提供手动设置标签选择器的入口(避免误用);如确实需要,可在「从 YAML 创建」或编辑页的 YAML 视图中配置。
一个完整的 Job 对象示例:
apiVersion: batch/v1
kind: Job
metadata:
name: data-migrate
namespace: default
spec:
completions: 1
parallelism: 1
backoffLimit: 6
activeDeadlineSeconds: 3600
ttlSecondsAfterFinished: 600
template:
spec:
restartPolicy: OnFailure
containers:
- name: migrator
image: myregistry.example.com/migrator:1.0
command: ["/bin/migrate"]点击右上角 保存:Kuboard 校验全部表单,弹出 YAML 确认对话框,确认后提交并跳转到该 Job 的详情页。
Job 详情页
从列表页点击 Job 名称进入详情页:
| 区域 | 内容 |
|---|---|
| 状态按钮 | 显示 已完成(绿色)或 未完成(黄色),反映任务是否达到期望的完成数 |
| 所属 CronJob | 若该 Job 由 CronJob 创建,显示「所属 CronJob」及名称链接,点击跳转到对应 CronJob 详情页 |
| 元数据 | 集群、名称空间、名称、ResourceVersion、创建时间、标签、注解 |
| 容器组 | 归属于该 Job 的容器组列表(Pod 卡片),左侧列表、右侧详情,可点击切换查看 |
| 更多(⋯) | 工作负载上下文扩展点注入的附加操作菜单 |
编辑 Job
编辑页与创建页字段完全一致:打开时读取集群中的当前对象并回填表单,保存时对比修改差异并弹出 YAML 确认对话框。
不可修改字段
Job 创建后,容器组模板等内容通常不可直接修改(取决于集群的准入策略)。若编辑保存被拒绝,请在 YAML 对话框中查看具体的校验错误。
CronJob 列表页
在左侧导航点击 工作负载 → 定时任务 进入 CronJob 列表页,页面结构、表格列、创建方式与 Job 列表页一致(同样开启异常负载优先显示)。
创建 CronJob(从表单)
创建页表单由三个标签页组成:
| 标签页 | 内容 |
|---|---|
| 元数据 | 名称、名称空间、标签、注解 |
| 定时调度 | CronJob 的调度参数与 Job 模板基本信息(见下) |
| 容器组模板 | 容器组模板 |
「定时调度」标签页包含两个卡片。
定时调度卡片
| 字段 | 说明 |
|---|---|
| 是否挂起 | 开关:挂 起 / 运 行。挂起后停止调度新任务(已创建、尚未运行的 Job 也会被暂停) |
| Cron 表达式 | 必填,5 段表达式;点击按钮弹出可视化 Cron 编辑器,也可直接以文本形式显示当前表达式 |
| 最大延迟启动时间 | 秒。错过调度时刻后,只要不超过该秒数仍会补启动任务,超过则放弃该次调度机会 |
| 并发策略 | Allow(允许并发)/ Forbid(禁止并发)/ Replace(替换已有),未设置时默认为 Allow |
| 最大成功历史记录数 | 保留的成功 Job 历史数量,默认 3 |
| 最大失败历史记录数 | 保留的失败 Job 历史数量,默认 1 |
Cron 表达式由 5 段组成(Kuboard 的 Cron 编辑器隐藏了秒和年字段):
┌───────────── 分 (0-59)
│ ┌─────────── 时 (0-23)
│ │ ┌───────── 日 (1-31)
│ │ │ ┌─────── 月 (1-12)
│ │ │ │ ┌───── 周 (1-7)
│ │ │ │ │
* * * * *常见示例:
| Cron 表达式 | 含义 |
|---|---|
* * * * * | 每分钟执行一次(创建表单的默认值) |
0 2 * * * | 每天凌晨 02:00 执行一次 |
*/30 * * * * | 每 30 分钟执行一次 |
0 0 1 * * | 每月 1 日 00:00 执行一次 |
0 9 * * 1 | 每周一 09:00 执行一次 |
使用 Cron 编辑器
- 点击「Cron 表达式」按钮弹出可视化编辑器,可切换 分钟 / 小时 / 日 / 月 / 周 五个页签,支持通配符、区间(
-)、步长(/)、列举(,)等写法; - 编辑器下方实时显示「最近 5 次运行时间」(假设浏览器时间与 kube-apiserver 时间及时区相同),可据此检查表达式是否符合预期;
- 创建表单默认填入
* * * * *,请按实际需求修改,避免频繁创建 Job。
任务基本信息卡片
该卡片配置 spec.jobTemplate,字段与「创建 Job」中的「任务信息」完全一致。一个完整的 CronJob 对象示例:
apiVersion: batch/v1
kind: CronJob
metadata:
name: db-backup
namespace: default
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
suspend: false
startingDeadlineSeconds: 300
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: backup
image: myregistry.example.com/backup:1.0CronJob 详情页
从列表页点击 CronJob 名称进入详情页,除元数据与「⋯」扩展菜单外,顶部提供两个操作按钮,主体分为「Job 历史」时间线与「选中 Job 的容器组」两部分。
调度与挂起
顶部以圆角按钮显示当前调度表达式,点击弹出只读 Cron 可视化面板,可查看表达式拆解与「最近 5 次运行时间」;面板内 挂 起 复选按钮可暂停后续调度,按钮颜色同步变化(未挂起绿色、挂起黄色)。
手工触发
点击 手工触发 按钮(需有定时任务的修改权限)弹出对话框,可立即按该 CronJob 的模板创建一个 Job:
| 字段 | 说明 |
|---|---|
| 任务名称 | 生成的 Job 名称,默认形如 {cronJob名}-{分钟级时间戳}-{4 位随机串},可修改 |
| 允许自动清理 | 开关(默认开启):开启后该 Job 以 CronJob 为属主,达到最大历史数时允许其清理此任务 |
手工触发的 Job 在历史列表中带有 Manual 标签,便于与正常调度产生的 Job 区分。
Job 历史(时间线)
Job 历史区域按创建时间倒序展示该 CronJob 创建过的所有 Job:
- 每个 Job 显示创建时间、名称(手工触发的带 Manual 标签)、成功数/期望完成数、耗时,并提供 YAML(只读预览)与 删除 按钮;行背景色区分状态:灰色(已完成)、绿色(成功数达标)、橙色(进行中/异常);
- 选中某个 Job 后,下方展开其详细信息(最大重试次数、最大并发数、完成状态/时间)与相关事件(Events),页面右侧显示该 Job 的容器组列表,可点击查看详情。
列表为空时提示「当前尚未创建任务」,并展示该 CronJob 的 Cron 表达式供参考。
历史记录数可直接修改
Job 历史区域头部实时显示 成功历史数 / 失败历史数,点击后弹出「修改 CronJob {名称} 的最大历史任务数」对话框,可分别修改,无需进入编辑页。