作业

Job 表示单个作业的配置。

apiVersion: batch/v1

import "k8s.io/api/batch/v1"

作业

Job 表示单个作业的配置。


JobSpec

JobSpec 描述了作业执行时的样子。


副本数

生命周期

  • completions (int32)

    指定作业应成功完成的 Pod 的期望数量。设置为 null 意味着任何 Pod 的成功都标志着所有 Pod 的成功,并允许并行度具有任何正值。设置为 1 意味着并行度限制为 1,并且该 Pod 的成功标志着作业的成功。更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/

  • completionMode (string)

    completionMode 指定了如何跟踪 Pod 的完成情况。它可以是 NonIndexed(默认)或 Indexed

    NonIndexed 意味着当存在 .spec.completions 个成功完成的 Pod 时,Job 被视为完成。每个 Pod 的完成彼此同质。

    Indexed 意味着 Job 的 Pod 会获得一个关联的完成索引,范围从 0 到 (.spec.completions - 1),该索引可在注解 batch.kubernetes.io/job-completion-index 中找到。当每个索引都有一个成功完成的 Pod 时,Job 被视为完成。当值为 Indexed 时,必须指定 .spec.completions,并且 .spec.parallelism 必须小于或等于 10^5。此外,Pod 名称的形式为 $(job-name)-$(index)-$(random-string),Pod 主机名的形式为 $(job-name)-$(index)

    未来可能会添加更多完成模式。如果 Job 控制器观察到它无法识别的模式(这在升级过程中由于版本偏差可能发生),控制器会跳过该 Job 的更新。

  • backoffLimit (int32)

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

  • activeDeadlineSeconds (int64)

    指定作业相对于 startTime 可以持续活动的秒数,之后系统会尝试终止它;该值必须为正整数。如果 Job 被挂起(在创建时或通过更新),则此计时器会有效停止,并在 Job 再次恢复时重置。

  • ttlSecondsAfterFinished (int32)

    ttlSecondsAfterFinished 限制了已完成执行(Complete 或 Failed)的 Job 的生命周期。如果设置了此字段,Job 完成后经过 ttlSecondsAfterFinished 秒,它就可以被自动删除。Job 被删除时,其生命周期保证(例如 Finalizers)将被遵循。如果未设置此字段,Job 将不会被自动删除。如果此字段设置为零,Job 在完成后立即具备被删除的资格。

  • suspend (boolean)

    suspend 指定 Job 控制器是否应创建 Pod。如果创建 Job 时 suspend 设置为 true,则 Job 控制器不会创建 Pod。如果在创建后暂停 Job(即标志从 false 变为 true),Job 控制器将删除与此 Job 相关的所有活跃 Pod。用户必须设计其工作负载以优雅地处理此情况。暂停 Job 将重置 Job 的 StartTime 字段,同时也会有效地重置 ActiveDeadlineSeconds 计时器。默认为 false。

选择器

Beta 级别

  • podFailurePolicy (PodFailurePolicy)

    指定处理失败 Pod 的策略。特别是,它允许指定需要满足的操作集和条件才能执行关联的操作。如果为空,则应用默认行为 - 表示 Job 的 .status.failed 字段的失败 Pod 计数器会增加,并对照 backoffLimit 进行检查。此字段不能与 restartPolicy=OnFailure 结合使用。

    PodFailurePolicy 描述了失败的 Pod 如何影响 backoffLimit。

    • podFailurePolicy.rules ([]PodFailurePolicyRule),必需

      原子性:合并期间将被替换

      Pod 失败策略规则列表。规则按顺序评估。一旦某个规则与 Pod 失败匹配,剩余规则将被忽略。如果没有规则与 Pod 失败匹配,则应用默认处理 - 失败 Pod 的计数器会增加,并对照 backoffLimit 进行检查。最多允许 20 个元素。

      PodFailurePolicyRule 描述了当满足要求时如何处理 Pod 失败。在每个规则中,可以使用 onExitCodes 或 onPodConditions 中的一个,但不能同时使用两者。

      • podFailurePolicy.rules.action (string),必需

        指定满足要求时针对 Pod 失败采取的操作。可能的值为:

        • FailJob: 表示 Pod 的 Job 被标记为 Failed,并且所有正在运行的 Pod 被终止。
        • FailIndex: 表示 Pod 的索引被标记为 Failed,并且不会被重启。
        • Ignore: 表示不会增加 .backoffLimit 的计数器,并会创建一个替换 Pod。
        • Count: 表示 Pod 以默认方式处理 - .backoffLimit 的计数器会增加。未来可能会添加其他值。客户端应通过跳过规则来响应未知操作。
      • podFailurePolicy.rules.onExitCodes (PodFailurePolicyOnExitCodesRequirement)

        表示对容器退出码的要求。

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

        • podFailurePolicy.rules.onExitCodes.operator (string),必需

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

          • In: 如果至少一个容器退出码(如果存在多个不受 'containerName' 字段限制的容器,则可能存在多个)在指定的值集中,则满足要求。
          • NotIn: 如果至少一个容器退出码(如果存在多个不受 'containerName' 字段限制的容器,则可能存在多个)不在指定的值集中,则满足要求。未来可能会添加其他值。客户端应通过假设要求不满足来响应未知运算符。
        • podFailurePolicy.rules.onExitCodes.values ([]int32),必需

          集合:合并期间将保留唯一值

          指定值集。每个返回的容器退出码(如果存在多个容器,可能存在多个)将根据运算符对照此值集进行检查。值列表必须有序且不能包含重复项。值 '0' 不能用于 In 运算符。至少需要一个元素。最多允许 255 个元素。

        • podFailurePolicy.rules.onExitCodes.containerName (string)

          将退出码检查限制到具有指定名称的容器。当为 null 时,规则适用于所有容器。指定时,应匹配 Pod 模板中的某个容器或 initContainer 名称。

      • podFailurePolicy.rules.onPodConditions ([]PodFailurePolicyOnPodConditionsPattern)

        原子性:合并期间将被替换

        表示对 Pod 条件的要求。该要求表示为 Pod 条件模式列表。如果至少一个模式匹配实际的 Pod 条件,则满足要求。最多允许 20 个元素。

        PodFailurePolicyOnPodConditionsPattern 描述了用于匹配实际 Pod 条件类型的模式。

        • podFailurePolicy.rules.onPodConditions.status (string),必需

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

        • podFailurePolicy.rules.onPodConditions.type (string),必需

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

  • successPolicy (SuccessPolicy)

    successPolicy 指定 Job 何时可以被声明为成功。如果为空,则应用默认行为 - 只有当成功 Pod 的数量等于 completions 时,Job 才被声明为成功。当指定该字段时,它必须是不可变的,并且仅适用于 Indexed Job。一旦 Job 满足 SuccessPolicy,剩余的 Pod 将被终止。

    SuccessPolicy 描述了 Job 何时可以根据某些索引的成功被声明为成功。

    • successPolicy.rules ([]SuccessPolicyRule),必需

      原子性:合并期间将被替换

      rules 表示在 .status.succeeded >= .spec.completions 之前声明 Job 成功的替代规则列表。一旦满足任何规则,就会添加 "SucceededCriteriaMet" 条件,并删除剩余的 Pod。此类 Job 的终止状态具有 "Complete" 条件。此外,这些规则按顺序评估;一旦 Job 满足其中一条规则,其他规则将被忽略。最多允许 20 个元素。

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

      • successPolicy.rules.succeededCount (int32)

        succeededCount 指定 Job 实际成功索引集的最小所需大小。当 succeededCount 与 succeededIndexes 一起使用时,检查仅限于 succeededIndexes 指定的索引集。例如,假设 succeededIndexes 为 "1-4",succeededCount 为 "3",已完成的索引为 "1"、"3" 和 "5",则 Job 不会被声明为成功,因为在该规则中仅考虑了索引 "1" 和 "3"。当此字段为 null 时,它没有默认值,并且在任何时候都不会被评估。指定时,它必须是一个正整数。

      • successPolicy.rules.succeededIndexes (string)

        succeededIndexes 指定 Job 实际成功索引集中需要包含的索引集合。索引列表必须在 0 到 ".spec.completions-1" 之间,并且不能包含重复项。至少需要一个元素。索引表示为逗号分隔的区间。区间可以是十进制整数,也可以是用连字符分隔的一对十进制整数。这些数字表示为序列的第一个和最后一个元素,用连字符分隔。例如,如果已完成的索引是 1、3、4、5 和 7,则表示为 "1,3-5,7"。当此字段为 null 时,此字段没有默认值,并且在任何时候都不会被评估。

Alpha 级别

  • backoffLimitPerIndex (int32)

    指定在将索引标记为失败之前,该索引内的重试次数限制。启用时,每个索引的失败次数保存在 Pod 的 batch.kubernetes.io/job-index-failure-count 注解中。它只能在 Job 的 completionMode=Indexed 且 Pod 的重启策略为 Never 时设置。该字段是不可变的。

  • managedBy (string)

    ManagedBy 字段表示管理 Job 的控制器。k8s Job 控制器协调完全没有此字段或字段值为保留字符串 kubernetes.io/job-controller 的 Job,但跳过协调对此字段具有自定义值的 Job。该值必须是有效的域前缀路径(例如 acme.io/foo)- 第一个 "/" 之前的所有字符必须是符合 RFC 1123 定义的有效子域。第一个 "/" 之后的所有字符必须是符合 RFC 3986 定义的有效 HTTP 路径字符。该值不能超过 63 个字符。此字段是不可变的。

    此字段为 beta 级别。当特性门控 JobManagedBy 启用时(默认启用),Job 控制器接受设置该字段。

  • maxFailedIndexes (int32)

    当设置了 backoffLimitPerIndex 时,指定在将 Job 标记为失败之前允许的最大失败索引数。一旦失败索引数超过此值,整个 Job 将被标记为 Failed,其执行将被终止。当留空时,Job 继续执行其所有索引,并被标记为 Complete Job 条件。它只能在设置了 backoffLimitPerIndex 时指定。它可以为 null 或不大于 completions。当 completions 大于 10^5 时,此字段是必需的,且必须小于或等于 10^4。

  • podReplacementPolicy (string)

    podReplacementPolicy 指定何时创建替换 Pod。可能的值为:- TerminatingOrFailed 意味着当 Pod 正在终止(具有 metadata.deletionTimestamp)或失败时,我们重新创建 Pod。

    • Failed 意味着在创建替换 Pod 之前,等待先前创建的 Pod 完全终止(具有 Failed 或 Succeeded 阶段)。

    使用 podFailurePolicy 时,Failed 是唯一允许的值。未使用 podFailurePolicy 时,TerminatingOrFailed 和 Failed 都是允许的值。这是一个 beta 字段。要使用它,请启用 JobPodReplacementPolicy 特性开关。此开关默认开启。

JobStatus

JobStatus 表示 Job 的当前状态。


  • startTime (Time)

    表示 Job 控制器开始处理 Job 的时间。当 Job 在挂起状态下创建时,此字段直到第一次恢复时才设置。每次从挂起状态恢复 Job 时,此字段都会重置。它采用 RFC3339 格式表示,时区为 UTC。

    一旦设置,此字段只能在 Job 挂起时移除。Job 未挂起或完成时,此字段不能修改。

    Time 是 time.Time 的一个包装器,支持正确地序列化为 YAML 和 JSON。提供了许多 time 包提供的工厂方法的包装器。

  • completionTime (Time)

    表示作业完成的时间。不能保证它在独立操作中按照 happens-before 顺序设置。它采用 RFC3339 格式表示,时区为 UTC。仅当作业成功完成时,才会设置完成时间。该值不能更新或移除。该值指示的时间点与 startTime 字段相同或晚于 startTime 字段。

    Time 是 time.Time 的一个包装器,支持正确地序列化为 YAML 和 JSON。提供了许多 time 包提供的工厂方法的包装器。

  • active (int32)

    未终止(没有 deletionTimestamp)的 Pending 和 Running 状态的 Pod 数量。对于已完成的 Job,该值为零。

  • failed (int32)

    达到 Failed 阶段的 Pod 数量。该值单调递增。

  • succeeded (int32)

    达到 Succeeded 阶段的 Pod 数量。对于给定的 spec,该值单调递增。然而,它可能会因弹性索引作业的缩减而减少。

  • completedIndexes (string)

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

  • conditions ([]JobCondition)

    Patch 策略:按键 type 合并

    原子性:合并期间将被替换

    对象当前状态的最新可用观察结果。当 Job 失败时,其中一个条件将具有类型 "Failed" 且状态为 true。当 Job 挂起时,其中一个条件将具有类型 "Suspended" 且状态为 true;当 Job 恢复时,此条件的状态将变为 false。当 Job 完成时,其中一个条件将具有类型 "Complete" 且状态为 true。

    当 Job 处于终止条件("Complete" 或 "Failed")时,被视为完成。Job 不能同时具有 "Complete" 和 "Failed" 条件。此外,它不能同时处于 "Complete" 和 "FailureTarget" 条件。 "Complete"、"Failed" 和 "FailureTarget" 条件不能被禁用。

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

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

    • conditions.status (string),必需

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

    • conditions.type (string),必需

      作业条件类型,Complete 或 Failed。

    • conditions.lastProbeTime (Time)

      上次检查条件的时间。

      Time 是 time.Time 的一个包装器,支持正确地序列化为 YAML 和 JSON。提供了许多 time 包提供的工厂方法的包装器。

    • conditions.lastTransitionTime (Time)

      条件上次从一种状态转换为另一种状态的时间。

      Time 是 time.Time 的一个包装器,支持正确地序列化为 YAML 和 JSON。提供了许多 time 包提供的工厂方法的包装器。

    • conditions.message (string)

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

    • conditions.reason (string)

      条件上次转换的(简要)原因。

  • uncountedTerminatedPods (UncountedTerminatedPods)

    uncountedTerminatedPods 保存已终止但 Job 控制器尚未计入状态计数器的 Pod 的 UID。

    Job 控制器创建带有 finalizer 的 Pod。当 Pod 终止(成功或失败)时,控制器执行三个步骤将其计入 Job 状态:

    1. 将 Pod UID 添加到此字段的数组中。2. 移除 Pod finalizer。3. 从数组中移除 Pod UID,同时增加相应的计数器。

    旧的 Job 可能未使用此字段进行跟踪,在这种情况下,该字段仍然为 null。对于已完成的 Job,该结构为空。

    UncountedTerminatedPods 保存已终止但尚未计入 Job 状态计数器的 Pod 的 UID。

    • uncountedTerminatedPods.failed ([]string)

      集合:合并期间将保留唯一值

      failed 保存失败 Pod 的 UID。

    • uncountedTerminatedPods.succeeded ([]string)

      集合:合并期间将保留唯一值

      succeeded 保存成功 Pod 的 UID。

Beta 级别

  • ready (int32)

    具有 Ready 条件且未终止(没有 deletionTimestamp)的活跃 Pod 数量。

Alpha 级别

  • failedIndexes (string)

    FailedIndexes 保存设置 spec.backoffLimitPerIndex 时的失败索引。索引的文本格式与 completedIndexes 字段类似,即它们以逗号分隔的十进制整数形式保存。数字按递增顺序列出。连续三个或更多数字会被压缩,表示为序列的第一个和最后一个元素,用连字符分隔。例如,如果失败的索引是 1、3、4、5 和 7,则表示为 "1,3-5,7"。失败索引集不能与已完成索引集重叠。

  • terminating (int32)

    正在终止(处于 Pending 或 Running 阶段且具有 deletionTimestamp)的 Pod 数量。

    此字段为 beta 级别。当特性门控 JobPodReplacementPolicy 启用时(默认启用),Job 控制器填充该字段。

JobList

JobList 是 Job 的集合。


操作


get 读取指定的 Job

HTTP 请求

GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • pretty (in query): string

    pretty

响应

200 (Job): OK

401: Unauthorized

get 读取指定 Job 的状态

HTTP 请求

GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • pretty (in query): string

    pretty

响应

200 (Job): OK

401: Unauthorized

list 列出或监视类型为 Job 的对象

HTTP 请求

GET /apis/batch/v1/namespaces/{namespace}/jobs

参数

响应

200 (JobList): OK

401: Unauthorized

list 列出或监视类型为 Job 的对象

HTTP 请求

GET /apis/batch/v1/jobs

参数

响应

200 (JobList): OK

401: Unauthorized

create 创建一个 Job

HTTP 请求

POST /apis/batch/v1/namespaces/{namespace}/jobs

参数

响应

200 (Job): OK

201 (Job): Created

202 (Job): Accepted

401: Unauthorized

update 替换指定的 Job

HTTP 请求

PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • body: Job,必需

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • pretty (in query): string

    pretty

响应

200 (Job): OK

201 (Job): Created

401: Unauthorized

update 替换指定 Job 的状态

HTTP 请求

PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • body: Job,必需

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • pretty (in query): string

    pretty

响应

200 (Job): OK

201 (Job): Created

401: Unauthorized

patch 部分更新指定的 Job

HTTP 请求

PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • body: Patch,必需

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

响应

200 (Job): OK

201 (Job): Created

401: Unauthorized

patch 部分更新指定 Job 的状态

HTTP 请求

PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status

参数

  • name (in path): string,必需

    Job 名称

  • namespace (in path): string,必需

    namespace

  • body: Patch,必需

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

响应

200 (Job): OK

201 (Job): Created

401: Unauthorized

delete 删除一个 Job

HTTP 请求

DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name}

参数

响应

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection 删除 Job 集合

HTTP 请求

DELETE /apis/batch/v1/namespaces/{namespace}/jobs

参数

响应

200 (Status): OK

401: Unauthorized

此页面是自动生成的。

如果你打算报告此页面的问题,请在问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

最后修改于 太平洋标准时间 2025 年 4 月 24 日上午 9:14:v1.33 的 Markdown API 参考 (b84ec30bbb)