第 13 章 Job [batch/v1]


描述
Job 代表单个作业的配置。
类型
对象

13.1. 规格

属性类型描述

apiVersion

字符串

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

字符串

kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

ObjectMeta

标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

spec

object

JobSpec 描述作业执行的方式。

status

object

JobStatus 代表作业的当前状态。

13.1.1. .spec

描述
JobSpec 描述作业执行的方式。
类型
object
必填
  • 模板
属性类型描述

activeDeadlineSeconds

整数

指定与 startTime 相关的持续时间(以秒为单位),作业可能会在系统尝试终止它前持续激活;值必须是正整数。如果作业被挂起(在创建或通过更新时),则当作业再次恢复时,此计时器将有效停止并重置。

backoffLimit

整数

指定在标记此作业失败前重试次数。默认值为 6

backoffLimitPerIndex

整数

指定索引在将索引标记为失败前在索引中重试次数的限制。当启用每个索引的失败次数时,pod 的 batch.kubernetes.io/job-index-failure-count 注解会保持在 pod 的 batch.kubernetes.io/job-index-failure-count 注解中。只有在作业的 completionMode=Indexed 且 Pod 的重启策略为 Never 时,才能设置它。该字段是不可变的。此字段是 beta 级别。当启用 JobBackoffLimitPerIndex 功能门时(默认启用)时,可以使用它。

completionMode

string

completionMode 指定 Pod 完成的跟踪方式。它可以是 NonIndexed (默认)或 Indexed

NonIndexed 表示当 .spec.completions 成功完成 Pod 时,作业被视为已完成。每个 Pod 完成都相互同动。

索引 表示作业的 Pod 从 0 到(.spec.completions - 1),注解 batch.kubernetes.io/job-completion-index 提供。当每个索引都有一个成功完成 Pod 时,作业被视为已完成。当值为 Indexed 时,必须指定 .spec.completions,并且 .spec.parallelism 必须小于或等于 10^5。另外,Pod 名称采用 $(job-name)-$(index)-$(random-string) 的形式,Pod 主机名采用 $(job-name)-$(index) 的形式。

以后可以添加更多完成模式。如果作业控制器观察到没有识别的模式,则控制器会因为版本 skew 而导致升级,则控制器会跳过作业的更新。

可能枚举值: - "Indexed" 是一个作业完成模式。在此模式中,作业的 Pod 从 0 到(.spec.completions - 1)获取关联的完成索引。当 Pod 完成每个完成索引后,作业被视为已完成。- "NonIndexed" 是一个作业完成模式。在这个模式中,当 .spec.completions 成功完成 Pod 时,作业被视为已完成。Pod 完成相互同动。

completions

整数

指定作业应该运行成功完成的 pod 数量。将 设置为 null 意味着,任何 pod 成功都会提示所有 pod 成功,并允许并行( parallelism)具有任何正数的值。设置为 1 表示并行性限制为 1,pod 的成功会通知作业成功。更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

managedBy

string

ManagedBy 字段显示管理作业的控制器。k8s 作业控制器协调没有此字段的作业,或者字段值是保留字符串 kubernetes.io/job-controller,但跳过将作业与此字段的自定义值协调。该值必须是有效的域前缀路径(如 acme.io/foo)- 在第一个"/"前的所有字符都必须是 RFC 1123 定义的有效子域。结尾第一个"/"的所有字符都必须是 RFC 3986 定义的有效 HTTP 路径字符。值不能超过 64 个字符。

此字段是 alpha-level。当功能门 JobManagedBy 被启用(默认为禁用)时,作业控制器接受设置字段。

manualSelector

布尔值

manualSelector 控制 pod 标签和 pod 选择器的生成。除非您确定正在执行的操作,否则请保留 manualSelector。如果为 false 或未设置,系统会选择此作业的唯一标签,并将这些标签附加到 pod 模板。为 true 时,用户负责选择唯一标签并指定选择器。无法选择唯一标签可能会导致此和其他作业无法正常工作。但是,在使用旧 extensions/v1beta1 API 创建的作业中看到 manualSelector=true。更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector

maxFailedIndexes

整数

当设置了 backoffLimitPerIndex 时,在将作业标记为失败前指定失败索引的最大数量。当失败的索引数量超过这个数字后,整个作业都会标记为 Failed,其执行将被终止。当保留为 null 时,作业将继续执行其所有索引,并标记为 Complete 作业条件。只有在设置了 backoffLimitPerIndex 时,才能指定它。它可以是 null,也可以是 up to completions。它是必需的,且在完成大于 10^5 时必须小于或等于 10^4。此字段是 beta 级别。当启用 JobBackoffLimitPerIndex 功能门时(默认启用)时,可以使用它。

parallelism

整数

指定作业应在任意给定时间运行的最大 pod 数量。当(.spec.completions - .status.successful)< .spec.parallelism)< .spec.parallelism)时,以 steady 状态运行的 pod 的实际数量将小于这个数字。更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

podFailurePolicy

object

PodFailurePolicy 描述了 pod 失败会影响 backoffLimit。

podReplacementPolicy

string

podReplacementPolicy 指定何时创建替换 Pod。可能的值有: - TerminatingOrFailed 表示,我们在终止时重新创建 pod (带有 metadata.deletionTimestamp)或失败。- Failed 表示在创建替换 Pod 前等待到之前创建的 Pod 完全终止(has phase Failed 或 Succeeded)。

使用 podFailurePolicy 时,Failed 是唯一允许的值。当 podFailurePolicy 没有使用时,允许 TerminatingOrFailed 和 Failed。这是 beta 字段。要使用此功能,请启用 JobPodReplacementPolicy 功能切换。默认为开启。

可能枚举值:- "Failed" 用于在创建替换 Pod 前等待之前创建的 Pod 完全终止(has phase Failed 或 Succeeded)。- "TerminatingOrFailed" 意味着,我们在终止时重新创建 pod (获取 metadata.deletionTimestamp)或失败。

selector

LabelSelector

与 pod 数量匹配的 pod 的标签查询。通常,系统会为您设置此字段。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors

successPolicy

object

SuccessPolicy 描述了根据某些索引成功声明作业成功的时间。

suspend

布尔值

suspend 指定作业控制器是否应该创建 Pod。如果创建一个作业,并将 suspend 设为 true,则作业控制器不会创建 Pod。如果在创建后暂停某个作业(例如,标志从 false 变为 true),则作业控制器将删除与此作业关联的所有活动 Pod。用户必须设计自己的工作负载才能正常处理。暂停作业将重置作业的 StartTime 字段,从而有效地重置 ActiveDeadlineSeconds 计时器。默认为false。

模板

PodTemplateSpec

描述在执行作业时将创建的 pod。唯一允许的 template.spec.restartPolicy 值是 "Never" 或 "OnFailure"。更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

ttlSecondsAfterFinished

整数

ttlSecondsAfterFinished 限制已完成执行( Complete 或 Failed)的作业的生命周期。如果设置了此字段,ttlSecondsAfterFinished 在作业完成后,它可以被自动删除。当作业被删除时,其生命周期保证(如终结器)将会被遵守。如果未设置此字段,则不会自动删除作业。如果此字段设为零,则作业在完成后将立即删除。

13.1.2. .spec.podFailurePolicy

描述
PodFailurePolicy 描述了 pod 失败会影响 backoffLimit。
类型
object
必填
  • rules
属性类型描述

rules

数组

Pod 失败策略规则列表。规则按顺序评估。当规则与 Pod 故障匹配后,其余的规则将被忽略。如果没有与 Pod 故障匹配的规则,则应用默认处理 - pod 故障的计数器会递增,并针对 backoffLimit 检查。最多允许 20 个元素。

rules[]

object

PodFailurePolicyRule 描述了在满足要求时如何处理 pod 失败。每个规则都可以使用 onExitCodes 和 onPodConditions 中的一个。

13.1.3. .spec.podFailurePolicy.rules

描述
Pod 失败策略规则列表。规则按顺序评估。当规则与 Pod 故障匹配后,其余的规则将被忽略。如果没有与 Pod 故障匹配的规则,则应用默认处理 - pod 故障的计数器会递增,并针对 backoffLimit 检查。最多允许 20 个元素。
类型
数组

13.1.4. .spec.podFailurePolicy.rules[]

描述
PodFailurePolicyRule 描述了在满足要求时如何处理 pod 失败。每个规则都可以使用 onExitCodes 和 onPodConditions 中的一个。
类型
object
必填
  • action
属性类型描述

action

string

指定满足要求时 pod 故障执行的操作。可能的值有:

- FailJob: 表示 pod 的作业标记为 Failed,所有运行的 pod 都被终止。- FailIndex: 表示 pod 的索引标记为 Failed,且不会重启。这个值是 beta 级别。当启用 JobBackoffLimitPerIndex 功能门时,可以使用它。- Ignore: 表示对 .backoffLimit 的计数器没有被递增,并创建了替换 pod。- Count: 表示 pod 被默认处理 - .backoffLimit 的计数器会递增。以后会考虑添加额外的值。客户端应通过跳过规则来响应未知操作。

可能枚举值: - "Count" 是一个在 pod 失败时执行的操作 - pod 失败以默认方式处理 - 计数器到 .backoffLimit,由作业的 .status.failed 字段表示,会递增。- "FailIndex" 是 pod 故障的操作,可能在 pod 失败时执行 - 将作业的索引标记为失败,以避免在这个索引中重启。只有在设置了 backoffLimitPerIndex 时,才可以使用此操作。这个值是 beta-level。- "FailJob" 这是可能在 pod 失败时执行的操作 - 将 pod 的作业标记为 Failed,终止所有运行的 pod。- "Ignore" 这是可能在 pod 故障上执行的操作 - 对 .backoffLimit 的计数器(由作业的 .status.failed 字段表示)不会被递增,并创建了替换 pod。

onExitCodes

object

PodFailurePolicyOnExitCodesRequirement 描述了根据容器退出代码处理失败 pod 的要求。特别是,它会分别查找每个应用程序容器和 init 容器状态的 .state.terminated.exitCode,分别由 Pod 状态中的 .status.containerStatuses 和 .status.initContainerStatuses 字段显示。成功完成的容器(退出代码 0)不包括在要求检查中。

onPodConditions

数组

代表 pod 条件的要求。要求以 pod 条件模式列表表示。如果至少有一个模式与实际的 pod 条件匹配,则满足要求。最多允许 20 个元素。

onPodConditions[]

object

PodFailurePolicyOnPodConditionsPattern 描述了与实际 pod 条件类型匹配的模式。

13.1.5. .spec.podFailurePolicy.rules[].onExitCodes

描述
PodFailurePolicyOnExitCodesRequirement 描述了根据容器退出代码处理失败 pod 的要求。特别是,它会分别查找每个应用程序容器和 init 容器状态的 .state.terminated.exitCode,分别由 Pod 状态中的 .status.containerStatuses 和 .status.initContainerStatuses 字段显示。成功完成的容器(退出代码 0)不包括在要求检查中。
类型
object
必填
  • operator
  • values
属性类型描述

containerName

string

使用指定名称将退出代码限制为容器。当为 null 时,该规则适用于所有容器。指定后,它应当与 pod 模板中的一个容器或 initContainer 名称匹配。

operator

string

代表容器退出代码和指定的值之间的关系。成功完成的容器(退出代码 0)不包括在要求检查中。可能的值有:

- in: 如果至少有一个容器退出代码(如果多个容器没有被 'containerName' 字段限制)位于指定的值集合中,则满足要求。- 如果至少一个容器退出代码(如果多个容器没有被 'containerName' 字段限制),则要求会满足。以后会考虑添加额外的值。假设不满足要求,客户端应该对未知操作器做出反应。

可能枚举值: - "In" - "NotIn"

values

数组(整数)

指定一组值。每个返回的容器退出代码(如果有多个容器)都会针对于 Operator 相关的一组值进行检查。值列表必须排序,且不得包含重复值。值 '0' 不能用于 In operator。至少需要一个元素。最多允许 255 个元素。

13.1.6. .spec.podFailurePolicy.rules[].onPodConditions

描述
代表 pod 条件的要求。要求以 pod 条件模式列表表示。如果至少有一个模式与实际的 pod 条件匹配,则满足要求。最多允许 20 个元素。
类型
数组

13.1.7. .spec.podFailurePolicy.rules[].onPodConditions[]

描述
PodFailurePolicyOnPodConditionsPattern 描述了与实际 pod 条件类型匹配的模式。
类型
object
必填
  • type
  • status
属性类型描述

status

string

指定所需的 Pod 条件状态。要匹配 pod 条件,需要指定的状态等于 pod 条件状态。默认值为 True。

type

string

指定所需的 Pod 条件类型。要匹配 pod 条件,需要指定类型等于 pod 条件类型。

13.1.8. .spec.successPolicy

描述
SuccessPolicy 描述了根据某些索引成功声明作业成功的时间。
类型
object
必填
  • rules
属性类型描述

rules

数组

规则代表了在 . status.succeededed >= .spec.completions 之前声明作业的替代规则列表。满足任何规则后,会添加 "SucceededCriteriaMet" 条件,并删除闲置 pod。此类作业的终端状态具有"Complete"条件。此外,这些规则按顺序评估;在作业满足其中一个规则后,会忽略其他规则。最多允许 20 个元素。

rules[]

object

SuccessPolicyRule 描述了将作业声明成功的规则。每个规则必须至少指定了 "succeededIndexes" 或 "succeededCount"。

13.1.9. .spec.successPolicy.rules

描述
规则代表了在 . status.succeededed >= .spec.completions 之前声明作业的替代规则列表。满足任何规则后,会添加 "SucceededCriteriaMet" 条件,并删除闲置 pod。此类作业的终端状态具有"Complete"条件。此外,这些规则按顺序评估;在作业满足其中一个规则后,会忽略其他规则。最多允许 20 个元素。
类型
数组

13.1.10. .spec.successPolicy.rules[]

描述
SuccessPolicyRule 描述了将作业声明成功的规则。每个规则必须至少指定了 "succeededIndexes" 或 "succeededCount"。
类型
object
属性类型描述

succeededCount

整数

succeededCount 指定作业成功索引集合的最小所需大小。当 succeededCount 与 succeededIndexes 一起使用时,检查只限制为 succeededIndexes 指定的索引集合。例如,如果 succeededIndexes 为 "1-4",则 succeededCount 为 "3",完成的索引为 "1", "3", 和 "5",则作业不会被声明为成功,因为仅考虑 "1" 和 "3" 索引。当此字段为 null 时,它不会默认为任何值,永远不会随时评估。当指定时,它需要是一个正整数。

succeededIndexes

string

succeededIndexes 指定需要包含在作业的成功索引集合中的索引集合。索引列表必须在 0 到 ".spec.completions-1" 中,且不得包含重复项。至少需要一个元素。索引以以逗号分开的间隔表示。间隔可以是十进制整数,也可以是以连字符分隔的十进制整数。数字列在一系列的第一个和最后一个元素中,用连字符分开。例如,如果完成的索引是 1, 3, 4, 5 和 7,它们表示为 "1,3-5,7"。当此字段为 null 时,此字段不默认为任何值,永远不会在任何时候评估。

13.1.11. .status

描述
JobStatus 代表作业的当前状态。
类型
object
属性类型描述

active

整数

未终止的待处理和运行的 pod 数量(没有 deletionTimestamp)。完成的作业的值为零。

completedIndexes

string

当 .spec.completionMode = "Indexed" 采用文本格式时,completedIndexes 包含已完成的索引。索引以十进制整数表示,以逗号分开。数字以增加的顺序列出。三个或更多连续的数字会被压缩,由一系列的第一个和最后一个元素代表,用连字符隔开。例如,如果完成的索引是 1, 3, 4, 5 和 7,它们表示为 "1,3-5,7"。

completionTime

时间

表示作业完成的时间。无法保证在单独的操作之间按顺序设置。它以 RFC3339 格式表示,并以 UTC 表示。完成时间会在作业成功完成时设置,然后只设置。该值不能更新或删除。该值表示与 startTime 字段相同的或者之后的时间点。

conditions

数组

对象当前状态的最新可用影响。当作业失败时,其中一个条件将具有类型 "Failed" 和 status true。当作业被暂停时,其中一个条件类型为 "Suspended" 和 status true;当作业被恢复时,此条件的状态将变为 false。作业完成后,其中一个条件将键入 "Complete" 和 status true。

作业在终端条件中被视为已完成,可以是 "Complete" 或 "Failed"。一个作业不能同时具有 "Complete" 和 "Failed" 条件。另外,它不能处于 "Complete" 和 "FailureTarget" 条件。无法禁用 "Complete", "Failed" 和 "FailureTarget" 条件。

更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

conditions[]

object

JobCondition 描述了作业的当前状态。

失败

整数

达到阶段 Failed 的 pod 数量。该值会以 monoton 的方式增加。

failedIndexes

string

当设置了 spec.backoffLimitPerIndex 时,FailedIndexes 包含失败的索引。索引以文本格式表示,类似于 completedIndexes 字段 ie。它们被保留为以逗号分开的十进制整数。数字以增加的顺序列出。三个或更多连续的数字会被压缩,由一系列的第一个和最后一个元素代表,用连字符隔开。例如,如果失败的索引为 1, 3, 4, 5 和 7,它们表示为 "1,3-5,7"。失败的索引集合不能与一组完成的索引重叠。

此字段是 beta 级别。当启用 JobBackoffLimitPerIndex 功能门时(默认启用)时,可以使用它。

ready

整数

具有 Ready 条件的 pod 数量。

startTime

时间

代表作业控制器开始处理作业时。当作业以暂停状态创建时,不会设置此字段,直到在第一次恢复为止。每次从挂起中恢复作业时,都会重置此字段。它以 RFC3339 格式表示,并以 UTC 表示。

设置之后,只能在作业暂停时删除字段。在作业被取消或完成后,无法修改该字段。

succeeded

整数

达到阶段 Succeeded 的 pod 数量。该值会根据给定的 spec 递增 monoton。但是,可以降低对弹性索引作业进行缩减的响应。

Terminating

整数

终止的 pod 数量(处于 Pending 或 Running 状态,并具有 deletionTimestamp)。

此字段是 beta 级别。当启用了功能门 JobPodReplacementPolicy (默认启用)时,作业控制器会填充字段。

uncountedTerminatedPods

object

UncountedTerminatedPods 包含已终止但没有在作业状态计数器中考虑的 Pod 的 UID。

13.1.12. .status.conditions

描述

对象当前状态的最新可用影响。当作业失败时,其中一个条件将具有类型 "Failed" 和 status true。当作业被暂停时,其中一个条件类型为 "Suspended" 和 status true;当作业被恢复时,此条件的状态将变为 false。作业完成后,其中一个条件将键入 "Complete" 和 status true。

作业在终端条件中被视为已完成,可以是 "Complete" 或 "Failed"。一个作业不能同时具有 "Complete" 和 "Failed" 条件。另外,它不能处于 "Complete" 和 "FailureTarget" 条件。无法禁用 "Complete", "Failed" 和 "FailureTarget" 条件。

更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

类型
array

13.1.13. .status.conditions[]

描述
JobCondition 描述了作业的当前状态。
类型
object
必填
  • type
  • status
属性类型描述

lastProbeTime

时间

检查条件最后一次的时间。

lastTransitionTime

时间

条件从一个状态传输到另一个状态最后一次的时间。

message

字符串

人类可读的消息,指示最后一次转换的详细信息。

reason

字符串

(brief)条件最后一次转换的原因。

status

字符串

条件的状态,True, False, Unknown 之一。

type

string

作业状况的类型,完成或失败。

13.1.14. .status.uncountedTerminatedPods

描述
UncountedTerminatedPods 包含已终止但没有在作业状态计数器中考虑的 Pod 的 UID。
类型
object
属性类型描述

失败

数组(字符串)

Failed 包含失败 Pod 的 UID。

succeeded

数组(字符串)

Succeeded 包含成功 Pod 的 UID。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.