创建任务工作负载Job

Job负责批量处理短暂的一次性任务(short-lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。您可以通过容器服务控制台创建Job类型的应用。本文介绍如何创建一个Job类型的busybox应用,并演示该任务(Job)应用的特性。

前提条件

已创建Kubernetes集群。具体操作,请参见创建Kubernetes托管版集群

Job类型

Kubernetes支持以下几种Job类型:

  • 非并行Job:通常创建一个Pod直至其成功结束。

  • 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束。

  • 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功。

  • 固定结束次数的并行Job:同时设置.spec.completions.spec.Parallelism,多个Pod同时处理工作队列。

根据.spec.completions.spec.Parallelism的设置,可以将Job划分为以下几种模式:

说明

本例中创建的任务属于固定结束次数的并行Job。

Job类型

使用示例

行为

Completions

Parallelism

一次性Job

数据库迁移

创建一个Pod直至其成功结束。

1

1

固定结束次数的Job

处理工作队列的Pod

依次创建一个Pod运行直至Completions个成功结束。

2+

1

固定结束次数的并行Job

多个Pod同时处理工作队列

依次创建多个Pod运行直至Completions个成功结束。

2+

2+

并行Job

多个Pod同时处理工作队列

创建一个或多个Pod直至有一个成功结束。

1

2+

操作步骤

步骤一:配置应用基本信息

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 任务

  3. 任务页面,单击使用镜像创建

  4. 应用基本信息配置向导页面,设置应用的基本信息。

    配置项

    描述

    应用名称

    设置应用的名称。例如busybox。

    类型

    设置类型任务(Job)

    标签

    为该应用添加一个标签,标识该应用。

    注解

    为该应用添加一个注解(Annotation)。

    时区同步

    容器与节点是否使用相同的时区。

  5. 单击下一步,进入容器配置向导页面。

步骤二:配置容器

容器配置向导页面,配置容器的镜像、资源、端口、环境变量、健康检查、生命周期、数据卷和日志。

说明

容器1页签右侧,单击添加容器可以为应用的Pod设置多个容器。

  1. 设置容器配置。

    1. 基本配置区域,完成容器的基本配置。

      参数

      描述

      镜像名称

      • 选择镜像

        您可以单击选择镜像,选择所需的镜像。支持选择以下三种类型的镜像。

        • 容器镜像服务企业版:可以选择托管在容器镜像服务ACR中的企业版镜像。需要选择镜像所属地域,以及镜像服务实例。关于ACR的更多信息,请参见什么是容器镜像服务ACR

        • 容器镜像服务个人版:可以选择托管在容器镜像服务ACR中的个人版镜像。需要选择镜像所属地域,以及镜像服务实例。

        • 制品中心:包含应用容器化基础OS镜像、基础语言镜像、AI/大数据相关镜像,本示例以制品中心的Nginx镜像为例说明。关于制品中心的更多信息,请参见制品中心

        您还可以填写私有镜像。填写的格式为domainname/namespace/imagename:tag

      • 选择镜像拉取策略

        ACK支持以下三种镜像拉取策略(imagePullPolicy):

        • 优先使用本地镜像(IfNotPresent):如果本地有该镜像(之前拉取过该镜像至宿主机中),则使用本地镜像,本地不存在时拉取镜像。

        • 总是拉取镜像(Always):表示每次部署或扩容都会从容器镜像服务重新拉取镜像,而不会从本地拉取镜像。

        • 仅使用本地镜像(Never):仅使用本地镜像。

        说明

        当您选中镜像拉取策略时,默认不设置镜像拉取策略。

      • 设置镜像密钥

        您可以单击设置镜像密钥,为私有镜像设置密钥以确保安全。关于ACR企业版实例,您可以通过免密组件拉取镜像。具体操作,请参见使用免密组件拉取容器镜像

      资源限制

      可指定该应用所能使用的资源上限,包括CPU、内存和Ephemeral-Storage三种资源,以防止占用过多资源。关于设置资源限制的更多信息,请参见资源画像

      所需资源

      为该应用预留资源额度,包括CPU、内存和Ephemeral-Storage三种资源,即容器独占这些资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。关于设置所需资源的更多信息,请参见资源画像

      容器启动项

      • stdin:表示为该容器开启标准输入。

      • tty:表示为该容器分配一个虚拟终端,以便于向容器发送信号。

      通常这两个选项是一起使用的,表示将终端(tty)绑定到容器的标准输入(stdin)上。例如,一个交互式的程序从用户获取标准输入,并显示到终端中。

      特权容器

      • 选择特权容器,则privileged=true,开启特权模式。

      • 不选择特权容器,则privileged=false,关闭特权模式。

      初始化容器

      选择该选项,表示创建一个初始化容器。

      初始化容器提供了一种机制来阻塞或延迟应用容器的启动,初始化容器执行成功后,Pod内的应用容器会并行启动。例如,检测依赖服务的可用性。初始化容器可以包括一些应用镜像中不存在的实用工具和安装脚本,用来初始化应用容器的运行环境,例如设置内核参数、生成配置文件。更多信息,请参见Init Containers

    2. 可选:端口设置区域,单击新增设置容器的端口。

      参数

      描述

      名称

      设置容器端口名称。

      容器端口

      设置暴露的容器访问端口或端口名,端口号必须介于1~65535。

      协议

      支持TCP和UDP。

    3. 可选:环境变量区域,单击新增设置环境变量。

      支持通过键值对的形式为Pod配置环境变量。用于给Pod添加环境标志或传递配置等,具体操作,请参见Pod variable

      参数

      描述

      类型

      设置环境变量的类型,支持以下类型:

      • 自定义

      • 配置项

      • 保密字典

      • 变量/变量引用

      • 资源引用

      配置项、保密字典支持对全部文件的引用,以保密字典为例。选择保密字典类型,只选择目标保密字典,则默认引用全部文件。环境变量

      对应的YAML,也引用了整个密钥(Secret)。yaml

      变量名称

      设置环境变量名称。

      变量/变量引用

      设置变量引用的值。

    4. 可选:健康检查区域,根据需要开启存活检查就绪检查启动探测

      更多信息,请参见配置存活、就绪和启动探测器

      参数

      请求类型

      配置说明

      • 存活检查(Liveness):用于检测何时重启容器。

      • 就绪检查(Readiness):确定容器是否已经就绪,且可以接受流量。

      • 启动探测(Startup Probes):用于检测何时启动容器。

        说明

        仅Kubernetes集群1.18及之后版本支持启动探测。

      HTTP请求

      即向容器发送一个HTTP GET请求,支持的参数包括:

      • 协议HTTP/HTTPS

      • 路径:访问HTTP Server的路径。

      • 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。

      • Http头:即HTTP Headers,HTTP请求中自定义的请求头,HTTP允许重复的Header。支持键值对的配置方式。

      • 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为3秒。

      • 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。

      • 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。

      • 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。

      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。

      TCP连接

      即向容器发送一个TCP Socket,Kubelet将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

      • 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。

      • 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为15秒。

      • 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。

      • 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。

      • 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。

      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。

      命令行

      通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

      • 命令行:用于检测容器健康情况的探测命令。

      • 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为5秒。

      • 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。

      • 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。

      • 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。

      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。

    5. 可选:生命周期区域,设置容器的生命周期。

      您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体操作,请参见配置生命周期生命周期

      参数

      描述

      启动执行

      为容器设置预启动命令和参数。

      启动后处理

      为容器设置启动后的命令。

      停止前处理

      为容器设置预结束命令。

    6. 可选:数据卷区域,增加本地存储或云存储声明PVC(Persistent Volume Claim)。

      参数

      描述

      增加本地存储

      本地存储:支持主机目录(HostPath)、配置项(ConfigMap)、保密字典(Secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息,请参见volumes

      增加云存储声明(PersistentVolumeClaim)

      支持通过PVC挂载云存储卷。在选择目标挂载源前,您需要创建云存储声明。具体操作,请参见创建持久化存储卷声明

      本例中配置了一个云存储类型的数据卷声明disk-ssd,将其挂载到容器的/tmp路径下。配置数据卷

    7. 可选:日志配置区域,进行采集配置和自定义Tag设置。

      重要

      请确保已部署Kubernetes集群,并且在此集群上已安装日志插件。

      配置项

      描述

      采集配置

      日志库:即在日志服务中生成一个对应的Logstore,用于存储采集到的日志。

      容器内日志路径:支持Stdout和文本日志。

      • Stdout:表示采集容器的标准输出日志。

      • 文本日志:表示收集容器内指定路径的日志,本例中表示收集/var/log/nginx下所有的文本日志,也支持通配符的方式。

      自定义Tag

      您还可以设置自定义Tag,设置Tag后,会将该Tag一起采集到容器的日志输出中。自定义Tag可帮助您给容器日志打上Tag,方便进行日志统计和过滤等分析操作。

    8. 单击下一步,进入高级配置向导页面。

步骤三:完成高级配置

  1. 在任务设置区域,设置任务的运行状态。

    参数

    说明

    成功运行的Pod数

    即设置COMPLETIONS的值,指定Job需要成功运行Pods的数量。默认值为1。

    并行运行的Pod数

    即设置parallelism的值,指定Job在任一时刻应该并发运行Pod的数量。默认值为1。

    超时时间

    即设置activeDeadlineSeconds的值,指定Job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。

    重试次数

    即设置backoffLimit的值,指定Job失败后进行重试的次数。默认是6次,每次失败后重试会有延迟时间,该时间是指数级增长,最长时间是6分钟。

    重启策略

    仅支持不重启(Never)和失败时(OnFailure)。

  2. 可选:标签和注释区域,单击添加设置容器组的标签和注释。

    参数

    描述

    Pod标签

    为该Pod添加一个标签,标识该应用。

    Pod注解

    为该Pod添加一个注解(Annotation)。

  3. 单击创建

步骤四:查看应用

  1. 创建成功后,默认进入创建完成页面,会列出应用包含的对象。

    您可以单击查看应用详情,进入任务详情页面。本例中按照任务定义,一次性并行创建2个Pod。

    等待一段时间,所有容器组创建完毕。

  2. 单击工作负载 > 任务,在任务页面,您可以看到该任务的完成时间。

    说明

    若任务未创建完所有容器组,任务将不会显示完成时间。

相关操作

Job创建完成后,您还可以进行以下操作:

在任务列表中,单击目标任务名称或目标任务操作列下的详情,在任务详情页面,您可以伸缩查看Yaml、刷新应用。

  • 伸缩:在应用详情页面单击伸缩,您可以修改所需容器组数量。

  • 查看Yaml:在应用详情页面单击查看Yaml,您可以更新下载另存为YAML文件。

  • 刷新:在应用详情页面,单击image.png图标,您可以刷新应用。

在任务列表目标任务名称右侧的操作列中,选择更多 > 删除,即可删除任务Job。