You need to enable JavaScript to run this app.
导航
定时任务
最近更新时间:2024.12.18 19:21:17首次发布时间:2024.12.06 12:08:42

定时任务为指定时间的一次性任务、或者周期性任务。对应 Kubernetes 中的 CronJob。更多详细介绍参见:Kubernetes 官网文档

创建定时任务

  1. 登录 容器服务控制台
  2. 在集群管理页面的左侧导航栏,选择 集群,并在集群管理页面,单击目标注册集群名称。
  3. 在注册集群左侧导航栏选择 工作负载 > 定时任务,进入定时任务管理页面。
  4. 单击 创建定时任务,根据引导提示配置参数。所有参数配置完成后单击 确定,即可开始创建定时任务。
  • 配置工作负载相关基本信息,完成后单击 下一步:容器配置

alt

配置项说明
名称自定义任务的名称。要求在同一个命名空间下,名称必须唯一。
命名空间选择任务部署的命名空间,支持选择自定义创建的命名空间或 Kubernetes 自建的命名空间。
标签单击 添加标签,自定义配置任务的标签。对应 Kubernetes 中的 Label,用于识别任务的键值对,配合选择器,帮助 Kubernetes 快速筛选目标任务。例如service.istio.io/canonical-revision:latest
注解单击 添加注解,自定义配置任务的注解信息。对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。
同步时区开启后,容器与节点使用相同时区,以节点本地所属时区的 CST(Central Standard Time)时区为准。
  • 配置容器相关信息,完成后单击 下一步:高级配置

alt

配置项说明
容器名称根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。

容器镜像

容器使用的镜像。支持使用第三方镜像和镜像仓库(CR) 中的镜像:

  • 第三方镜像:直接输入第三方镜像仓库地址(包括镜像 Tag),例如:example.com/namespace/repository:v1
  • 镜像仓库中的镜像:单击 选择自有镜像,从右侧弹出的面板中选择目标镜像仓库实例下的镜像。

镜像版本

选择镜像的版本,不选择则默认拉取latest版本。

注意

  • 如果镜像不存在latest版本,此处必须填写或选择镜像版本。
  • 使用第三方镜像时,无需配置该参数。

镜像拉取策略

拉取容器镜像的策略:

  • Always:总是拉取镜像。
  • IfNotPresent:优先使用本地镜像。
  • Never:仅使用本地镜像。

镜像密钥

默认关闭。开启后需要配置镜像仓库密钥。选择已有的仓库密钥或单击 创建仓库密钥,按如下说明补充镜像仓库的密钥:

  • 名称:容器使用的镜像的仓库名称。以使用镜像仓库中的镜像为例,则此处填写镜像所在的 OCI 制品仓库名称。
  • 仓库域名:填写镜像仓库域名,示例:cr-cn-beijing.volces.com
  • 用户名:登录镜像仓库的用户名。以使用镜像仓库中的镜像为例,则此处填写镜像所在实例的登录用户名。可在 镜像仓库控制台 目标实例的 概览 页面获取。
  • 密码:镜像仓库登录用户名对应的密码。

资源配额

支持按照业务需求,在容器维度配置 CPU 和内存的上下限,保障容器的健康运行。若不设置,则表示容器资源配额无限制。

  • CPU 请求:容器需要使用的最小 CPU 值。
  • CPU 上限:允许容器使用的 CPU 最大值。如果超过,容器会被终止。
  • 内存请求:容器需要使用的最小内存值。
  • 内存上限:允许容器使用的内存最大值。如果超过,容器会被终止。
  • GPU 算力:允许容器使用的 GPU 算力。

说明

  • 仅具有 GPU 节点的集群,配置 GPU 算力才能生效。
  • GPU 算力的卡数只能填写正整数。
特权级容器默认关闭。开启后特权级容器可以访问宿主上的设备。支持部署在 Linux 系统上的容器控制网络堆栈或访问设备。
Init 容器默认关闭。开启后表示将该容器设置为 Init 容器。Init 容器是 Pod 中,运行在应用容器前的容器,并且它可以包括仅在安装过程中使用的工具(例如 python、dig)和代码,避免在应用容器中的重复部署,提升应用镜像的安全性。

alt

配置项说明
端口配置容器中应用对容器外服务的连接端口,包括支持的协议(TCP、UDP)、端口号、端口名称。例如 Nignx 监听端口名称为nginx的 TCP 协议 80 端口。

环境变量

配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。

自定义:输入变量名称和变量值,创建自定义的环境变量。
配置项:部分引用或全部引用配置项中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
保密字典:部分引用或全部引用保密字典中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。

实例字段:引用实例字段中的值,创建环境变量。

  • metadata.name:工作负载的名称。

  • metadata.namespace:工作负载所处的命名空间。

  • metadata.uid:工作负载的 uid 标识。

  • metadata.labels:工作负载的标签。

  • metadata.annotations:工作负载的注解。

  • spec.nodeName:工作负载所处的节点。

  • spec.serviceAccountName:所使用的服务账号。

  • status.hostIP:工作负载所处节点的 IP。

  • status.podIP:工作负载中 Pod 的 IPv4 地址。

  • status.podIPs:工作负载中 Pod 的 IPv4 和 IPv6 地址。

说明

当选择类型为metadata.labelsmetadata.annotations字段时,需要动态增加一个控件字段,用于指定 label 或 annotation 的 key,该新增字段也支持用户自定义输入以上不存在的 key。

容器资源:引用容器中的字段作为环境变量。

  • limits.cpu:容器 CPU 的使用上限。

  • limits.memory:容器内存的使用上限。

  • limits.ephemeral-storage:容器临时存储的使用上限。

  • request.cpu:容器 CPU 请求的大小。

  • request.memory:容器内存请求的大小。

  • requests.ephemeral-storage:容器请求存储的大小。

添加卷

添加数据卷。卷(Volume)是容器中存储数据的位置。为一类数据分配存储资源前,需要先在容器中指定待存储数据的目录。

配置项:支持为配置项中的全部数据或部分数据创建数据卷。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
保密字典:支持部分挂载或全部挂载保密字典中的数据。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
存储卷声明:选择当前工作负载命名空间中已创建的存储卷声明,并为其指定数据卷的名称。
临时目录:为临时目录创建数据卷名称。
主机目录:为主机中的目录创建数据卷。
挂载卷为已创建的卷分配存储资源,并分配读写权限。其中,支持通过 subPath 方式挂载卷的子目录;支持通过 subPathExpr 方式挂载卷的扩展路径。

启动命令

创建容器时自动注入容器运行前后的执行命令,设置的命令和参数将填写在配置文件中。如果容器镜像中存在相同的命令和参数,那么配置文件中命令和参数将覆盖容器镜像中的对应命令和参数。

  • 运行命令:按需配置容器启动前运行的命令。

  • 运行参数:按需配置容器启动前所运行命令的参数,每个参数单独一行。

启动后处理按需配置启动后命令,每个命令和参数单独一行。
停止前处理按需配置停止前处理命令,每个命令和参数单独一行。

alt

支持配置 存活检查就绪检查 和 启动检查。允许基于 HTTP 协议、TCP 协议或执行具体命令的方式,探测容器中的负载是否正常。以下以配置存活检查为例,介绍配置参数。

配置项说明

检查方式

配置检查的方式,包括:

  • HTTP 请求检查:使用 HTTP 或 HTTPS 协议,向容器发送一个 HTTP Get 请求,通过检查响应确认容器状态。您需要进行如下检查配置:
    • 协议:HTTP 或 HTTPS。
    • HTTP 请求头:HTTP 请求中自定义的请求头(HTTP Headers)。单击 添加 输入键值对的配置方式。
    • 路径:访问 HTTP Server 的路径。
    • 端口:容器暴露的访问端口。
  • TCP 端口检查:向容器发送一个 TCP Socket,Kubelet 将尝试在指定端口上打开容器的 Socket。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。您需要进行如下检查配置:
    • 端口:容器暴露的访问端口。
  • 执行命令检查:在容器内执行指定的命令,通过检查命令执行的结果确认容器状态。 您需要进行如下检查配置:
    • 命令:检测容器健康情况的探测命令,每个命令和参数单独一行。

时间设置

配置检查的时间参数,包括:

  • 初始等待时间:指容器启动后,第一次执行探测时需要等待的时间,默认为 1 秒。
  • 超时时间:指发送检查请求后,等待响应的超时时间。超过此时间表示容器无响应,默认为 1 秒。
  • 检查间隔:相邻两次检查的时间间隔。默认为 10 秒。

阈值设置

配置检查的结果阈值。包括:

  • 成功阈值:检查请求发送后,表示系统正常的响应次数,默认为 1 次。该项不可配置。
  • 失败阈值:检查请求发送后,表示系统异常的无响应次数,默认为 3 次。即如果容器对请求 3 次无响应,则认为容器状态异常。
  • 配置工作负载相关高级配置,完成后单击 确定,开始创建工作负载。

alt

配置项说明

Cron 语句

Cron 语句是一个字符串,通过分钟、小时、日期、月份和星期,分为 5 个域,以空格分割。
详细的 Cron 语句用法参见:Cron 语法介绍

成功任务保留数保留运行成功任务记录的个数。
失败任务保留数保留运行失败任务记录的个数。

并发策略

任务同时运行的策略:

  • 允许:允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,那么新旧任务同时运行。
  • 禁止:不允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,那么新的任务不启动。
  • 替换:不允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,新的任务会替换当前运行的任务运行。
成功运行次数配置定时任务需要 Pod 成功运行的次数。
可并行数配置允许 Pod 的并发数。
最大超时时间配置任务最大运行时长。
重试次数配置任务失败后的重试次数。
重启策略配置 Pod 重启策略,包括:永不重启、失败后重启。
实例标签配置 Pod 实例标签,配合标签选择器,帮助 Kubernetes 筛选目标 Pod。单击 添加实例标签,根据界面提示输入符合要求的  和 
实例注解配置 Pod 实例注解。单击 添加实例注解,根据界面提示输入符合要求的  和 。 注解对应 Kubernetes 中的 Annotation,不用于标识和区分资源,主要记录用于应用部署、安全策略、调度策略的附加信息。

DNS 策略

配置实例的 DNS 策略。包括:

  • ClusterFirst:在该模式下,会将 Kube-dns 或 CoreDNS 的信息当作预设置参数,写入到该 Pod 内的 DNS 配置。
  • Default:在该模式下,Pod 里面的 DNS 配置继承了宿主机上的 DNS 配置。即该 Pod 的 DNS 配置与宿主机完全一致。
  • ClusterFirstWithHostNet:目前只能使用 Yaml 设置或更新。在该模式下,宿主机上的 DNS 配置与 Kube-dns 同时作为 Pod 的预设 DNS 配置。
  • None:目前只能使用 Yaml 设置或更新。该模式下,Kubernetes 不会为 Pod 预先加载任何逻辑,用于判定得到 DNS 的配置。
非 root 用户运行默认关闭。用于指定容器必须以非 root 权限运行,开启后,若以 root 权限运行,容器将会启动失败。

管理定时任务

定时任务创建完成后,将返回资源管理页面。单击资源列表顶部操作按钮或右侧操作列...中的操作按钮,可执行对应管理操作。详细说明如下:

操作说明
使用 Yaml 创建使用 Yaml 创建资源,推荐直接粘贴已经根据业务需求配置的 Yaml 内容。相较于使用控制台创建资源,使用 Yaml 方式支持的参数更全面。
编辑 Yaml编辑已经创建工作负载的文件,更新配置信息。
更新并行数调整任务运行时 Pod 运行的并发上限。运行策略中支持通过成功运行次数设置任务需要 Pod 成功运行的次数,如果需要运行多次,可以通过 可并行数 调整 Pod 运行的并发上限,控制任务的完成进度。
更新镜像快速更新当前工作负载中指定容器的容器镜像和镜像版本,并重新部署。

挂起/恢复

将定时任务暂停,释放部分系统资源,转入后台。当业务需要时,从上次的暂定处恢复定时任务。

说明

挂起对已执行的任务无效,默认是关闭的。在调度时间内挂起的执行都会被统计为错过的任务。当任务恢复且没有超过开始的最后期限时,错过的任务会被立即调度。

手动触发立即触发一次定时任务,以便于验证定时任务配置的准确性。

删除

删除目标工作负载。

警告

删除工作负载将导致服务不可用,请谨慎操作。

创建定时任务的 Yaml 测试示例如下,具体参数和配置以实际使用场景中各云厂商的定义为准。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello # adjust name for your cronjob
  namespace: default # specify your namespace to apply cronjob
spec:
  schedule: "*/1 * * * *"# adjust schedule of cronjob
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello # adjust name of container
            image: busybox # adjust image_name and tag for your container
            command: # adjust command for your container
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure # adjust restartpolicy of pods

Cron 语法介绍

定时任务采用 Cron 语句设定任务的触发时间,详细介绍和使用限制如下。

Cron 语法

Cron 表达式是一个具有时间含义的字符串,每个具有时间含义的字符叫做域,域之间用空格隔开。定时任务支持 5 个域的 Cron 表达式,格式为X X X X X,X 是一个域的占位符。Cron 表达式中的每个域依次表示分、时、天、月和星期,每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。

# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 日期 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 星期 (0 - 6) (周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * * 

注意

如果需要将触发时间具体到 日期,那么建议不设定 星期,以免任务在限定时间外触发。日期和星期同时设定时,其中一个满足即会触发任务执行。

特殊字符

特殊字符含义示例
*所有取值范围内的数字。在月域中,*表示每个月。
,枚举可能的值。在星期域中,1,2,5表示星期一、星期二、星期五。
-指定值的范围。在天域中,28-31表示月的28、29、30、31号。
/数量的递增值。在分钟域中,*/5表示从第 0 分钟开始的每 5 分钟;3/5表示从第 3 分钟开始的每 5 分钟。

L

单词 Last 的缩写,表示最后一天。仅天域和星期域支持该字符。

  • 在天域中,L表示月域中指定月份的最后一天。
  • 在星期域中,L表示一个星期的最后一天,即星期天,必须配合具体星期数使用。6L表示月域中指定月份的最后一个星期六;4L,5L表示月域中指定月份的最后一个星期四、星期五。

W

表示距离天域中指定天最近的工作日(周一至周五)。仅天域支持该字符。

15W表示每月 15 日最近的工作日。如果 15 号为工作日,则结果为 15 号;如果 15 号为星期六,结果为 14 号;如果 15 号为星期日,结果为 16 号。

说明

  • 最近的工作日应在本月中。例如:指定为1W时,如果 1 号是星期六,则触发时间为 3 号(星期一);指定为31W时,如果 31 号是星期日,则触发时间为 29 号(星期五)。
  • 使用W时只支持单天,不支持日期范围。
  • LW表示本月最后一个工作日。
#每月第几个星期几,必须配合具体数字使用,且#后仅支持1-5。仅星期域支持该字符。7#2表示月域中指定月份的的第二个星期天。

注意事项

Cron 表达式采用UTC +08:00时区,即中国时间。因此在配置 Cron 表达式时,如果计划在中国每天 20:00 点触发任务,设置的 Cron 表达式应为0 20 * * *

使用示例

表达式语义
15 10 * * *每天 10:15 触发任务。
0 /8 * * *每天 08:00、16:00、24:00 触发任务。
0 10,14,16 * * *每天 10:00 点、14:00 以及 16:00 触发任务。
15 10 15 * *每月 15 日 10:15 触发任务。
15 10 L * *每月最后一天 10:15 触发任务。
15 10 * * 6L每月最后一个星期六 10:15 触发任务。
15 10 * * 6#3每月第三个星期六 10:15 触发任务。
10,44 14 * 3 3每年三月的星期三的 14:10 和 14:44 触发。
15 10 * * 1-5每周周一至周五的 10:15 触发。
*/30 * 15 * *每月 15 日每隔 30 分钟触发。
0 10 15W 3 *每年 3 月 15 日最近的工作日 10:00 触发。
*/20 1-6 * * 0,1,3在每个星期日、星期一和星期三的 01:00 和 06:59 之间的第 0、20 和 40 分钟执行。
59 1 1-7 4 04 月 1 日 至 7 日以及 4 月余下的每一个星期日的 1 时 59 分执行。