前面我们讲过了deployment、statefulset、daemonset三种控制器,每一种都是各有各的特色
今天我们来学习剩下的另外2中
job和cronjob;其实job和cronjob是一样的功能,只不过cronjob添加了定时任务功能。

总结:Job负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。而CronJob则就是在Job上加上了时间调度

好了开始实践一下


首先使用job创建一个倒计时的功能

k8s使用job和cronjob控制器管理pod(9)_第1张图片
cat job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template:
metadata:
name: job-demo
spec:
restartPolicy: Never
containers:

  • name: counter
    image: busybox
    command:
    • "bin/sh"
    • "-c"
    • "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

然后创建一下

看一下效果
k8s使用job和cronjob控制器管理pod(9)_第2张图片

k8s使用job和cronjob控制器管理pod(9)


CronJob
其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似
cat cronjob-demo.yaml
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: cronjob-demo
spec:
schedule: "/1 *"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:

  • name: hello
    image: busybox
    args:
    • "bin/sh"
    • "-c"
    • "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

k8s使用job和cronjob控制器管理pod(9)_第3张图片
spec.schedule字段是必须填写的,用来指定任务运行的周期
spec.jobTemplate, 用来指定需要运行的任务
pec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job,默认没有限制


kubectl create -f cronjob-demo.yaml
或者使用kubectl run来创建一个CronJob
kubectl run hello --schedule="/1 *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"

k8s使用job和cronjob控制器管理pod(9)
k8s使用job和cronjob控制器管理pod(9)_第4张图片
这里会定时一直去创建,而且保留下来

所以删掉吧
k8s使用job和cronjob控制器管理pod(9)_第5张图片


job和cronjob其实用的时候相对于另外的三中要少很多,这里只是演示一下,了解就好,
k8s的5种控制器模式到现在就完成了,后面开始新的学习,
欢迎大家私信留言