Job

Job 表示单个 Job 的配置。

apiVersion: batch/v1

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

Job

Job 表示单个 Job 的配置。


JobSpec

JobSpec 描述 Job 执行的外观。


副本

生命周期

  • completions (int32)

    指定 Job 应运行的成功完成的 Pod 的所需数量。设置为 null 表示任何 Pod 的成功都表示所有 Pod 的成功,并允许并行度具有任何正值。设置为 1 表示并行度限制为 1,并且该 Pod 的成功表示 Job 的成功。更多信息: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)

    指定在将此 Job 标记为失败之前重试的次数。默认为 6

  • activeDeadlineSeconds (int64)

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

  • ttlSecondsAfterFinished (int32)

    ttlSecondsAfterFinished 限制已完成执行的 Job 的生存期(无论是 Complete 还是 Failed)。如果设置此字段,则在 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 的策略。特别是,它允许指定一组操作和需要满足的条件才能采取关联的操作。如果为空,则应用默认行为 - 失败的 Pod 的计数器(由 Job 的 .status.failed 字段表示)会递增,并根据 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,并且不会重新启动。此值为 beta 级别。当启用 JobBackoffLimitPerIndex 特性门控(默认启用)时可以使用。
        • Ignore:表示不递增 .backoffLimit 的计数器,并且创建一个替换 Pod。
        • Count:表示以默认方式处理 Pod - 递增 .backoffLimit 的计数器。将来会考虑添加其他值。客户端应通过跳过规则来对未知操作做出反应。
      • podFailurePolicy.rules.onExitCodes (PodFailurePolicyOnExitCodesRequirement)

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

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

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

          表示容器退出代码与指定值之间的关系。成功完成的容器(退出代码为 0)将从需求检查中排除。可能的值为

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

          Set:在合并期间将保留唯一值

          指定值的集合。每个返回的容器退出代码(在多个容器的情况下可能有多个)都将根据操作符检查此值集合。值的列表必须是有序的,并且不能包含重复项。值 '0' 不能用于 In 操作符。至少需要一个元素。最多允许 255 个元素。

        • podFailurePolicy.rules.onExitCodes.containerName (string)

          将退出代码的检查限制为具有指定名称的容器。如果为空,则该规则适用于所有容器。如果指定,则应与 Pod 模板中的一个容器或 initContainer 名称匹配。

      • podFailurePolicy.rules.onPodConditions ([]PodFailurePolicyOnPodConditionsPattern)

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

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

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

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

          指定所需的 Pod 条件状态。要匹配 Pod 条件,需要指定的 status 与 Pod 条件状态相等。默认为 True。

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

          指定所需的 Pod 条件类型。要匹配 Pod 条件,需要指定的 type 与 Pod 条件类型相等。

  • successPolicy (SuccessPolicy)

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

    此字段为 Beta 级别。要使用此字段,必须启用 JobSuccessPolicy 功能门(默认启用)。

    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” 索引。当此字段为空时,它不会默认为任何值,并且永远不会在任何时间进行评估。当指定时,它需要是一个正整数。

      • successPolicy.rules.succeededIndexes (string)

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

Alpha 级别

  • backoffLimitPerIndex (int32)

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

  • managedBy (string)

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

    此字段为 Alpha 级别。当启用功能门 JobManagedBy 时(默认禁用),job 控制器接受设置该字段。

  • maxFailedIndexes (int32)

    指定在将 Job 标记为失败之前失败索引的最大数量(当设置了 backoffLimitPerIndex 时)。一旦失败的索引数量超过此数量,整个 Job 将被标记为失败,并终止其执行。如果保留为空,则 Job 将继续执行其所有索引,并标记为 Complete Job 条件。仅当设置了 backoffLimitPerIndex 时才能指定。它可以为空或最多等于 completions。当 completions 大于 10^5 时,它是必需的,并且必须小于或等于 10^4。此字段为 Beta 级别。当启用 JobBackoffLimitPerIndex 功能门时可以使用此字段(默认启用)。

  • 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)

    表示 job 完成的时间。不保证在单独操作之间按发生时间顺序设置。它以 RFC3339 格式表示,并且采用 UTC 时间。仅当 Job 成功完成时,才会设置完成时间。该值无法更新或删除。该值指示与 startTime 字段相同或以后的时间点。

    Time 是 time.Time 的包装器,它支持正确地编组到 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。

  • active (int32)

    正在等待和运行且未终止(没有 deletionTimestamp)的 Pod 的数量。对于已完成的 job,该值为零。

  • failed (int32)

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

  • succeeded (int32)

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

  • completedIndexes (string)

    当 .spec.completionMode = “Indexed” 时,completedIndexes 以文本格式保存已完成的索引。索引表示为以逗号分隔的十进制整数。这些数字按升序排列。三个或更多连续的数字将被压缩,并由系列的第一个和最后一个元素表示,以连字符分隔。例如,如果完成的索引为 1、3、4、5 和 7,则它们表示为 “1,3-5,7”。

  • conditions ([]JobCondition)

    修补策略:在键 type 上合并

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

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

    当 Job 处于终端条件(“Complete” 或 “Failed”)时,则认为 Job 已完成。Job 不能同时具有 “Complete” 和 “Failed” 条件。此外,它不能同时处于 “Complete” 和 “FailureTarget” 条件。不能禁用 “Complete”、“Failed” 和 “FailureTarget” 条件。

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

    JobCondition 描述 job 的当前状态。

    • conditions.status (string),必需

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

    • conditions.type (string),必需

      作业条件类型,完成或失败。

    • conditions.lastProbeTime (时间)

      上次检查条件的时间。

      Time 是 time.Time 的包装器,它支持正确地编组到 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。

    • conditions.lastTransitionTime (时间)

      上次条件从一个状态转换到另一个状态的时间。

      Time 是 time.Time 的包装器,它支持正确地编组到 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。

    • conditions.message (字符串)

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

    • conditions.reason (字符串)

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

  • uncountedTerminatedPods (UncountedTerminatedPods)

    uncountedTerminatedPods 保存已终止但作业控制器尚未在状态计数器中统计的 Pod 的 UID。

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

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

    旧的作业可能不使用此字段进行跟踪,在这种情况下,该字段将保持为空。 完成的作业的结构为空。

    UncountedTerminatedPods 保存已终止但尚未在作业状态计数器中统计的 Pod 的 UID。

    • uncountedTerminatedPods.failed ([]字符串)

      Set:在合并期间将保留唯一值

      failed 保存失败的 Pod 的 UID。

    • uncountedTerminatedPods.succeeded ([]字符串)

      Set:在合并期间将保留唯一值

      succeeded 保存成功的 Pod 的 UID。

Beta 级别

  • ready (int32)

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

Alpha 级别

  • failedIndexes (字符串)

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

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

  • terminating (int32)

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

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

JobList

JobList 是作业的集合。


操作


get 读取指定的作业

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

401: 未授权

get 读取指定作业的状态

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

401: 未授权

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

HTTP 请求

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

参数

响应

200 (JobList): OK

401: 未授权

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

HTTP 请求

GET /apis/batch/v1/jobs

参数

响应

200 (JobList): OK

401: 未授权

create 创建一个 Job

HTTP 请求

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

参数

响应

200 (Job): OK

201 (Job): 已创建

202 (Job): 已接受

401: 未授权

update 替换指定的作业

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Job, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

201 (Job): 已创建

401: 未授权

update 替换指定作业的状态

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Job, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

201 (Job): 已创建

401: 未授权

patch 部分更新指定的作业

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Patch, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

201 (Job): 已创建

401: 未授权

patch 部分更新指定作业的状态

HTTP 请求

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

参数

  • name (在路径中): 字符串, 必需

    作业的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Patch, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): 字符串

    pretty

响应

200 (Job): OK

201 (Job): 已创建

401: 未授权

delete 删除一个作业

HTTP 请求

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

参数

响应

200 (Status): OK

202 (Status): 已接受

401: 未授权

deletecollection 删除作业集合

HTTP 请求

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

参数

响应

200 (Status): OK

401: 未授权

此页面是自动生成的。

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

上次修改时间为太平洋标准时间 2024 年 8 月 28 日下午 6:01:更新 v1.31 的生成 API 参考 (8ba98c79c1)