13Kubernetes创建JOB对象
·
1、创建临时任务的JOB对象
创建一个名字叫“sleep-job”的job对象,它随机睡眠一段时间再退出,模拟运行时间较长的作业(比如MapReduce)。Job的参数设置成30秒超时,最多重试3次,总共需要运行完4个Pod,但同一时刻最多并发2个Pod:
- activeDeadlineSeconds:设置Pod运行的超时时间。
- backoffLimit:设置Pod的失败重试次数。
- completions:Job完成需要运行多少个Pod,默认是1个。
- parallelism:它与completions相关,表示允许并发运行的Pod数量,避免过多占用资源。
[highgo@master 13]$ kubectl create job echo-job --image=busybox --dry-run=client -o yaml # 生成模板文件
[highgo@master 13]$ cat sleep-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: sleep-job
spec:
activeDeadlineSeconds: 30
backoffLimit: 3
completions: 4
parallelism: 2
template:
spec:
containers:
- image: busybox
name: sleep-job
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- sleep $(($RANDOM % 10 + 1)) && echo done
restartPolicy: OnFailure
[highgo@master 13]$ kubectl apply -f sleep-job.yaml
job.batch/sleep-job created
[highgo@master 13]$ kubectl get pod -w # 查看pod的创建过程
NAME READY STATUS RESTARTS AGE
sleep-job-6mq65 1/1 Running 0 4s
sleep-job-kfdqg 1/1 Running 0 4s
sleep-job-kfdqg 0/1 Completed 0 6s
sleep-job-kfdqg 0/1 Completed 0 8s
sleep-job-bc7wr 0/1 Pending 0 0s
sleep-job-bc7wr 0/1 Pending 0 0s
sleep-job-bc7wr 0/1 ContainerCreating 0 0s
sleep-job-bc7wr 1/1 Running 0 1s
sleep-job-6mq65 0/1 Completed 0 11s
sleep-job-bc7wr 0/1 Completed 0 5s
sleep-job-6mq65 0/1 Completed 0 13s
sleep-job-clvv9 0/1 Pending 0 0s
sleep-job-clvv9 0/1 Pending 0 0s
sleep-job-clvv9 0/1 ContainerCreating 0 0s
sleep-job-clvv9 1/1 Running 0 1s
sleep-job-bc7wr 0/1 Completed 0 7s
sleep-job-clvv9 0/1 Completed 0 12s
sleep-job-clvv9 0/1 Completed 0 14s
^C[highgo@master 13]$ kubectl get pod # 4个pod全都创建完毕
NAME READY STATUS RESTARTS AGE
sleep-job-6mq65 0/1 Completed 0 64s
sleep-job-bc7wr 0/1 Completed 0 56s
sleep-job-clvv9 0/1 Completed 0 51s
sleep-job-kfdqg 0/1 Completed 0 64s
[highgo@master 13]$ kubectl get job
NAME COMPLETIONS DURATION AGE
sleep-job 4/4 27s 68s
2、创建定时任务的JOB对象
[highgo@master 13]$ kubectl create cj echo-cj --image=busybox --schedule="" --dry-run=client -o yaml # 生成模板文件
发现有三层连续的spec嵌套:
- 第一个spec是CronJob自己的对象规格声明
- 第二个spec从属于“jobTemplate”,它定义了一个Job对象。
- 第三个spec从属于“template”,它定义了Job里运行的Pod。
除了定义Job对象的“jobTemplate”字段之外,CronJob还有一个新字段就是“schedule”,用来定义任务周期运行的规则。它使用的是标准的Cron语法,指定分钟、小时、天、月、周,和Linux上的crontab是一样的。
[highgo@master 13]$ cat cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: echo-cj
spec:
schedule: '*/1 * * * *'
jobTemplate:
spec:
template:
spec:
containers:
- image: busybox
name: echo-cj
imagePullPolicy: IfNotPresent
command: ["/bin/echo"]
args: ["hello", "world"]
restartPolicy: OnFailure
[highgo@master 13]$ kubectl apply -f cronjob.yaml
cronjob.batch/echo-cj created
[highgo@master 13]$ kubectl get cj
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
echo-cj */1 * * * * False 0 9s 19s
[highgo@master 13]$ kubectl get job
NAME COMPLETIONS DURATION AGE
echo-cj-29050640 1/1 3s 2m50s
echo-cj-29050641 1/1 3s 110s
echo-cj-29050642 1/1 3s 50s
[highgo@master 13]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
echo-cj-29050640-5d9tp 0/1 Completed 0 2m59s
echo-cj-29050641-tc6nx 0/1 Completed 0 119s
echo-cj-29050642-245nx 0/1 Completed 0 59s
[highgo@master 13]$ kubectl delete cj echo-cj # 删除cronjob以后,对应的job和pod都会被删除
cronjob.batch "echo-cj" deleted
[highgo@master 13]$ kubectl get cj
No resources found in default namespace.
[highgo@master 13]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
[highgo@master 13]$ kubectl get job
No resources found in default namespace.
[highgo@master 13]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
更多推荐



所有评论(0)