Kubernetes(5)job控制器
容器按照持续运行的时间可分为两类:服务类容器和工作类容器
服务类容器通常持续提供服务,需要一直运行,比如HTTPServer、Daemon等。工作类容器则是一次性任务,比如批处理程序,完成后容器就退出
Kubernetes的Deployment、ReplicaSet和DaemonSet都用于管理服务类容器;对于工作类容器,我们使用Job
部署
# 先看一个简单的Job配置文件myjob.yml
[k8s@server1 ~]$ cat myjob.yml
apiVersion: batch/v1 (1)
kind: Job (2)
metadata:
name: myjob
spec:
template:
metadata:
name: myjob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job !"]
restartPolicy: Never (3)
"""
1.batch/v1是当前Job的apiVersion
2.指明当前资源的类型为Job
3.restartPolicy指定什么情况下需要重启容器。对于Job,只能设
置为Never或者OnFailure。对于其他controller(比如Deployment),
可以设置为Always
"""
# kubectl apply -f myjob.yml启动Job
[k8s@server1 ~]$ kubectl apply -f myjob.yml
job.batch/myjob created
# 通过kubectl get job查看Job的状态
[k8s@server1 ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
myjob 1/1 12s 14s
[k8s@server1 ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
myjob-c87rp 0/1 Completed 0 27s
# 通过kubectl logs可以查看Pod的标准输出
[k8s@server1 ~]$ kubectl logs myjob-c87rp
hello k8s job !
Pod失败的情况
以上是Pod成功执行的情况,如果Pod失败了会怎么样呢?
# 我们做个试验,修改myjob.yml,故意引入一个错误
[k8s@server1 ~]$ cat myjob.yml
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
template:
metadata:
name: myjob
spec:
containers:
- name: hello
image: busybox
command: ["invalid_command","hello k8s job !"]
restartPolicy: Never
# 先删除之前的Job
[k8s@server1 ~]$ kubectl delete -f myjob.yml
job.batch