kubernetes pod资源控制器(三)

本文详细介绍了Kubernetes Job控制器,主要用于调度一次性任务。内容涵盖并行作业的实现、如何控制并行度、Pod的后退策略以及作业的动态扩缩容。通过实例展示了串行和并行Job的配置,并解释了在不同场景下如何设置.spec.completions和.spec.parallelism。此外,还讨论了Job的失败策略和Pod重启规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8sJob控制器

Job控制器用于调度pod对象运行一次性任务(批处理脚本),容器中的进程在正常运行结束后不会重启,而是将pod对象置于completed状态,若容器中的进程因错误而终止,会根据配置确定是否重启,而未运行完成的pod对象因其所在的节点故障而意外终止后会被重新调度,Job的本质是确保一个或多个Pod健康地运行直至运行完毕

工作中有的作业肯需要运行多次,用户可以采用串行和并行的方式:
单工作队列的串行式job:以多个一次性的作业方式串行执行多次作业,直至满足期望的次数
多工作队列的并行式job:可以设置工作队列数(作业数),每个队列仅负责运行一个作业

串行job示例

apiVersion:batch/v1
kind: job
metadata:
  name: job-example
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: alpine
        command: ["/bin/sh", "-c", "sleep 120"]
      restartPolicy: Never
 注意:Pod重启策略默认为Always,对于job来说并不适用,需要重新设定Never或OnFailure

并行job示例

apiVersion: batch/v1
kind: job
metadata:
  name: job-multi
spec:
  completions: 5
简单说即job结束需要成功运行的pod次数
  parallelism: 2
简单说即job并行运行的pod数
  backoffLimit: 5
  activeDeadlineSeconds: 100
注:可选的持续时间(以秒为单位)
  template:
    spec:
      containers:
      - name: myjob
        image: alpine
        command: ["/bin/sh", "-c", "sleep 120"]
      restartPolicy: OnFailure
并行作业

适合作为作业运行的三种主要任务类型:

  • 非并行作业
通常,除非Pod发生故障,否则仅启动一个Pod。一旦Pod成功终止,作业即完成
  • 固定完成计数的并行作业:
1、为指定非零的正值.spec.completions

2、Job代表整体任务,并且在1到范围内的每个值都有一个成功的Pod时完成.spec.completions

3、尚未实现:每个Pod传递了1到范围内的不同索引.spec.completions
  • 具有工作队列的并行作业:
1、不指定.spec.completions,默认为.spec.parallelism

2、Pod必须在彼此之间或外部服务之间进行协调,以确定每个Pod应该如何处理。如:一个Pod可以从工作队列中获取最多N批的批处理

3、每个Pod都可以独立地确定其所有对等方是否都已完成,从而确定了整个Job,当作业中的任何 Pod成功终止时,不会创建新的Pod

4、至少一个Pod成功终止(所有Pod都终止),则作业成功完成

5、Pod成功退出,则其他Pod仍不应为此任务做任何工作或编写任何输出。他们都应该退出

对于非平行作业,可以不使用.spec.completions和.spec.parallelism,而两者均未设置时,均默认为1。

对于固定完成计数作业,应该设置.spec.completions为所需的完成数量,可以设置.spec.parallelism也可以不设置(默认为1)

注意:对于工作队列 Job,您必须保持未.spec.completions设置状态,并将其设置.spec.parallelism为非负整数

控制并行

可以将请求的并行度(.spec.parallelism)设置为任何非负值。如果未指定,则默认为1。如果将其指定为0,则作业将有效地暂停直到增加

出于多种原因,实际的并行性(随时运行的Pod数量)可能大于或小于请求的并行性:

  • 对于固定的完成计数作业,并行运行的吊舱的实际数量不会超过剩余的完成数量。.spec.parallelism有效地忽略的较高值。
  • 对于工作队列作业,任何Pod成功后都不会启动新的Pod 但是,其余Pod则可以完成。
  • 如果作业控制器是还没来得及反应。
  • 如果作业控制器由于任何原因(缺少ResourceQuota,缺少权限等)未能创建Pod,则可能是Pod少于请求的数量。
  • 作业控制器可能会由于同一作业中先前的过多Pod故障而限制新Pod的创建。
  • 如果Pod正常关闭,则需要花费一些时间才能停止。
Pod后退策略

在某些情况下,由于配置中的逻辑错误等原因,您需要在重试一定次数后使作业失败。为此,请设置.spec.backoffLimit为指定重试次数,然后再将作业视为失败。默认情况下,将退避限制设置为6。与作业相关联的失败Pod由Job控制器重​​新创建,且其指数退避延迟(10s,20s,40s…)限制为六分钟。如果在作业的下一个状态检查之前没有出现新的失败Pod,则会重置退避计数。

注意:版本1.12之前的Kubernetes版本仍然存在问题#54870
注意:如果作业具有restartPolicy = "OnFailure",请记住,一旦达到作业退避限制,运行作业的容器将被终止。这会使调试作业的可执行文件更加困难。我们建议restartPolicy = "Never"在调试作业或使用日志记录系统时进行设置 ,以确保不会因疏忽而丢失失败的作业的输出
扩容和缩容
job控制器的spec.parallelism定义的并行度表示同时运行的pod对象数,此属性值支持运行时调整从而改变其队列总数,实现扩容和缩容
后续高级请看官网文档,以上部分内容出自官方文档
https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值