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 创建 CronJob

kubectl apply -f example-cronjob.yaml

使用 Web 控制台创建 CronJobs

前提条件

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

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

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

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

操作步骤 - 配置基本信息

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

  2. 单击 Create CronJob

  3. SelectInput 镜像,然后单击 Confirm

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

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

    Execute Type

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

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

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

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

    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-parallelParallel with fixed completion countIndexed 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>

监控执行状态

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

删除 CronJobs

使用 Web 控制台删除 CronJobs

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

使用 CLI 删除 CronJobs

  kubectl delete cronjob <cronjob-name>