对于离线业务, 批处理任务, k8s 使用 Job
和 CronJob
进行管理
在Job Pod被创建之后, k8s 会自动为其添加 Labels , 同时对 Job 对象, 也会添加相应的 Selector, 从而 保证了 Job 与它所管理的 Pod 之间的匹配关系.
<aside>
💡 k8s 为对象自动添加lable的功能, 叫做 Dynamic Admission Control
, 是借助 Admission Controller
对象实现的, 在API创建之后立马调用
</aside>
Job Controller 控制的对象, 直接就是 Pod, Job Controller 在控制循环中进行的调谐(Reconcile)操作,是根据实际在 Running状态 Pod 的数目、已经成功退出的 Pod 的数目,以及 parallelism、completions 参数的值共同计算出在这个周期里,应该创建或者删除的 Pod 数目,然后调用 Kubernetes API 来执行这个操作。
kubectl scale jobs job-multi --replicas=2
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
concurrencyPolicy: Replace # 并发执行策略, 新产生的 Job 会替换旧的、没有执行完的 Job
failedJobsHistoryLimit: 3 # 为失败的任务执行保留的历史记录数, 默认值为1
successfulJobsHistoryLimit: 1 # 为成功的任务执行保留的历史记录数
startingDeadlineSeconds: 10 # 因各种原因缺乏执行作业的时间点, 说导致的启动作业错误的超时时长, 会被计入错误历史记录
suspend: false # 是否挂起后续的任务执行,默认为false,对运行中的作业不会产生影响。
schedule: "*/1 * * * *" # 指定 CronJob, 何时启动
jobTemplate:
spec:
template:
metadata:
labels:
cronjob: es-clean-log-indices
spec:
restartPolicy: OnFailure # 只能为 OnFailure 和 Never
containers:
...
spec.concurrencyPolicy
管理定时任务的策略, 在某些情况下, 可能原来的Job还没有执行完, 新的Job就产生了, 可以通过 spec.concurrencyPolicy
来定义处理策略