定时任务CronJob用于创建周期性以及重复性的任务,例如执行备份操作或者发送邮件。Job负责批量处理短暂的一次性任务,即仅执行一次的任务,而CronJob则是在Job基础上增加了时间调度。本文介绍如何创建定时任务CronJob。
控制台
步骤一:配置应用基本信息
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群ID,然后在左侧导航栏,选择
。在定时任务页面,单击使用镜像创建,
在应用基本信息配置向导中,设置应用的基本信息。
配置项
描述
应用名称
输入应用的名称。
类型
选择定时任务(CronJob)。
标签
为该应用添加一个标签,标识该应用。
注解
为该应用添加一个注解(Annotation)。
实例类型
选择实例类型。关于实例类型的说明,请参见ACS Pod实例概述。
QoS类型
选择QoS类型。更多信息,请参见算力质量定义。
通用型实例支持default和best-effort。
性能型实例仅支持default。
完成基本信息配置后,单击下一步。
步骤二:配置容器
在容器配置向导页面中,配置容器的镜像、资源、端口、环境变量、生命周期、数据卷和日志等信息。
在容器1页签右侧,单击添加容器,可以为应用的Pod设置多个容器。
在基本配置区域,完成容器的基本配置。
配置项
说明
镜像名称
选择镜像
单击选择镜像,选择所需的镜像。
容器镜像服务企业版:可以选择托管在容器镜像服务ACR中的企业版镜像。需要选择镜像所属地域,以及镜像服务实例。关于ACR的更多信息,请参见什么是容器镜像服务ACR。
容器镜像服务个人版(需要提前开通):可以选择托管在容器镜像服务ACR中的个人版镜像。需要选择镜像所属地域,以及镜像服务实例。
制品中心:包含应用容器化基础OS镜像、基础语言镜像、AI/大数据相关镜像,本示例以制品中心的Nginx镜像为例说明。关于制品中心的更多信息,请参见制品中心。
(可选)设置镜像拉取策略
在镜像拉取策略的下拉列表中选择镜像拉取策略。默认情况下不设置,采用Kubernetes默认的IfNotPresent。
优先使用本地镜像(IfNotPresent):如果本地已经存在该镜像(之前拉取过该镜像至宿主机中),则不会再次拉取,如果本地不存在该镜像,则会拉取该镜像。
总是拉取镜像(Always):表示每次部署或扩容都会重新拉取镜像,而不会使用本地镜像。
仅使用本地镜像(Never):仅使用本地镜像。
(可选)设置镜像密钥
单击设置镜像密钥,为私有镜像设置密钥以确保安全。
所需资源
为容器设置资源额度。
容器启动项
(可选)设置容器启动项。
stdin:将控制台输入发送到容器。
tty:将标准输入控制台作为容器的控制台输入。
说明通常会同时选中stdin和tty,表示将终端(tty)绑定到容器的标准输入(stdin)上。例如,一个交互式的程序从用户获取标准输入,并显示到终端中。
初始化容器
(可选)选择该选项,表示创建一个初始化容器。
初始化容器提供了一种机制来阻塞或延迟应用容器的启动,初始化容器执行成功后,Pod内的应用容器会并行启动。例如,检测依赖服务的可用性。初始化容器可以包括一些应用镜像中不存在的实用工具和安装脚本,用来初始化应用容器的运行环境,例如设置内核参数、生成配置文件。更多信息,请参见Init Container。
(可选)在端口设置区域,单击新增设置容器的端口。
配置项
说明
名称
设置容器端口名称。
容器端口
设置暴露的容器访问端口,端口号必须介于1~65535。
协议
支持TCP和UDP。
(可选)在环境变量区域,单击新增设置环境变量。
支持通过键值对的形式为Pod配置环境变量,用于给Pod添加环境标志或传递配置等。更多信息,请参见Pod Environment Variables。
配置项
说明
类型
设置环境变量的类型:
自定义
配置项
保密字典
变量/变量引用
资源引用
配置项、保密字典支持全部文件的引用。
本示例以保密字典为例。选择保密字典类型,只选择目标保密字典,则默认引用全部文件。
对应的YAML,也引用了整个密钥(Secret)。
变量名称
设置环境变量名称。
变量/变量引用
设置变量引用的值。
(可选)在生命周期区域,设置容器的生命周期。
您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体操作,请参见配置生命周期。
配置项
说明
启动执行
为容器设置预启动命令和参数。
启动后处理
为容器设置启动后的命令。
停止前处理
为容器设置预终止命令。
(可选)在数据卷区域,为容器挂载数据卷。
(可选)在日志配置区域,进行采集配置和自定义Tag设置。
配置项
说明
采集配置
日志库:即在日志服务中生成一个对应的Logstore,用于存储采集日志。
容器内日志路径:支持Stdout和文本日志。
Stdout:表示采集容器的标准输出日志。
文本日志:表示收集容器内指定路径的日志本例中表示
/var/log/nginx
下所有的文本日志,也支持通配符的方式。
自定义Tag
您还可以设置自定义Tag,设置Tag后,会将该Tag一起采集到容器的日志输出中。自定义Tag可以帮助您给容器日志打上Tag,方便进行日志统计和过滤等分析操作。
单击下一步,进入高级配置配置向导页面。
步骤三:完成高级配置
在定时任务区域,设置任务执行时间。
配置项
说明
定时规则
您可以按小时、按天、按星期、按月,或者使用Cron表达式设置定时规则。关于更多Cron表达式说明,请参见Cron Expressions。
并发策略
您可以选择以下三种并发策略:
Allow:允许并发运行任务,会抢占集群资源。
Forbid:禁止并发运行,如果前一个任务还没有完成,则直接跳过下一个任务。
Replace:已到新任务创建时间点,但前一个任务还未完成,新的任务会取代前一个任务。
任务记录
可以设置保留执行成功或执行失败的任务个数,设置为0表示不保留。
在任务设置区域,设置任务。
配置项
说明
成功运行的Pod数
即completions,指定Job需要成功运行的Pod数量。默认值为1。
并行运行的Pod数
即parallelism,指定Job在任一时刻可以并发运行的Pod数量。默认值为1。
超时时间
即activeDeadlineSeconds,指定Job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
重试次数
Pod运行失败后,尝试重建Pod的次数。默认是6次,每次失败后重试会有延迟时间,该时间是指数级增长,最长时间是6 min。
重启策略
仅支持不重启(Never)和失败时(OnFailure)。
(可选)在标签和注释区域,单击添加设置容器组的标签和注释。
单击创建。
步骤四:查看应用信息
创建成功后,默认进入创建完成页面,单击查看应用详情可以跳转到该CronJob的详情页面。
您也可以在任务页面查看该CronJob的信息,单击目标CronJob的名称或对应操作列下的详情可以进入应用详情页面。
kubectl
创建CronJob涉及的主要参数如下:
参数 | 描述 |
.spec.schedule | 指定任务运行周期,格式同Cron schedule。 |
.spec.jobTemplate | 指定需要运行的任务,格式同Job patterns。 |
.spec.startingDeadlineSeconds | 指定任务开始的截止期限。 |
.spec.concurrencyPolicy | 指定任务的并发策略,支持Allow、Forbid和Replace三个选项:
|
本文以创建一个名为hello的CronJob为例,说明如何使用kubectl创建CronJob。
连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群或在CloudShell上通过kubectl管理Kubernetes集群。
保存以下YAML内容至cronjob.yaml文件中。
apiVersion: batch/v1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
执行以下命令创建CronJob。
kubectl create -f cronjob.yaml
当输出
cronjob.batch/hello created
时,则说明成功创建定时任务CronJob。