服务类容器通常持续提供服务,需要一直运行, 比如HTTP Server、 Daemon 等 。工作类容器则是一次性任务, 比如批处理程序,完成后容器就退出。
配置hello-job.yml文件
apiVersion: batch/v1
kind: Job
metadata:
name: hellojob
spec:
template:
metadata:
name: hellojob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s"]
restartPolicy: Never
batch/v1是当前 Job 的 apiVersion。
kind指明当前资源的类型为 Job 。
restartPolicy指定什么情况下需要重启容器。 对于Job ,只能设置为Never或者 OnFailure对于其他 controller (比如Deployment) 通常设置为Always
启动Job
$ kubectl apply -f hello-job.yml
job.batch/hellojob created
查看job
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
hellojob 1/1 9s 5m22s
hellojob的状态是 Completed
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hellojob-s9qks 0/1 Completed 0 6m17s
通过日志查看执行结果
$ kubectl logs hellojob-s9qks
hello k8s
CronJob
基于时间的Job
在给定时间点只运用一次
周期性的在定时间点运行
rontab 的格式为:分 时 日 月 星期 要运行的命令 。
- 第1列分钟0~59
- 第2列小时0~23)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要运行的命令
上面的cronejob每分钟执行一次,还有一些值得我们关注的字段 .spec.successfulJobsHistoryLimit(默认为3) 和 .spec.failedJobsHistoryLimit(默认为1),表示历史限制,是可选的字段,指定可以保留多少完成和失败的 Job。apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
namespace: default
labels:
app: hello-cron
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
args: ['/bin/sh', '-c', 'date; echo Hello Kubernetes']
restartPolicy: OnFailure
查看$ kubectl get cronjob -l app=hello-cron
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 30s 92s
$ kubectl get job
NAME COMPLETIONS DURATION AGE
hello-1626964200 1/1 37s 2m55s
hello-1626964260 1/1 2s 115s
hello-1626964320 1/1 2s 55s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-1626964260-5hmqj 0/1 Completed 0 2m49s
hello-1626964320-4vbg9 0/1 Completed 0 109s
hello-1626964380-zzng8 0/1 Completed 0 49s