Job
介绍
ReplicationController、ReplicaSet和DaemonSet的管理的pod会持续运行任务,永远达不到完成态,这些 pod 中的进程在退出时会重新启动。kubernetes的job
允许我们运行一种pod,该 pod 在内部进程成功结束时,不重启容器。
功能:
- 允许定义pod执行进程结束后的重启策略
- 节点故障时和 ReplicaSet一样重新安排到其他节点
创建job
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job
spec:
# completions: 5 # 将使此作业顺序运行5个pod
# parallelism: 2 # 最多2个pod可以并行运行
template:
metadata:
labels:
app: batch-job
spec:
restartPolicy: OnFailure # 重启策略Always、OnFailure、Never
containers:
- name: main
image: luksa/batch-job
查看操作过程发现job最后变成执行完成状态。
job的缩放
kubectl scale job {job_name} --replicas 3
可以在job运行时临时更改parallelism,如2增加到3,将使另一个pod立即启动。
job等待pod执行的时间
Job 要等待一个 pod 多久来完成任务?如果 pod 卡住并且根本无法完成(或者无法足够快完成),该怎么办?
通过在pod配置中设置 activeDeadlineSeconds 属性,可以限制 pod的时间。如果 pod 运行时间超过此时间,系统将尝试终止pod,并将 Job 标记为失败。
CronJob
介绍
特定时间或制定时间间隔来执行任务。
创建CronJob
假设每15分钟运行一次上个示例的任务。
apiVersion: batch/v1
kind: CronJob
metadata:
name: batch-job-every-15m
spec:
schedule: "0,15,30,45 * * * *" # 每天在每小时0,15,30,45分钟运行
jobTemplate:
spec:
template:
metadata:
labels:
app: periodic-batch-job
spec:
restartPolicy: OnFailure # 重启策略Always、OnFailure、Never
containers:
- name: main
image: luksa/batch-job
cron 时间表格式:
分 时 日 月 星期几
例如:
每月第一天,每隔30分钟运行一次:"0,30 * 1 * * "
每个星期天上午3点:“0 3 * * 0”