定时任务

了解 CronJobs

请参阅官方 Kubernetes 文档:

CronJob 定义执行完成后即停止的任务。它们允许您按照计划多次运行同一个 Job。

CronJob 是 Kubernetes 中的一种工作负载控制器。您可以通过 Web 控制台或 CLI 创建 CronJob,以周期性或重复运行非持久化程序,例如定时备份、定时清理或定时发送邮件。

创建 CronJobs

使用 CLI 创建 CronJob

前提条件

  • 确保已配置 kubectl 并连接到您的集群。

YAML 文件示例

# example-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

通过 YAML 创建 CronJob

kubectl apply -f example-cronjob.yaml

使用 Web 控制台创建 CronJobs

前提条件

获取镜像地址。镜像可以来自平台管理员通过 toolchain 集成的镜像仓库,或来自第三方镜像仓库。

  • 对于来自已集成仓库的镜像,管理员通常会将镜像仓库分配给您的项目,以便您使用其中的镜像。如果未找到所需的镜像仓库,请联系管理员进行分配。

  • 如果使用第三方镜像仓库,请确保当前集群可以直接从该仓库拉取镜像。

  • 如果镜像仓库需要认证,则需要配置相应的镜像拉取 Secret。更多信息,请参阅 Add ImagePullSecrets to ServiceAccount

  • 通过 OCI Connector 选择镜像时,也需要为 Connector 代理选择一个镜像拉取 Secret,或者确认该工作负载的 ServiceAccount 已经引用了该 Secret。请参阅 Use an ImagePullSecret with an OCI Connector

使用新 Web 控制台创建 CronJobs

Applications 视图和 Clusters 视图中的创建入口差异

新 Web 控制台可以从不同的视图中提供 CronJob 创建入口。请根据您是在项目范围内操作还是在某个具体集群中操作来选择入口。

  • Applications 视图:从当前项目开始。打开 Workloads > CronJobs,选择目标 ClusterNamespace,然后选择会创建 CronJob 的流程。
  • Clusters 视图:从具体集群开始。先打开目标集群,进入目标 Namespace,然后导航到 Workloads > CronJobs,点击 Create CronJob

操作步骤 - 配置基本信息

  1. Container Platform 中,导航到左侧边栏的 Workloads > CronJobs

  2. 点击 Create CronJob

  3. 选择输入 镜像,然后点击 Confirm

    注意:仅当使用来自平台集成镜像仓库的镜像时,才支持镜像过滤。例如,像 containers (registry-projectname) 这样的集成项目名称表示平台的项目名称为 projectname,而镜像仓库的项目名称为 containers。

    对于 OCI Connector 镜像,请确认 Pod 模板已选择 Connector 代理镜像拉取 Secret,或已从其 ServiceAccount 继承。创建 CronJob 对象并不能证明后续 Job 一定可以拉取该镜像;当 Job Pod 启动时,令牌仍必须有效。

  4. Cron Configuration 部分,配置任务执行方式及相关参数。

    执行类型

    • Manual:手动执行要求为每次任务运行显式手动触发。

    • Scheduled:定时执行需要配置以下调度参数:

      参数描述
      Schedule使用 Crontab syntax 定义 cron 调度。CronJob 控制器会根据所选时区计算下一次执行时间。

      注意
      • 对于 Kubernetes 集群 < v1.25:不支持时区选择;调度 MUST 使用 UTC。
      • 对于 Kubernetes 集群 ≥ v1.25:支持感知时区的调度(默认:用户的本地时区)。
      Concurrency Policy指定如何处理并发 Job 执行(根据 K8s spec,可为 AllowForbidReplace)。

    Job 历史保留

    • 为已完成的 Job 设置保留限制:
      • History Limits:成功 Job 历史上限(默认:20)
      • Failed Jobs:失败 Job 历史上限**(默认:20)
    • 当超过保留限制时,最早的 Job 会先被垃圾回收。
  5. Job Configuration 部分,选择 Job 类型。
    CronJob 管理由 Pod 组成的 Job。请根据您的工作负载类型配置 Job 模板:

    参数描述
    Job Type选择 Job 完成模式(根据 K8s Job patterns,可为 Non-parallelParallel with fixed completion countIndexed Job)。
    Backoff Limit设置将 Job 标记为失败之前的最大重试次数。

操作步骤 - 配置 Pod

操作步骤 - 配置 Container

创建

  • 点击 Create

立即执行

定位 CronJob 资源

  • web console:进入 Container Platform,并在左侧边栏导航到 Workloads > CronJobs
  • CLI
    kubectl get cronjobs -n <namespace>

发起临时执行

  • web consoleExecute Immediately
    1. 点击 cronjob 列表右侧的竖向省略号(⋮)。
    2. 点击 Execute Immediately。(或者,在 CronJob 详情页面中,点击右上角的 Actions 并选择 Execute Immediately。)
  • CLI
    kubectl create job --from=cronjob/<cronjob-name> <job-name> -n <namespace>

验证 Job 详情:

kubectl describe job/<job-name> -n <namespace>
kubectl logs job/<job-name> -n <namespace>

对于使用 OCI Connector 的 Job,请检查生成的 Pod,而不要仅依赖 CronJob 或 Job 状态。验证 Connector 注解、imagePullSecrets 或 ServiceAccount 继承、重写后的 Connector 代理镜像、Pod RunningCompleted 状态以及 Events。将过期的令牌视为认证材料问题,并在下一次执行前轮换或重新创建该 Secret。

监控执行状态

状态描述
PendingJob 已创建,但尚未调度。
RunningJob Pod 正在执行。
Succeeded与该 Job 关联的所有 Pod 均已成功完成(退出码 0)。
Failed至少有一个与该 Job 关联的 Pod 未能成功终止(退出码非 0)。

更新 CronJob 镜像或 OCI Connector 时,请检查 Pod 模板的 Connector 代理镜像拉取 Secret 或 ServiceAccount 以及令牌有效性。由于 API 接受更新并不能证明计划中的 Pod 可以拉取其镜像,因此请在下一个生成的 Job Pod 上再次验证这些值。

删除 CronJobs

使用 Web 控制台删除 CronJobs

  1. 进入 Container Platform,并导航到 Workloads > CronJobs
  2. 找到您要删除的 CronJobs。
  3. Actions 下拉菜单中,点击 Delete 按钮并确认。

使用 CLI 删除 CronJobs

  kubectl delete cronjob <cronjob-name>