Skip to content

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 对象示例:

yaml
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 编辑器隐藏了秒和年字段):

text
┌───────────── 分 (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 对象示例:

yaml
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.0

CronJob 详情页

从列表页点击 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 {名称} 的最大历史任务数」对话框,可分别修改,无需进入编辑页。