一 基本概念
类似'linux中'-->'at任务'和'rond定时任务'用法
二 Job
典型的应用场景: jenkins '起一个任务'
(1)案例
用 Job 这个'资源对象'来创建一个任务,我们定义一个 Job 来执行一个'倒计时'的任务
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template:
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox
command:
- "bin/sh"
- "-c"
- "for i in $(seq 1 10);do sleep 2 && echo $i; done"
注意1: apiVersion版本通过'explain'查询
注意2: restartPolicy'必须手动指定',因为'默认不指定'就是'Alaways'
可以看到,'Job 对象'在创建后,它的 Pod 模板'被自动加上了'一个 'controller-uid=< 一个随机字符串 >' 这样的 Label 标签,而这个 Job 对象本身,则'被自动加上了'这个 Label 对应的 Selector,从而 保证了 'Job 与它所管理的 Pod 之间'的匹配关系
而 Job 控制器之所以要使用这种'携带了 UID 的 Label',就是为了'避免不同 Job 对象'所管理的 Pod '发生重合'
我们可以看到 'Pod 变成了 Completed 状态'这是因为容器的'任务执行完成正常退出了'
思考:如果执行失败呢?
spec:
activeDeadlineSeconds: 100
(2)细节
job执行完后,不会自动启动一个新的pod,pod和jobs'不会被自动删除'
三 CronJob
(1)基本概念
(2)时间格式
(3)案例
apiVersion: batch/v1beta1
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"
注意1: spec.schedule字段是'必须填写'的,用来指定'任务运行的周期',格式就和 crontab 一样
注意2: 另外一个字段是'spec.jobTemplate', 用来指定'需要运行的任务',格式当然和 Job 是一致的
++++++++++++++++++++ '一些字段的含义'
1) .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit,表示'历史限制',是'可选'的字段,指定可以'保留多少完成和失败'的 Job,默认没有限制,所有成功和失败的 Job 都会被保留。
场景: 当运行一个 CronJob 时,Job 可以很快'就堆积很多',所以一般'推荐设置'这两个字段的值。如果设置限制的'值为 0',那么相关类型的 Job 完成后将'不会被保留'
(3)观察实验现象
稍微'等一会儿'查看可以发现'多了几个 Job 资源对象',这个就是因为上面我们'设置的 CronJob 资源对象',每1分钟'执行一个任务',就会'创建一个新的 Job'
这个就是 CronJob 的基本用法,一旦'不再需要 CronJob',我们可以使用 kubectl 命令'删除它'
kubectl 'delete' cronjob cronjob-demo
注意: 这将会'终止正在创建'的 Job,但是'运行中的 Job '将不会被终止,'不会删除' Job 和 它们的 Pod