CronJobs
目录
理解 CronJobs
请参考官方 Kubernetes 文档:
CronJob 定义了运行至完成后停止的任务。它允许您根据计划多次运行相同的 Job。
CronJob 是 Kubernetes 中的一种工作负载控制器。您可以通过 Web 控制台或 CLI 创建 CronJob,定期或重复运行非持久化程序,例如定时备份、定时清理或定时发送邮件。
创建 CronJobs
使用 CLI 创建 CronJob
前提条件
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
前提条件
获取镜像地址。镜像可以来自平台管理员通过工具链集成的镜像仓库,也可以来自第三方镜像仓库。
操作步骤 - 配置基本信息
-
在 Container Platform,左侧导航栏进入 Workloads > CronJobs。
-
点击 Create CronJob。
-
选择或输入镜像,点击 Confirm。
注意:仅在使用平台集成的镜像仓库中的镜像时支持镜像过滤。例如,集成项目名为 containers(docker-registry-projectname)表示平台项目名为 projectname,镜像仓库项目名为 containers。
-
在 Cron 配置 区域,配置任务执行方式及相关参数。
执行类型:
-
手动:手动执行需要每次任务运行时显式触发。
-
定时:定时执行需配置以下调度参数:
参数 | 说明 |
---|
Schedule | 使用 Crontab 语法 定义定时计划。CronJob 控制器根据所选时区计算下一次执行时间。
注意:- Kubernetes 集群版本 < v1.25:不支持时区选择,调度必须使用 UTC。
- Kubernetes 集群版本 ≥ v1.25:支持时区感知调度(默认使用用户本地时区)。
|
并发策略 | 指定并发 Job 执行的处理方式(Allow 、Forbid 或 Replace ,详见 K8s 规范)。 |
Job 历史保留:
- 设置已完成 Job 的保留限制:
- 历史限制:成功 Job 的历史保留数量(默认:20)
- 失败 Job:失败 Job 的历史保留数量(默认:20)
- 超出保留限制时,最旧的 Job 会被优先垃圾回收。
-
在 Job 配置 区域,选择 Job 类型。
CronJob 管理由 Pod 组成的 Job。根据您的工作负载类型配置 Job 模板:
参数 | 说明 |
---|
Job 类型 | 选择 Job 完成模式(非并行 、固定完成次数的并行 或 索引 Job ,详见 K8s Job 模式)。 |
重试次数限制 | 设置标记 Job 失败前的最大重试次数。 |
操作步骤 - 配置 Pod
操作步骤 - 配置容器
创建
立即执行
定位 CronJob 资源
- Web 控制台:在 Container Platform,左侧导航栏进入 Workloads > CronJobs。
- CLI:
kubectl get cronjobs -n <namespace>
发起临时执行
- Web 控制台:立即执行
- 点击 CronJob 列表右侧的竖向省略号(⋮)。
- 点击 立即执行。(或者在 CronJob 详情页,点击右上角的操作菜单,选择 立即执行)。
- 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>
监控执行状态
状态 | 说明 |
---|
Pending | Job 已创建但尚未调度。 |
Running | Job Pod 正在执行中。 |
Succeeded | 与 Job 关联的所有 Pod 均成功完成(退出码为 0)。 |
Failed | 至少有一个与 Job 关联的 Pod 非正常终止(退出码非 0)。 |
删除 CronJobs
使用 Web 控制台删除 CronJobs
- 在 Container Platform,左侧导航栏进入 Workloads > CronJobs。
- 找到要删除的 CronJobs。
- 在 操作 下拉菜单中,点击 删除 按钮并确认。
使用 CLI 删除 CronJobs
kubectl delete cronjob <cronjob-name>