CronJobs

了解 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 创建 CronJobs

kubectl apply -f example-cronjob.yaml

使用 Web 控制台创建 CronJobs

前提条件

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

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

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

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

  • 通过 OCI Connector 选择镜像时,还要为 Connector 代理选择镜像拉取 Secret,或确认工作负载 ServiceAccount 已引用该 Secret。请参阅 在 OCI Connector 中使用 ImagePullSecret。

使用新版 Web 控制台创建 CronJobs

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

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

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

操作步骤 - 配置基本信息

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

  2. 点击 Create CronJob。

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

    注意:只有使用平台集成镜像仓库中的镜像时,才支持镜像过滤。例如,集成项目名称 containers(registry-projectname)表示平台的项目名称为 projectname,镜像仓库的项目名称为 containers。

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

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

    Execute Type:

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

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

      ParameterDescription
      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 模板:

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

监控执行状态

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

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

删除 CronJobs

使用 Web 控制台删除 CronJobs

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

使用 CLI 删除 CronJobs

  kubectl delete cronjob <cronjob-name>