创建普通任务(Job)
操作场景
普通任务是一次性运行的短任务,部署完成后即可执行。正常退出(exit 0)后,任务即执行完成。
普通任务是用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、Statefulset)的主要区别是:
批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的spec.completions策略而不同,即:
- 单Pod型任务有一个Pod成功就标志完成。
- 定数成功型任务保证有N个任务全部成功。
- 工作队列型任务根据应用确认的全局成功而标志成功。
前提条件
- 在创建容器工作负载前,您需要存在一个可用集群。若没有可用集群,请参照购买Autopilot集群中内容创建。
- 在创建容器工作负载前,您需要配置访问SWR和OBS服务的VPC终端节点,详情请参见配置访问SWR和OBS服务的VPC终端节点。
- 若工作负载需要被外网访问,请为工作负载创建负载均衡类型的服务。
单个实例(Pod)内如果有多个容器,请确保容器使用的端口不冲突 ,否则部署会失败。
通过控制台创建
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。
- 配置工作负载的信息。
基本信息
- 负载类型:选择任务Job。
- 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
- 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。
- 实例数量:填写实例的数量,即工作负载Pod的数量。
容器配置- 容器信息
Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
- 基本信息:配置容器的基本信息。
参数
说明
容器名称
为容器命名。
更新策略
镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。
镜像名称
单击后方“选择镜像”,选择容器使用的镜像。
如果需要使用第三方镜像,请参见使用第三方镜像。
镜像版本
选择需要部署的镜像版本。
CPU配额
CPU资源限制值,即允许容器使用的CPU最大值,防止占用过多资源。
内存配额
内存资源限制值,即允许容器使用的内存最大值。如果超过,容器会被终止。
初始化容器(可选)
选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。
Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init容器。
- 基本信息:配置容器的基本信息。
- 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。
高级配置(可选)- 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见设置标签与注解。
- 任务设置:
- 并行数:任务负载执行过程中允许同时创建的最大实例数,并行数应不大于实例数。
- 超时时间(秒):当任务执行超出该时间时,任务将会被标识为执行失败,任务下的所有实例都会被删除。为空时表示不设置超时时间。
- 完成模式:
- 非索引:当执行成功的Pod数达到实例数时, Job执行成功。Job中每一个Pod都是同质的,Pod之间是独立无关。
- 索引:系统会为每个Pod分配索引值,取值为 0 到实例数-1。每个分配了索引的Pod都执行成功,则Job执行成功。索引模式下,Job中的Pod命名遵循$(job-name)-$(index)模式。
- 挂起任务:默认任务创建后被立即执行。选择挂起任务后,任务创建后处于挂起状态;将其关闭后,任务继续执行。
- 单击右下角“创建工作负载”。
使用kubectl创建Job
Autopilot集群暂不支持配置节点亲和与反亲和,所以当您使用kubectl命令行创建工作负载时,为避免Pod创建失败,请不要配置affinity字段。
Job的关键配置参数如下所示:
- .spec.completions表示Job结束需要成功运行的Pod个数,默认为1。
- .spec.parallelism表示并行运行的Pod的个数,默认为1。
- .spec.backoffLimit表示失败Pod的最大重试次数,超过这个次数不会继续重试。
- .spec.activeDeadlineSeconds表示Pod运行时间,一旦达到这个时间,Job及其所有的Pod都会停止。且activeDeadlineSeconds优先级高于backoffLimit,即到达activeDeadlineSeconds的Job会忽略backoffLimit的设置。
根据.spec.completions和.spec.parallelism的设置,可以将Job划分为以下几种类型。
Job类型 |
说明 |
.spec.completions |
.spec.parallelism |
---|---|---|---|
一次性Job |
创建一个Pod直至其成功结束。 |
1 |
1 |
固定结束次数的Job |
依次创建一个Pod运行直至成功结束的Pod个数到达到.spec.completions的数值。 |
>1 |
1 |
固定结束次数的并行Job |
依次创建多个Pod运行直至成功结束的Pod个数到达到.spec.completions的数值。 |
>1 |
>1 |
带工作队列的并行Job |
创建一个或多个Pod,从工作队列中取走对应的任务并处理,完成后将任务从队列中删除后退出,详情请参见使用工作队列进行精细的并行处理。 |
不填写 |
>1或=1 |
以下是一个Job配置示例,保存在myjob.yaml中,其计算π到2000位并打印输出。
apiVersion: batch/v1 kind: Job metadata: name: myjob spec: completions: 50 # Job结束需要运行50个Pod,这个示例中就是打印π 50次 parallelism: 5 # 并行5个Pod backoffLimit: 5 # 最多重试5次 template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never imagePullSecrets: - name: default-secret
说明:
- apiVersion: batch/v1 是当前job的Version
- kind: Job:指定当前资源的类型是Job
- restartPolicy: Never:是指当前的重启策略。对于Job,只能设置为Never或者OnFailure。对于其他controller(比如Deployment)可以设置为Always。
运行该任务,如下:
- 启动这个job。
[root@k8s-master k8s]# kubectl apply -f myjob.yaml job.batch/myjob created
- 查看这个job。
kubectl get job
[root@k8s-master k8s]# kubectl get job NAME COMPLETIONS DURATION AGE myjob 50/50 23s 3m45s
completions为 50/50 表示成功运行了这个job。
- 查看pod的状态。
kubectl get pod
[root@k8s-master k8s]# kubectl get pod NAME READY STATUS RESTARTS AGE myjob-29qlw 0/1 Completed 0 4m5s ...
状态为Completed表示这个job已经运行完成。
- 查看这个pod的日志。
kubectl logs
# kubectl logs myjob-29qlw 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
相关操作
普通任务创建完成后,您还可执行表2中操作。