定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。
定时任务是基于时间的Job,就类似于Linux系统的crontab,在指定的时间周期运行指定的Job,即:
- 在给定时间点只运行一次。
- 在给定时间点周期性地运行。
CronJob的典型用法如下所示:
- 在给定的时间点调度Job运行。
- 创建周期性运行的Job,例如数据库备份、发送邮件。
已创建资源,具体操作请参见购买节点。若已有集群和节点资源,无需重复操作。
步骤 1 (可选)定时任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。
步骤 2 登录CCE控制台,在左侧导航栏中选择“工作负载 > 定时任务 CronJob”,单击“创建定时任务”。
步骤 3 参照下表配置定时任务基本信息,其中带“*”标志的参数为必填参数。
参数 | 参数说明 |
* 任务名称 | 新建任务的名称,命名必须唯一。 请输入4到52个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 |
* 容器集群 | 新建任务所在的集群。 |
* 命名空间 | 新建任务所在的命名空间。若不选择,默认配置为default。 |
任务描述 | 任务描述信息。 |
步骤 4 配置完成后,单击“下一步:定时规则”。
步骤 5 设置定时规则。
表-定时规则参数
参数 | 参数说明 |
* 并发策略 | 支持如下三种模式: l Forbid:在前一个任务未完成时,不创建新任务。 l Allow:定时任务不断新建Job,会抢占集群资源。 l Replace:已到新任务创建时间点,但前一个任务还未完成,新的任务会取代前一个任务。 |
* 定时规则 | 指定新建定时任务在何时执行。 |
任务记录 | 可以设置保留执行成功或执行失败的任务个数,设置为0表示不保留。 |
步骤 6 单击“下一步:添加容器”,添加容器。
1. 单击“选择镜像”,选择需要部署的镜像。
− 我的镜像:展示了您创建的所有镜像仓库。
− 第三方镜像:CCE支持拉取第三方镜像仓库(即镜像仓库之外的镜像仓库)的镜像创建任务。使用第三方镜像时,请确保任务运行的节点可访问公网。第三方镜像的具体使用方法请参见如何使用第三方镜像。
- 若您的镜像仓库不需要认证,密钥认证请选择“否”,并输入“镜像地址”,单击“确定”。
- 若您的镜像仓库都必须经过认证(帐号密码)才能访问,您需要先创建密钥再使用第三方镜像,具体操作请参见如何使用第三方镜像。
− 共享镜像:其它租户通过“容器镜像服务”共享给您的镜像将在此处展示,您可以基于共享镜像创建工作负载。
2. 配置镜像参数。
参数 | 说明 |
镜像 | 导入的镜像,您可单击“更换镜像”进行更换。 |
* 镜像版本 | 选择需要部署的镜像版本。 |
* 容器名称 | 容器的名称,可修改。 |
容器规格 | CPU配额: 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 内存配额: 申请:容器需要使用的内存最小值,默认0.5GiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 申请和限制的具体请参见设置容器规格。 GPU配额:当集群中包含GPU节点时,才能设置GPU,无GPU节点不显示此选项。 容器需要使用的GPU百分比。勾选“使用”并设置百分比,例如设置为10%,表示该容器需使用GPU资源的10%。若不勾选“使用”,或设置为0,则无法使用GPU资源。 GPU显卡:工作负载实例将被调度到GPU显卡类型为指定显卡的节点上。 若勾选“不限制”,容器将会随机使用节点中的任一显卡。您也可以勾选某个显卡,容器将使用特定显卡。 |
3. (可选)高级设置。
参数 | 参数说明 |
生命周期 | 生命周期脚本定义,主要针对容器类任务的生命周期事件工作负载采取的动作。 启动命令:输入容器启动命令,容器启动后会立即执行。详细步骤请参见容器设置。 启动后处理:任务启动后触发。详细步骤请参见设置容器生命周期。 停止前处理:任务停止前触发。详细步骤请参见设置容器生命周期。 |
环境变量 | 在容器中添加环境变量,一般用于通过环境变量设置参数。在“环境变量”页签,单击“添加环境变量”。当前支持三种类型。 手动添加:输入变量名称、变量/变量引用。 密钥导入:输入变量名称,选择导入的密钥名称和数据。您需要提前创建密钥,具体请参见创建密钥。 配置项导入:输入变量名称,选择导入的配置项名称和数据。您需要提前创建配置项,具体请参见创建配置项。 |
4. (可选)一个任务实例包含1个或多个相关容器。若您的任务包含多个容器,请单击“添加容器”,再执行添加容器的操作。
步骤 7 设置完成后,单击“创建”。
待状态为“已启动”,定时任务创建成功。
CronJob的配置参数如下所示:
.spec.schedule指定任务运行时间与周期,格式与Cron相同,例如“0 * * * * ”或“@hourly”。
.spec.jobTemplate指定需要运行的任务,格式与使用kubectl创建Job相同。
.spec.startingDeadlineSeconds指定任务开始的截止期限。
.spec.concurrencyPolicy指定任务的并发策略,支持Allow、Forbid和Replace三个选项。
− Allow(默认):允许并发运行 Job。
− Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个。
− Replace:取消当前正在运行的Job,用一个新的来替换。
下面是一个CronJob的示例,保存在cronjob.yaml文件中。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
运行该任务,如下:
步骤 1 创建CronJob。
kubectl create -f cronjob.yaml
命令行终端显示如下信息:
cronjob.batch/hello created
步骤 2 执行如下命令,查看执行情况。
kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 <none> 9s
kubectl get jobs
NAME COMPLETIONS DURATION AGE
hello-1597387980 1/1 27s 45s
kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1597387980-tjv8f 0/1 Completed 0 114s
hello-1597388040-lckg9 0/1 Completed 0 39s
kubectl logs hello-1597387980-tjv8f
Fri Aug 14 06:56:31 UTC 2020
Hello from the Kubernetes cluster
kubectl delete cronjob hello
cronjob.batch "hello" deleted
须知:删除CronJob时,对应的普通任务及相关的Pod都会被删除。
定时任务创建完成后,您还可执行下表中的操作。
操作 | 操作说明 |
编辑YAML | 单击定时任务名称后的“编辑YAML”,可修改当前任务对应的YAML文件。 |
停止定时任务 | 1. 选择待停止的任务,单击操作列的“停止”。 2. 单击“确定”。 |
删除定时任务 | 1. 选择待删除的任务,单击操作列的“删除”。 2. 单击“确定”。 任务删除后将无法恢复,请谨慎操作。 |