Job
Job
当 Pod 内部进程成功结束时,不重启容器。在发生节点故障时,由 Job 管理的 Pod 按照 ReplicaSet 的方式重新安排到其他节点(若 进程本身异常退出则重新启动容器)。
- Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止
- 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。当数量达到指定的成功个数阈值时,任务(即 Job)结束
- 删除 Job 的操作会清除所创建的全部 Pod。挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行
Job 的创建
yaml
apiVersion: batch/v1
kind: Job
metadata:
namespace: helloworld
name: pi
spec:
ttlSecondsAfterFinished: 200 # 当 job 完成后 200s 就清理这个 job,如果设置为 0 那么在成功后立即清理,如果不设置默认不清理
completions: 4 # 设置为 0 时 job 会被挂起
parallelism: 2 # 默认值为 1,用于表示 Job 执行任务的并行数
template:
spec:
containers:
- name: pi
image: perl:5.34
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never # 只能设置为 Never 或 OnFailure
backoffLimit: 4Job 并行执行
若
completions = 4,parallelism=2,那么表示:按照 2 个 pod 同时启动的规则完成 4 个 pod 的成功运行即视为 job 已完成
yaml
apiVersion: batch/v1
kind: Job # 类型为 Job
metadata:
name: batch-job
spec:
backoffLimit: 6 # job 被标记为失败之前的重试次数,默认为 6
completions: 5 # 使得 job 顺序运行 5 个 pod(如果其中失败一个,会重启一次,那么最终会超过 5 个)
parallelism: 2 # pod 并行运行的数量,job 运行时最多有 2 个 pod 在运行
template:
metadata:
labels:
app: batch-job # 指定模板的 label
spec:
activeDeadlineSeconds: 10 # 限制 pod 的运行时间,超过此时间会终止 pod 并标记为失败
restartPolicy: OnFailure # 重启策略不能是 Always
containers:
- name: main
image: luksa/batch-jobshell
# 创建 job
kubectl apply -f job.yaml
# 查看 job
kubectl get job
# 删除 job,管理的 pod 也会被删除
kubectl delete job batch-job
# 修改 job 中 pod 的并行数量
kubectl edit jobjob 管理的 Pod 任务完成后会显示
Completed状态
CronJob
使用 cron 格式进行编写,周期性 地在给定的调度时间创建并执行 Job。
yaml
apiVersion: batch/v1beta1
kind: CronJob # 类型为 CronJob
metadata:
name: batch-cron-job
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 15 # pod 必须在指定时间后 15s 内开始运行
jobTemplate:
spec:
template:
metadata:
labels:
app: batch-job # 指定模板的 label
spec:
activeDeadlineSeconds: 10 # 限制 pod 的运行时间
restartPolicy: OnFailure # 重启策略不能是 Always
containers:
- name: main
image: luksa/batch-jobCron 语法
text
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
🎈🎈