定时任务

了解定时任务

请参阅 Kubernetes 官方文档:

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

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

创建定时任务

使用 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 控制台创建 CronJob

前提条件

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

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

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

  • 如果镜像仓库需要身份验证,则需要配置相应的镜像拉取 Secret。有关更多信息,请参阅将 ImagePullSecrets 添加到 ServiceAccount。

  • 通过 OCI Connector 选择镜像时,还要为 Connector proxy 选择镜像拉取 Secret,或确认工作负载的 ServiceAccount 已引用该 Secret。请参阅将 ImagePullSecret 与 OCI Connector 配合使用。

使用新版 Web 控制台创建 CronJob

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

新版 Web 控制台可以从不同视图进入 CronJob 创建页面。请根据你是在项目范围内操作,还是从具体集群开始操作,选择相应入口。

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

操作步骤 - 配置基本信息

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

  2. 点击 Create CronJob。

  3. Select 或 Input 镜像,然后点击 Confirm。

    注意:只有使用平台集成镜像仓库中的镜像时,才可进行镜像筛选。例如,类似 containers (registry-projectname) 的集成项目名称表示平台项目名称为 projectname,镜像仓库项目名称为 containers。

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

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

    Execute Type:

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

    • Scheduled:计划执行要求配置以下调度参数:

      参数描述
      Schedule使用 Crontab 语法 定义 cron 计划。CronJob 控制器根据选定的时区计算下一次执行时间。

      注意:
      • 对于 Kubernetes 集群 < v1.25:不支持选择时区;计划 MUST 使用 UTC。
      • 对于 Kubernetes 集群 ≥ v1.25:支持基于时区的调度(默认:用户的本地时区)。
      Concurrency Policy指定如何处理并发 Job 执行(根据 K8s 规范 使用 Allow、Forbid 或 Replace)。

    Job History Retention:

    • 设置已完成 Job 的保留限制:
      • History Limits:成功 Job 的历史记录限制(默认:20)
      • Failed Jobs:失败 Job 的历史记录限制(默认:20)
    • 超出保留限制时,系统会首先进行垃圾回收,删除最早的 Job。
  5. 在 Job Configuration 部分,选择 Job 类型。 CronJob 管理由 Pod 组成的 Job。根据工作负载类型配置 Job 模板:

    参数描述
    Job Type选择 Job 完成模式(根据 K8s Job 模式 使用 Non-parallel、Parallel with fixed completion count 或 Indexed Job)。
    Backoff Limit设置将 Job 标记为失败前的最大重试次数。

操作步骤 - 配置 Pod

操作步骤 - 配置容器

创建

  • 点击 Create。

立即执行

定位 CronJob 资源

  • Web 控制台:在 Container Platform 中,导航到左侧边栏的 Workloads > CronJobs。
  • CLI:
    kubectl get cronjobs -n <namespace>

发起临时执行

  • Web 控制台:Execute 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 proxy 镜像、Pod 的 Running 或 Completed 状态以及 Events。将过期令牌视为身份验证材料问题,并在下一次执行前轮换或重新创建 Secret。

监控执行状态

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

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

删除定时任务

使用 Web 控制台删除 CronJob

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

使用 CLI 删除 CronJob

  kubectl delete cronjob <cronjob-name>