K8S——Job-Cronjob
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。与deployment的区别:deployment是通过创建RS来进行pod的管理。**Cron Job管理基于时间的job,即: **
·
Job
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
——————————————————————————————————————————————
特殊说明:
- spec.template格式同Pod
- RestartPolicy仅支持Never或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
- .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
- .spec.parallelism 标志并行运行的Pod的个数,默认为1
- spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试
删除pod
#查看
[root@master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 10/10 10 10 5h4m
#删除指定命令 空间-pod
[root@master ~]# kubectl delete deployment nginx-deployment
deployment.extensions "nginx-deployment" deleted
[root@master ~]# kubectl get pod
No resources found.
创建文件
vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
[root@master ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 2m51s 6m41s
[root@master ~]# kubectl get job -o wide
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
pi 1/1 2m51s 6m49s pi perl controller-uid=e89fb1d8-a4e
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pi-q6mnl 0/1 Completed 0 7m10s
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pi-q6mnl 0/1 Completed 0 7m16s 10.244.166.164 node1 <none> <none>
Job演示
在master node1 node2传入镜像perl.tar
并加载镜像
#3台主机都要做
[root@master ~]# ls
anaconda-ks.cfg calico.yaml initial-setup-ks.cfg perl.tar rs.yaml 模板 图片 下载 桌面
auto_aliyun.sh deployment.yaml job.yaml perl.tar.gz 公共 视频 文档 音乐
[root@master ~]# docker load -i perl.tar
660314270d76: Loading layer 119.2MB/119.2MB
6d5a64ea8f37: Loading layer 17.11MB/17.11MB
74e2ede3b29c: Loading layer 17.83MB/17.83MB
97e8dd85db4e: Loading layer 149.8MB/149.8MB
6e302bbcacce: Loading layer 520.7MB/520.7MB
c636bd55ab5a: Loading layer 3.072kB/3.072kB
3a73b338e8fc: Loading layer 55.47MB/55.47MB
Loaded image: perl:latest
查看
[root@master ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 2m51s 103m
#查看pod日志
[root@master ~]# kubectl log pi-q6mnl
log is DEPRECATED and will be removed in a future version. Use logs instead.
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
CronJob Spec
- spec.template格式同Pod
- RestartPolicy仅支持Never或OnFailure
- 单个Pod时,默认Pod成功运行后Job即结束
- .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
- .spec.parallelism 标志并行运行的Pod的个数,默认为1
- spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试
Never:永不重启 OnFailure:只有在失败的时候重启
.spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
:返回值为0
CronJob
**Cron Job管理基于时间的job,即: **
- 在给定时间点只运行一次
- 周期性地在给定时间点运行
使用条件:当前使用的Kubenetes集群,版本>=1.8(对Cronjob)
与deployment的区别:deployment是通过创建RS来进行pod的管理。Cron job是通过创建pod进行管理
典型的用法如下所示:
- 在给定的时间点调度 Job 运行
- 创建周期性运行的 Job,例如:数据库备份、发送邮件
CronJob Spec
.spec.schedule
:调度,必需字段,指定任务运行周期,格式同 Cron.spec.jobTemplate
:Job 模板,必需字段,指定需要运行的任务,格式同 Job.spec.startingDeadlineSeconds
:启动 Job 的期限(秒级别),该字段是可选的。如果因为任何原因而错
过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限.spec.concurrencyPolicy
:并发策略,该字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的
并发执行。只允许指定下面策略中的一种:
*Allow
(默认):允许并发运行 Job
*Forbid
:禁止并发运行,如果前一个还没有完成,则直接跳过下一个
*Replace
:取消当前正在运行的 Job,用一个新的来替换
注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总
是允许并发运行。.spec.suspend
:挂起,该字段也是可选的。如果设置为 true ,后续所有执行都会被挂起。它对已经开始
执行的 Job 不起作用。默认值为 false 。.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
:历史限制,是可选的字段。它
们指定了可以保留多少完成和失败的 Job。默认情况下,它们分别设置为3
和1
。设置限制的值为0
,相
关类型的 Job 完成后将不会被保留。
演示CronJob
创建文件Cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *" #意思是每一分钟创建一个job和pod
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
运行:
kubectl apply -f Cronjob.yaml
查看:
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1577785980-ncn2r 0/1 Completed 0 18s
#要等待````
[root@apiserver ~]# kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 41s 89s
一分钟重启
[root@apiserver ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
hello-1577785980-ncn2r 0/1 Completed 0 52s
hello-1577786040-hkn2r 0/1 Pending 0 0s
hello-1577786040-hkn2r 0/1 Pending 0 0s
hello-1577786040-hkn2r 0/1 ContainerCreating 0 0s
hello-1577786040-hkn2r 0/1 ContainerCreating 0 1s
hello-1577786040-hkn2r 0/1 Completed 0 2s
hello-1577786040-hkn2r 0/1 Completed 0 3s
#查看
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1577785980-ncn2r 0/1 Completed 0 3m2s
hello-1577786040-hkn2r 0/1 Completed 0 2m2s
hello-1577786100-xq9cr 0/1 Completed 0 62s
hello-1577786160-85dw4 0/1 ContainerCreating 0 2s
删除pod
#注意,删除 cronjob 的时候不会自动删除 job,这些 job 可以用 kubectl delete job 来删除 $ kubectl delete cronjob hello cronjob "hello" deleted
[root@master ~]# kubectl delete Cronjob --all
cronjob.batch "hello" deleted
[root@master ~]# kubectl get pod
No resources found.
更多推荐
已为社区贡献4条内容
所有评论(0)