文档首页 > > 用户指南> 工作负载>

创建定时任务(CronJob)

创建定时任务(CronJob)

分享
更新时间:2021/06/25 GMT+08:00

操作场景

定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步

定时任务是基于时间的Job,就类似于Linux系统的crontab,在指定的时间周期运行指定的Job,即:
  • 在给定时间点只运行一次。
  • 在给定时间点周期性地运行。

CronJob的典型用法如下所示:

  • 在给定的时间点调度Job运行。
  • 创建周期性运行的Job,例如数据库备份、发送邮件。

前提条件

已创建资源,具体操作请参见购买节点(按需计费)。若已有集群节点资源,无需重复操作。

操作步骤

  1. (可选)定时任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。

    镜像仓库的使用步骤请参考上传镜像至容器镜像服务

  2. 登录CCE控制台,在左侧导航栏中选择工作负载 > 定时任务 CronJob”,单击“创建定时任务”
  3. 参照表1配置定时任务基本信息,其中带“*”标志的参数为必填参数。

    表1 任务基本信息

    参数

    参数说明

    * 任务名称

    新建任务的名称,命名必须唯一。

    请输入4到52个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。

    * 容器集群

    新建任务所在的集群。

    * 命名空间

    新建任务所在的命名空间。若不选择,默认配置为default。

    * 容器运行时

    请选择容器的运行时(Runtime),创建后不可修改。该参数仅支持CCE Turbo集群。
    • docker运行时:普通容器
    • 安全运行时:选择该运行时后将升级为安全容器,该定时任务只能运行在使用安全运行时的节点上。

    两种容器运行时的对比请参见普通容器与安全容器的区别

    任务描述

    任务描述信息。

  4. 配置完成后,单击“下一步:定时规则”
  5. 设置定时规则。

    表2 定时规则参数

    参数

    参数说明

    * 并发策略

    支持如下三种模式:

    • Forbid:在前一个任务未完成时,不创建新任务。
    • Allow:定时任务不断新建Job,会抢占集群资源。
    • Replace:已到新任务创建时间点,但前一个任务还未完成,新的任务会取代前一个任务。

    * 定时规则

    指定新建定时任务在何时执行。

    任务记录

    可以设置保留执行成功或执行失败的任务个数,设置为0表示不保留。

  6. 单击“下一步:添加容器”,添加容器。

    1. 单击“选择镜像”,选择需要部署的镜像。
      • 我的镜像:展示了您创建的所有镜像仓库。
      • 开源镜像中心:展示了开源镜像中心仓库中的官方镜像。
      • 第三方镜像:CCE支持拉取第三方镜像仓库(即镜像仓库与开源镜像中心之外的镜像仓库)的镜像创建任务。使用第三方镜像时,请确保任务运行的节点可访问公网。第三方镜像的具体使用方法请参见如何使用第三方镜像
        • 若您的镜像仓库不需要认证,密钥认证请选择“否”,并输入“镜像地址”,单击“确定”
        • 若您的镜像仓库都必须经过认证(帐号密码)才能访问,您需要先创建密钥再使用第三方镜像,具体操作请参见如何使用第三方镜像
      • 共享镜像:其它租户通过“容器镜像服务”共享给您的镜像将在此处展示,您可以基于共享镜像创建工作负载。
    2. 配置镜像参数。
      表3 添加容器参数说明

      参数

      说明

      镜像

      导入的镜像,您可单击“更换镜像”进行更换。

      * 镜像版本

      选择需要部署的镜像版本。

      * 容器名称

      容器的名称,可修改。

      容器规格

      CPU配额:

      • 申请:容器需要使用的最小CPU值,默认0.25Core。
      • 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。

      内存配额:

      • 申请:容器需要使用的内存最小值,默认0.5GiB。
      • 限制:允许容器使用的内存最大值。如果超过,容器会被终止。

      申请和限制的具体请参见设置容器规格

      GPU配额:当集群中包含GPU节点时,才能设置GPU,无GPU节点不显示此选项。

      容器需要使用的GPU百分比。勾选“使用”并设置百分比,例如设置为10%,表示该容器需使用GPU资源的10%。若不勾选“使用”,或设置为0,则无法使用GPU资源。

      GPU显卡:工作负载实例将被调度到GPU显卡类型为指定显卡的节点上。

      若勾选“不限制”,容器将会随机使用节点中的任一显卡。您也可以勾选某个显卡,容器将使用特定显卡。

      昇腾 310配额:容器需要使用的昇腾 310芯片个数,此处须为整数。

      选用AI加速型节点并安装huawei-npu插件后该参数设置将生效。AI加速型节点目前已开放公测,该节点搭载高性能、低功耗的海思Ascend 310 AI处理器,适用于图像识别、视频处理、推理计算以及机器学习等场景,点此可立即申请

    3. (可选)高级设置。
      表4 高级设置

      参数

      参数说明

      生命周期

      生命周期脚本定义,主要针对容器类任务的生命周期事件工作负载采取的动作。

      环境变量

      在容器中添加环境变量,一般用于通过环境变量设置参数。在“环境变量”页签,单击“添加环境变量”。当前支持三种类型。
      • 手动添加:输入变量名称、变量/变量引用。
      • 密钥导入:输入变量名称,选择导入的密钥名称和数据。您需要提前创建密钥,具体请参见创建密钥
      • 配置项导入:输入变量名称,选择导入的配置项名称和数据。您需要提前创建配置项,具体请参见创建配置项
    4. (可选)一个任务实例包含1个或多个相关容器。若您的任务包含多个容器,请单击“添加容器”,再执行添加容器的操作。

  7. 设置完成后,单击“创建”

    待状态为“已启动”,定时任务创建成功。

使用kubectl创建CronJob

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都会被删除。

相关操作

定时任务创建完成后,您还可执行表5中操作。

表5 其他操作

操作

操作说明

编辑YAML

单击定时任务名称后的“编辑YAML”,可修改当前任务对应的YAML文件。

停止定时任务

  1. 选择待停止的任务,单击操作列的“停止”。
  2. 单击“确定”。

删除定时任务

  1. 选择待删除的任务,单击操作列的“删除”
  2. 单击“确定”。

    任务删除后将无法恢复,请谨慎操作。

分享:

    相关文档

    相关产品