K8s工作负载-Job
K8s工作负载-Job
基于1.25
什么是Job
Job会创建一个或多个Pod,并持续重试Pod的执行,直至指定数量的Pod成功终止
- 随着Pod成功终止,Job会记录成功的Pod个数,Pod到达指定数量,Job终止
- 删除Job,会删除Job的所有Pod
JobSpec
// JobSpec describes how the job execution will look like. |
Job的并发
可以分成三个角度:无并发、指定完成数量和工作对列
无并发
- 同一时间只启动一个Pod,这个Podfailed下才会启动另外一个Pod
- 有一个Pod启动成功,整个Job退出
- 不需要啊设置i
.spec.completions
和.spec.parallelism
,使用了默认值1
完成指定数量
.spec.completions
设置为正数- 成功的Pod数量达到
.spec.completions
,整个Job结束 - 可以指定
spec.completionMode=Indexed
,这个时候PodName有编号,从0开始- Pod自动添加
batch.kubernetes.io/jon-completion-index
注解和JOB_COMPLETION_INDEX=job-completions-index
环境变量
- Pod自动添加
- 设置了
.spec.completion
后,可以选择.spec.parallelism
控制并发度- completion设置为10,spec.parallelism设置3:Job在10个Pod成功之前, 尽量保持并发为3
工作对列
- 不指定
.spec.completions
,.spec.parallelism
设置为一个非负数 - 通过MQ方式管理工作对列,每个Pod独立工作,判断整个任务是否完成;一个Pod成功退出,Job结束,不创建新的Pod
索引Job
通过设置Indexed Pod
自定义Pod失效策略
Pod FailurePolicy 是1.25新增的alpha特性,描述了失败的Pod如何Backofflimt
- 背景:运行多节点的多Pod的Job需要设置Pod重启,实现基础设施故障问题;传统的K8s使用Backofflimte>0策略,会直接导致所有的Pod重启,造成资源浪费
- 允许一些基础设施引发的Pod问题,在不增加Backofflimt计数期的情况下,重试
好处:
- 避免不必要的Pod重启
- 避免Pod的干扰(如抢占、API发起的驱逐或者基于污点的驱逐)造成Job失败
- Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/batch/v1/types.go#L169
// PodFailurePolicyRule describes how a pod failure is handled when the requirements are met. |
已经完成Job的TTL机制
Job默认删除策略:OrphanDependents,K8s会保留这些Pod
设置Job的TTLSecondsAffterFinished字段,TTL会自动清理已经结束的资源
- 删除Job对象,会级联删除依赖的对象
- 如果设置为0,Job完成之后立即自动删除
- 不设置不会自动删除
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论