更新时间:2024-04-15 GMT+08:00

任务和定时任务

任务概述

任务管理对应Kubernetes中的Job,分为普通任务和定时任务。

普通任务(Job)是Kubernetes用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、StatefulSet)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的spec.completions策略而不同:单Pod型任务有一个Pod成功就标志成功。定数成功型任务保证有N个任务全部成功标志成功。工作队列型任务根据应用确认的全局成功而标志成功。

定时任务(CronJob)即定时任务,是基于时间的Job,类似于Linux系统的crontab,在指定的时间周期运行指定的Job,即:

  • 在给定时间点只运行一次。
  • 在给定时间点周期性地运行。

CronJob的典型用法如下所示:

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

创建普通任务

普通任务可用于创建仅执行一次的批处理任务,任务执行完成后会自动退出。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。

  1. (可选)普通任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。
  2. 登录集群控制台,在左侧导航栏中选择工作负载,选择“普通任务”页签,并单击右上角“镜像创建”
  3. 配置工作负载的信息。

    基本信息
    • 负载类型:选择普通任务Job。
    • 负载名称:填写工作负载的名称。
    • 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间
    • 实例数量:填写实例的数量,也就是Pod的数量。
    容器配置
    • 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
      • 基本信息:请参见表1
        表1 基本信息参数说明

        参数

        说明

        容器名称

        为容器命名。

        镜像名称

        单击后方“选择镜像”,选择容器使用的镜像。

        • 我的镜像:当前区域下镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。
        • 镜像中心:开源镜像仓库中的官方镜像。
        • 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像

        镜像版本

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

        更新策略

        镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。

        CPU配额

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

        内存配额

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

        关于CPU/内存配额申请和限制的具体说明请参见设置容器规格

        初始化容器

        选择容器是否作为初始化容器。

        Init 容器是一种特殊容器,在Pod内的应用容器启动之前运行。详细说明请参见Init 容器

        特权容器

        特权容器是指容器里面的程序具有一定的特权。

        若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。

      • 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令启动后处理停止前处理,详情请参见设置容器生命周期
      • 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量
      • 数据存储:配置容器存储,可以使用本地存储和存储卷声明(PVC)。建议使用PVC将工作负载Pod数据存储在云存储上。若存储在本地磁盘上,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。容器存储相关内容请参见容器存储
    • 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥
    高级配置
    • 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。
    • 任务设置:
      • 并行数:任务负载执行过程中允许同时创建的最大实例数,并行数应不大于实例数。
      • 超时时间:当任务执行超出该时间时,任务将会被标识为执行失败,任务下的所有实例都会被删除。为空时表示不设置超时时间。

  4. 任务创建完成后,在“普通任务”列表中可查看已创建的普通任务。

    待状态为处理中”,普通任务创建成功。

创建定时任务

定时任务可用于创建按照设定时间和周期重复执行的任务,任务执行完成后会自动退出。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。

  1. (可选)定时任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。
  2. 登录集群控制台,在左侧导航栏中选择工作负载,选择“定时任务”页签,并单击右上角“创建负载”。
  3. 配置工作负载的信息。

    基本信息
    • 负载类型:选择定时任务CronJob。
    • 负载名称:填写工作负载的名称。
    • 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间
    容器配置
    • 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
      • 基本信息:请参见表2
        表2 基本信息参数说明

        参数

        说明

        容器名称

        为容器命名。

        镜像名称

        单击后方“选择镜像”,选择容器使用的镜像。

        • 我的镜像:当前区域下镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。
        • 镜像中心:开源镜像仓库中的官方镜像。
        • 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像

        镜像版本

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

        更新策略

        镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。

        CPU配额

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

        内存配额

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

        关于CPU/内存配额申请和限制的具体说明请参见设置容器规格

        初始化容器

        选择容器是否作为初始化容器。

        Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。详细说明请参见Init 容器

        特权容器

        特权容器是指容器里面的程序具有一定的特权。

        若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。

      • 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令启动后处理停止前处理,详情请参见设置容器生命周期
      • 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量
    • 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥

    定时规则

    • 并发策略:支持如下三种模式:
      • Forbid:在前一个任务未完成时,不创建新任务。
      • Allow:定时任务不断新的任务,会抢占集群资源。
      • Replace:当到达新任务创建时间点,而前一个任务未完成时,新的任务会取代前一个任务。
    • 定时规则:指定新建定时任务在何时执行,YAML中的定时规则通过CRON表达式实现。
      • 以固定周期执行定时任务,支持的周期单位为分钟、小时、日、月。例如,每30分钟执行一次任务,对应的CRON表达式为“*/30 * * * *”,执行时间将从单位范围内的0值开始计算,如00:00:0000:30:0001:00:00...
      • 以固定时间(按月)执行定时任务。例如,在每个月1日的0时0分执行任务,对应的CRON表达式为“0 0 1 */1 *”,执行时间为****-01-01 00:00:00****-02-01 00:00:00...
      • 以固定时间(按周)执行定时任务。例如,在每周一的0时0分执行任务,对应的CRON表达式为“0 0 * * 1”,执行时间为****-**-01 周一 00:00:00****-**-08 周一 00:00:00...
      • 自定义CRON表达式:关于CRON表达式的用法,可参考CRON
      • 以固定时间(按月)执行定时任务时,在某月的天数不存在的情况下,任务将不会在该月执行。例如设置天数为30,而2月份没有30号,任务将跳过该月份,在3月30号继续执行。
      • 由于CRON表达式的定义,这里的固定周期并非严格意义的周期。将从0开始按周期对其时间单位范围(例如单位为分钟时,则范围为0~59)进行划分,无法整除时最后一个周期会被重置。因此仅在周期能够平均划分其时间单位范围时,才能表示准确的周期。

        举个例子,周期单位为小时,因为“/2、/3、/4、/6、/8和/12”可将24小时整除,所以可以表示准确的周期;而使用其他周期时,在新的一天开始时,最后一个周期将会被重置。比如CRON式为“* */12 * * *”时为准确的周期,每天的执行时间为00:00:0012:00:00;而CRON式为“* */13 * * *”时,每天的执行时间为00:00:0013:00:00,在第二天0时,虽然没到13个小时的周期还是会被刷新。

    • 任务记录:可以设置保留执行成功或执行失败的任务个数,设置为0表示不保留。
    高级配置
    • 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。

  4. 任务创建完成后,在“定时任务”列表中可查看已创建的定时任务。

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

相关操作

  • 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。
  • 实例/任务列表:可以查看相应实例/任务的名称、状态等。
    • 事件:实例产生的事件信息,保存时间为1小时。
    • 实例列表:查看实例名称、状态、重启次数等。
    • 查看YAML:查看对应实例的YAML文件。
    • 删除:删除实例。
  • 查看/编辑YAML:可以查看/编辑工作负载的YAML文件。
  • 删除:删除任务。
  • 停止(仅定时任务支持):停止定时任务。