1.什么是job

容器按照持续运行的时间可分为两类:服务类容器和工作类容器
服务类容器通常持续提供服务,需要一直运行,比如HTTPServer、Daemon等。工作类容器则是一次性任务,比如批处理程序,完成后容器就退出
Kubernetes的Deployment、ReplicaSet和DaemonSet都用于管理服务类容器;对于工作类容器,我们使用Job

2. 配置文件myjob.yml

我们在这个实验中要执行一个新的job服务
在这里插入图片描述

batch/v1 # 是当前Job的apiVersion
指明当前资源的类型为Job
restartPolicy指定什么情况下需要重启容器。对于Job,只能设置为Never或者OnFailure。对于其他controller(比如Deployment),可以设置为Always

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. job失败的情况

在这里插入图片描述
我们做个试验,修改myjob.yml,故意引入一个错误
在这里插入图片描述
在这里插入图片描述

kubectl describe pod # 查看某个Pod的启动日志

在这里插入图片描述
下面解释一个现象:为什么kubectl get pod会看到这么多个失败的Pod?
原因是:当第一个Pod启动时,容器失败退出,根据restartPolicy:Never,此失败容器不会被重启,但JobDESIRED的Pod是1,目前SUCCESSFUL为0,不满足,所以Job controller会启动新的Pod,直到SUCCESSFUL为1。对于我们这个例子,SUCCESSFUL永远也到不了1,所以Job controller会一直创建新的Pod。为了终止这个行为,只能删除Job

4.将restartPolicy设置为OnFailure

如果将restartPolicy设置为OnFailure会怎么样?下面我们实践一下,修改myjob.yml后重新启动
在这里插入图片描述在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐