Job
Job
负责处理任务,主要为仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
Job 的资源清单如下所示:
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
namespace: default
spec:
# 限制任务运行的最长时间
activeDeadlineSeconds: 100
# 任务失败重建 Pod 的次数,默认 6,重建 Pod 的间隔呈指数增加,即 10s、20s、40s...
backoffLimit: 10
# 定义 Job 最多可以有多少 Pod 同时运行
parallelism: 2
# 定义 Job 至少要完成的 Pod 数目
completions: 5
template:
spec:
# 重启策略必须是 Never,设置 OnFailure,则 Job 执行失败后不会创建新的 Pod,只会不断重启 Pod
restartPolicy: Never
containers:
- name: demo
image: busybox
command:
- "/bin/sh"
- "-c"
- "echo 'Hello World'"
配置清单参数说明:
-
apiVersion
:Job 类的属于batch/v1
而不是apps/v1
。 -
activeDeadlineSeconds
:限制任务运行时间,如果运行超过该时间,这个 Job 的所有 Pod 都会终止,Pod 的终止原因为:DeadlineExceeded
。 -
backoffLimit
:当重启策略设置为Never
时,Job 在执行失败后会不断创建新 Pod,但不会一直创建下去,可以通过该参数进行限制,默认为 6。同时 Job 重建 Pod 的间隔是呈指数增加的,即 10s、20s、40s… 后。 -
parallelism
:并行控制,定义 Job 能有多少个 Pod 同时运行。 -
completions
:定义 Job 至少要完成的 Pod 数目。 -
RestartPolicy
:重启策略,仅支持Never
和OnFailure
两种,不支持Always
。
需要注意的是:Job 和 Deployment、StatefulSet 之类不同的地方在于,Pod 中的容器要求是一个任务,而不是一个常驻前台的进程。执行 apply 之后 Pod 会很快的退出,如果没出错,状态就处于 Completed
。
CronJob
CronJob 相当于在 Job 的基础上加上了时间调度,使得任务可以在给定的时间点运行,也可以周期性地在给定时间点运行。类似于 Linux 中的 crontab
。它的时间配置也和 crontab 一样。
时间格式为:分 时 日 月 周
- 分:支持 0~59,每分钟配置为
*/1
。 - 时:支持 0~23
- 日:支持 1~31
- 月:支持 1~12
- 周:支持 0~7,0 和 7 都表示星期天
使用 CronJob 来管理 Job 任务的资源清单:
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-demo
namespace: default
spec:
# 定时任务
schedule: "*/1 * * * * "
#
successfulJobsHistoryLimit: 3
#
failedJobsHistoryLimit: 3
# 配置 Job 资源清单,省略了某些重复项
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: demo
image: busybox
command:
- "/bin/sh"
- "-c"
- "echo AAAA"
配置清单参数说明:
schedule
:指定任务运行的周期,格式和 crontab 一样。jobTemplate
:指定需要运行的任务,格式就是 Job 资源清单。successfulJobsHistoryLimit
:历史限制,指定可以保留多少完成的 Pod,默认为 3。failedJobsHistoryLimit
::历史限制,指定可以保留多少失败的 Pod,默认为 1。
如果不再需要 CronJob,可以使用 kubectl 命令删除它:
kubectl delete cronjob cronjob-demo
不过需要注意:将会终止正在创建的 Job,但是运行中的 Job 将不会被立即终止。
标签:CronJob,14,Kubernetes,demo,任务,Job,Pod,spec From: https://www.cnblogs.com/ezops/p/16815754.html