You need to enable JavaScript to run this app.
导航

创建定时任务

最近更新时间2024.02.02 11:21:00

首次发布时间2022.03.04 23:10:38

定时任务为指定时间的一次性任务、或者周期性任务。对应 Kubernetes 中的 CronJob。用户可以通过镜像在集群中创建一个定时任务。

前提条件

通过控制台创建

  1. 登录 容器服务管理控制台
  2. 单击左侧导航栏中的 集群
  3. 选择 工作负载 > 任务,点击 创建定时任务,配置任务。
  4. 配置任务信息。
    1. 配置基本信息。完成后单击页面右下角 下一步:容器配置
      alt
      参数说明
      名称根据系统提示,配置定时任务的名称。在同一个命名空间下,名称必须唯一。
      命名空间选择定时任务部署的命名空间,支持选择自定义创建的命名空间或 Kubernetes 自建的命名空间。Kubernetes 自建命名空间的说明,请参见 命名空间概述

      标签

      填写定时任务的标签,对应 Kubernetes 中的 Label,用于识别定时任务的键值对,配合选择器,帮助 Kubernetes 快速筛选目标定时任务。例如service.istio.io/canonical-revision:latest
      单击 添加标签,根据界面提示输入

      注解

      填写定时任务的注解信息,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。
      单击 添加注解,根据界面提示输入

      算力类型

      VPC-CNI 网络模型的集群显示该参数。选择部署工作负载的基础设施资源,有如下两种算力类型:

      • 云服务器实例 ECS:在集群中的云服务器节点(Node)上部署该工作负载。
      • 弹性容器实例 VCI:在集群中的弹性容器实例(VCI),即虚拟节点(VirtualNode)上部署该工作负载。弹性容器实例相关介绍,请参见 什么是弹性容器实例
      日志采集算力类型 选择 以弹性容器实例方式部署 后显示该参数。要开启后采集弹性容器实例日志。详细说明,请参见 通过日志服务采集 VCI 容器日志
    2. 配置容器信息。配置完成后单击页面右下角 下一步:高级配置
      • 基本信息
        alt
        参数说明
        容器名称根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。

        容器镜像

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

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

          说明

          • 若需要使用 CR 中的私有镜像,请先安装 cr-credential-controller 免密组件。详细操作,请参见 使用免密组件拉取私有镜像创建工作负载
          • 若不使用 cr-credential-controller 免密组件拉取私有镜像,则需要配置 镜像密钥
          • 使用 CR 标准版实例中的镜像时,若您的标准版实例未配置当前集群所在 VPC 的访问控制权限,需要根据系统提示配置。详细操作,请参见 镜像安全

        镜像版本

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

        注意

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

        镜像密钥

        默认不开启。开启后需要配置镜像仓库密钥。选择已有的仓库密钥或单击 创建仓库密钥,按如下说明在容器服务侧补充镜像仓库的密钥:

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

        注意

        不使用免密组件,且需要拉取私有镜像时,必须配置该参数。

        资源配额

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

        • CPU 请求:容器需要使用的最小 CPU 值。
        • CPU 上限:允许容器使用的 CPU 最大值。如果超过,容器会被终止。
        • 内存请求:容器需要使用的最小内存值。
        • 内存上限:允许容器使用的内存最大值。如果超过,容器会被终止。
        • GPU 资源类型:仅具有 GPU 计算型节点的集群,可配置 GPU 资源。有如下两种 GPU 资源:
          • Nvidia:使用 NVIDIA GPU 资源。根据系统提示输入您需要使用的 NVIDIA GPU 算力显卡类型。详细说明,请参见 NVIDIA GPU 调度弹性容器实例 GPU 调度
            该功能依赖 nvidia-device-plugin 组件,若未安装组件,请根据系统提示安装。
          • mGPU:【邀测·申请试用】使用容器共享 GPU 资源。根据系统提示输入您需要使用的容器共享 GPU 算力GPU 显存显卡类型。详细说明,请参见 容器共享 GPU 调度
            该功能依赖 mgpu 组件,若未安装组件,请根据系统提示安装。
        • RDMA 卡数:【邀测·申请试用】提供 Pod Container 使用 RDMA 设备能力,推荐配置 2 或者 4。详细说明,请参见 VKE 集群中使用 RDMA 资源

        说明

        • 单个工作负载中,只能选用一种 GPU 资源。
        • RDMA 和 mGPU 不能同时使用。
        特权级容器默认不开启。开启后特权级容器可以访问宿主上的设备。支持部署在 Linux 系统上的容器控制网络堆栈或访问设备。

        Init 容器

        默认不开启。开启后表示将该容器设置为 Init 容器。Init 容器是 Pod 中,运行在应用容器前的容器,并且它可以包括仅在安装过程中使用的工具(例如 python、dig)和代码,避免在应用容器中的重复部署,提升应用镜像的安全性。

        说明

        Init 容器不支持设置生命周期管理中的启动后处理、停止前处理,不支持开启健康检查。

      • 容器端口
        单击 添加端口,配置容器中应用对容器外服务的连接端口,包括支持的协议(TCP、UDP)、端口号、端口名称。例如 Nignx 监听端口名称为nginx的 TCP 协议 80 端口。
      • 环境变量
        单击 添加环境变量,配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。
        类型说明
        自定义支持输出入变量名称和变量值,创建自定义的环境变量。
        配置项支持部分引用或全部引用配置项中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
        保密字典支持部分引用或全部引用保密字典中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
        实例字段支持引用实例字段中的值,创建环境变量。
        • metadata.name:定时任务的名称。
        • metadata.namespace:定时任务所处的命名空间。
        • metadata.labels:定时任务的标签。
        • metadata.annotations:定时任务的注解。
        • spec.nodeName:定时任务所处的节点。
        • spec.serviceAccountName:所使用的服务账号。
        • status.hostIP:定时任务所处节点的 IP。
        • status.podIP:定时任务中 Pod 的 IPv4 地址。
        • status.podIPs:定时任务中 Pod 的 IPv4 和 IPv6 地址。
        容器资源支持引用容器中的字段作为环境变量。
        • limits.cpu:容器 CPU 的使用上限。
        • limits.memory:容器内存的使用上限。
        • request.cpu:容器 CPU 请求的大小。
        • request.memory:容器内存请求的大小。
      • 储存配置
        在容器中存储数据分两步:先在 Pod 定义卷(Volume),也就是添加卷,然后在容器挂载卷。
        • 添加卷:单击 添加卷,添加数据卷。卷(Volume)是容器中存储数据的位置。为一类数据分配存储资源前,需要先在容器中指定待存储数据的目录。
          类型说明
          配置项支持为配置项中的全部数据或部分数据创建数据卷。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
          保密字典支持部分挂载或全部挂载保密字典中的数据。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
          存储卷声明选择当前工作负载命名空间中已创建的存储卷声明,并为其指定数据卷的名称。
          临时目录为临时目录创建数据卷名称。
          主机目录为主机中的目录创建数据卷。
        • 挂载卷:单击 添加挂载卷,为已创建的卷分配存储资源,并分配读写权限。其中,支持通过 subPath 方式挂载卷的子目录;支持通过 subPathExpr 方式挂载卷的扩展路径。
      • 生命周期
        支持在创建容器时,自动注入容器运行前后的执行命令,设置的命令和参数将填写在配置文件中。如果容器镜像中存在相同的命令和参数,那么配置文件中命令和参数将覆盖容器镜像中的对应命令和参数。
        类型说明
        运行命令输入容器启动前运行的命令。
        运行参数输入容器启动前所运行命令的参数。
        启动后处理输入启动后命令。
        停止前处理输入停止前处理命令。
      • 健康检查
        支持配置 存活检查就绪检查启动检查。允许基于 HTTP 协议、TCP 协议或执行具体命令的方式,探测容器中的负载是否正常。以下以配置存活检查为例,介绍配置参数。
        alt
        配置项说明

        检查方式

        配置检查的方式,包括:

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

        时间设置

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

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

        阈值设置

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

        • 成功阈值:检查请求发送后,表示系统正常的响应次数,默认为 1 次。该项不可配置。
        • 失败阈值:检查请求发送后,表示系统异常的无响应次数,默认为 3 次。即如果容器对请求 3 次无响应,则认为容器状态异常。
    3. 配置任务的高级配置。完成配置后单击 确定,启动定时任务创建。
      • 配置定时重复。
        alt
        配置项说明

        Cron 语句

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

        成功任务保留数保留运行成功任务记录的个数。
        失败任务保留数保留运行失败任务记录的个数。
        并发策略任务同时运行的策略:
        • 允许:允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,那么新旧任务同时运行。
        • 禁止:不允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,那么新的任务不启动。
        • 替换:不允许多个任务同时运行。到达新任务触发点时,前一个任务还在运行,新的任务会替换当前运行的任务运行。
      • 配置运行策略。
        配置项说明
        成功运行次数配置定时任务需要 Pod 成功运行的次数。
        可并行数配置允许 Pod 的并发数。
        最大超时时间配置任务最大运行时长。
        重试次数配置任务失败后的重试次数。
        重启策略配置 Pod 重启策略,包括:永不重启、失败后重启。

        说明

        对任务失败状态的判定上,最大超时时间 的优先级高于 重试次数。即使重试的次数还没到达上限,但是运行时长超过了上限,那么任务也会判定为失败。

      • 配置实例参数。
        配置项说明
        实例标签配置定时任务实标签。单击 添加实例标签,根据界面提示输入符合要求的 。 标签对应 Kubernetes 中的 Label,用于设置识别资源的键值对,配合选择器,帮助 Kubernetes 快速筛选目标资源。
        实例注解配置定时任务注解。单击 添加实例注解,根据界面提示输入符合要求的 。注解对应 Kubernetes 中的 Annotation,不用于标识和区分资源,主要记录用于负责应用部署、安全策略、调度策略的附加信息。

        DNS 策略

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

        • ClusterFirst:在该模式下,会将 Kube-dns 或 CoreDNS 的信息当作预设置参数,写入到该 Pod 内的 DNS 配置。
        • Default:在该模式下,Pod 里面的 DNS 配置继承了宿主机上的 DNS 配置。即该 Pod 的 DNS 配置与宿主机完全一致。
        • ClusterFirstWithHostNet:在该模式下, 宿主机上的 DNS 配置与 Kube-dns 同时作为 Pod 的预设 DNS 配置。
        • None:该模式下, Kubernetes 不会为 Pod 预先加载任何逻辑,用于判定得到 DNS 的配置。
      • 配置安全功能。
        在页面底部 其他 区域开启安全 开关后,容器以 root 角色运行将会启动失败。
  5. 单击页面右下角的 确定,完成定时任务的创建。

通过 kubectl 命令行创建

说明

通过 kubectl 命令行创建定时任务前请确保:

  • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
  • 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群
  1. 创建工作负载的 YAML 文件。示例文件cronjob-demo.yaml代码如下:
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob-demo # 定时任务的名称。
      namespace: default # 定时任务所在的命名空间。
    spec:
      schedule: "*/1 * * * *"# 定时任务的执行时间。
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello # 定时任务重的容器名称。
                image: busybox # 容器镜像。
                command: # 容器中执行的命令。
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
                resources:
                  requests:  # 指定容器的 CPU 和内存请求。
                    cpu: "500m"      
                    memory: "1024Mi"
                  limits:  # 指定资源配额,例如:CPU 上限、内存上限、RDMA 卡数等。
                    cpu: "1"      
                    memory: "2Gi"
                    vke.volcengine.com/rdma: 2
              restartPolicy: OnFailure # 容器中任务失败时的重启策略,包括:Never:永不重启、OnFailure:失败时重启。
    	```
    
  2. 执行以下命令,创建工作负载。
    kubectl apply -f cronjob-demo.yaml
    

操作结果

操作完成后可以在 工作负载 > 定时任务 页面查看工作负载的状态。