作业
apiVersion: batch/v1
import "k8s.io/api/batch/v1"
作业
Job 表示单个作业的配置。
apiVersion: batch/v1
kind: Job
metadata (ObjectMeta)
标准对象的元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (JobSpec)
作业期望行为的规范。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status (JobStatus)
作业的当前状态。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
JobSpec
JobSpec 描述了作业的执行方式。
副本
template (PodTemplateSpec),必需
描述了执行作业时将要创建的 Pod。唯一允许的 template.spec.restartPolicy 值为 "Never" 或 "OnFailure"。更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/
parallelism (int32)
指定作业在任何给定时间应运行的最大期望 Pod 数量。当 ((.spec.completions - .status.successful) < .spec.parallelism) 时,即当剩余工作量小于最大并行度时,稳定状态下实际运行的 Pod 数量将小于此值。更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/
生命周期
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),可在批处理.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,除非指定了 backoffLimitPerIndex(仅限索引作业)。当指定 backoffLimitPerIndex 时,backoffLimit 默认为 2147483647。
activeDeadlineSeconds (int64)
指定作业在系统尝试终止它之前可以持续活动的时间(以秒为单位,相对于 startTime);值必须为正整数。如果作业被暂停(在创建时或通过更新),此计时器将有效地停止并在作业再次恢复时重置。
ttlSecondsAfterFinished (int32)
ttlSecondsAfterFinished 限制已完成执行(无论是完成还是失败)的 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。
选择器
selector (LabelSelector)
一个针对 Pod 的标签查询,应与 Pod 数量匹配。通常,系统会为您设置此字段。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/#label-selectors
manualSelector (boolean)
manualSelector 控制 Pod 标签和 Pod 选择器的生成。除非您确定自己在做什么,否则不要设置 `manualSelector`。当为 false 或未设置时,系统会选择此作业独有的标签并将其附加到 Pod 模板。当为 true 时,用户负责选择独特的标签并指定选择器。未能选择独特的标签可能会导致此作业和其他作业无法正常运行。但是,您可能会在用旧的 `extensions/v1beta1` API 创建的作业中看到 `manualSelector=true`。更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector
Beta 级别
podFailurePolicy (PodFailurePolicy)
指定处理失败 Pod 的策略。特别是,它允许指定需要满足的一组操作和条件才能执行相关操作。如果为空,则应用默认行为 - 失败 Pod 的计数器(由作业的 .status.failed 字段表示)递增,并对照 backoffLimit 进行检查。此字段不能与 restartPolicy=OnFailure 结合使用。
PodFailurePolicy 描述了失败的 Pod 如何影响 backoffLimit。
podFailurePolicy.rules ([]PodFailurePolicyRule), required
原子性:在合并期间将被替换
Pod 失败策略规则列表。规则按顺序评估。一旦某个规则匹配 Pod 失败,其余规则将被忽略。如果没有规则匹配 Pod 失败,则应用默认处理 - Pod 失败计数器递增,并对照 backoffLimit 进行检查。最多允许 20 个元素。
PodFailurePolicyRule 描述了当满足要求时如何处理 Pod 失败。每个规则中可以使用 onExitCodes 和 onPodConditions 中的一个,但不能同时使用两者。
podFailurePolicy.rules.action (string), required
指定当满足要求时对 Pod 失败采取的操作。可能的值为:
- FailJob:表示将 Pod 的作业标记为失败,并终止所有正在运行的 Pod。
- FailIndex:表示将 Pod 的索引标记为失败,并且不会重新启动。
- Ignore:表示不增加 .backoffLimit 的计数器,并创建一个替换 Pod。
- Count:表示 Pod 以默认方式处理 - 增加 .backoffLimit 的计数器。将来会考虑添加其他值。客户端应通过跳过规则来响应未知操作。
podFailurePolicy.rules.onExitCodes (PodFailurePolicyOnExitCodesRequirement)
表示对容器退出代码的要求。
PodFailurePolicyOnExitCodesRequirement 描述了根据其容器退出代码处理失败 Pod 的要求。特别是,它会查找 Pod 状态中 .status.containerStatuses 和 .status.initContainerStatuses 字段分别表示的每个应用容器和初始化容器状态的 .state.terminated.exitCode。成功完成(退出代码为 0)的容器将从要求检查中排除。
podFailurePolicy.rules.onExitCodes.operator (string), required
表示容器退出代码与指定值之间的关系。成功完成(退出代码为 0)的容器将从要求检查中排除。可能的值为:
- In:如果至少有一个容器退出代码(如果有多个容器且未受 'containerName' 字段限制,则可能存在多个)在指定值集合中,则满足要求。
- NotIn:如果至少有一个容器退出代码(如果有多个容器且未受 'containerName' 字段限制,则可能存在多个)不在指定值集合中,则满足要求。将来会考虑添加其他值。客户端应通过假设要求未满足来响应未知操作符。
podFailurePolicy.rules.onExitCodes.values ([]int32), required
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), required
指定所需的 Pod 条件状态。为了匹配 Pod 条件,要求指定的状态等于 Pod 条件状态。默认为 True。
podFailurePolicy.rules.onPodConditions.type (string), required
指定所需的 Pod 条件类型。为了匹配 Pod 条件,要求指定的类型等于 Pod 条件类型。
successPolicy (SuccessPolicy)
successPolicy 指定作业何时可以被声明为成功。如果为空,则应用默认行为 - 仅当成功 Pod 的数量等于完成数时,作业才被声明为成功。当指定此字段时,它必须是不可变的,并且仅适用于索引作业。一旦作业满足 successPolicy,剩余的 Pod 将被终止。
SuccessPolicy 描述了如何根据某些索引的成功情况来声明 Job 成功。
successPolicy.rules ([]SuccessPolicyRule), required
原子性:在合并期间将被替换
rules 表示在 `.status.succeeded >= .spec.completions` 之前将作业声明为成功的替代规则列表。一旦满足任何规则,就会添加“SuccessCriteriaMet”条件,并移除剩余的 Pod。此类作业的终端状态具有“Complete”条件。此外,这些规则按顺序评估;一旦作业满足其中一个规则,其他规则将被忽略。最多允许 20 个元素。
SuccessPolicyRule 描述了声明 Job 成功的规则。每个规则必须至少指定 "succeededIndexes" 或 "succeededCount" 中的一个。
successPolicy.rules.succeededCount (int32)
succeededCount 指定作业成功索引实际集合所需的最小大小。当 succeededCount 与 succeededIndexes 一起使用时,检查仅限于 succeededIndexes 指定的索引集合。例如,给定 succeededIndexes 为 "1-4",succeededCount 为 "3",已完成索引为 "1"、"3" 和 "5",则作业未声明为成功,因为在该规则中只考虑了 "1" 和 "3" 索引。当此字段为 null 时,它不默认任何值,并且在任何时候都不进行评估。当指定时,它必须是正整数。
successPolicy.rules.succeededIndexes (string)
succeededIndexes 指定作业成功索引的实际集合中需要包含的索引集合。索引列表必须在 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` 的作业,但会跳过调和具有自定义字段值的作业。该值必须是有效的域前缀路径(例如 acme.io/foo)——第一个 "/" 之前的所有字符必须是 RFC 1123 定义的有效子域。第一个 "/" 之后的所有字符必须是 RFC 3986 定义的有效 HTTP 路径字符。该值不能超过 63 个字符。此字段不可变。
此字段为 beta 级别。当功能门 JobManagedBy 启用(默认为启用)时,Job 控制器接受设置此字段。
maxFailedIndexes (int32)
当设置了 backoffLimitPerIndex 时,指定在将 Job 标记为失败之前,失败索引的最大数量。一旦失败索引的数量超过此数量,整个 Job 将被标记为 Failed 并终止其执行。如果留空,Job 将继续执行其所有索引,并标记为 `Complete` Job 条件。它只能在设置 backoffLimitPerIndex 时指定。它可以为空或最多为 completions。当 completions 大于 10^5 时,它为必填项且必须小于或等于 10^4。
podReplacementPolicy (string)
podReplacementPolicy 指定何时创建替换 Pod。可能的值为:- TerminatingOrFailed 表示当 Pod 正在终止(具有 metadata.deletionTimestamp)或失败时,我们重新创建 Pod。
- Failed 表示在创建替换 Pod 之前,等待先前创建的 Pod 完全终止(其 phase 为 Failed 或 Succeeded)。
当使用 podFailurePolicy 时,Failed 是唯一允许的值。当不使用 podFailurePolicy 时,TerminatingOrFailed 和 Failed 都是允许的值。
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 字段相同或更晚的时间点。
Time 是 time.Time 的一个包装器,支持正确地编组到 YAML 和 JSON。提供了 time 包提供的许多工厂方法的包装器。
active (int32)
处于待定和运行状态且未终止(没有 deletionTimestamp)的 Pod 数量。对于已完成的作业,该值为零。
failed (int32)
达到失败阶段的 Pod 数量。该值单调递增。
succeeded (int32)
达到成功阶段的 Pod 数量。该值对于给定的 spec 单调递增。但是,它可能会因为弹性索引作业的缩减而减少。
completedIndexes (string)
completedIndexes 以文本格式保存当 .spec.completionMode = "Indexed" 时的已完成索引。索引以逗号分隔的十进制整数表示。数字按升序排列。三个或更多连续的数字被压缩并由序列的第一个和最后一个元素表示,用连字符分隔。例如,如果已完成的索引是 1、3、4、5 和 7,则它们表示为 "1,3-5,7"。
conditions ([]JobCondition)
补丁策略:按键
type
合并原子性:在合并期间将被替换
对象当前状态的最新可用观测值。当 Job 失败时,其中一个条件将具有 "Failed" 类型和 true 状态。当 Job 暂停时,其中一个条件将具有 "Suspended" 类型和 true 状态;当 Job 恢复时,此条件的状态将变为 false。当 Job 完成时,其中一个条件将具有 "Complete" 类型和 true 状态。
当作业处于终止条件(“Complete”或“Failed”)时,被视为已完成。作业不能同时具有“Complete”和“Failed”条件。此外,它不能同时处于“Complete”和“FailureTarget”条件。 “Complete”、“Failed”和“FailureTarget”条件不能被禁用。
更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/
conditions.status (string),必需
条件的 status,可以是 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 包含已终止但作业控制器尚未在状态计数器中计入的 Pod 的 UID。
作业控制器使用 finalizer 创建 Pod。当 Pod 终止(成功或失败)时,控制器执行三个步骤来将其计入作业状态:
- 将 Pod UID 添加到此字段的数组中。2. 移除 Pod finalizer。3. 从数组中移除 Pod UID,同时增加相应的计数器。
旧版作业可能未通过此字段进行跟踪,在这种情况下,此字段仍为 null。对于已完成的作业,该结构为空。
UncountedTerminatedPods 包含已终止但尚未计入 Job 状态计数器的 Pod 的 UID。
uncountedTerminatedPods.failed ([]string)
Set: 合并时将保留唯一值
failed 包含失败 Pod 的 UID。
uncountedTerminatedPods.succeeded ([]string)
Set: 合并时将保留唯一值
succeeded 包含成功 Pod 的 UID。
Beta 级别
ready (int32)
具有 Ready 条件且未终止(没有 deletionTimestamp)的活跃 Pod 数量。
Alpha 级别
failedIndexes (string)
当 spec.backoffLimitPerIndex 设置时,FailedIndexes 包含失败的索引。索引以文本格式表示,类似于 `completedIndexes` 字段,即它们以逗号分隔的十进制整数形式保存。数字按升序排列。三个或更多连续数字被压缩并由序列的第一个和最后一个元素表示,用连字符分隔。例如,如果失败的索引是 1、3、4、5 和 7,则它们表示为 "1,3-5,7"。失败索引集不能与已完成索引集重叠。
terminating (int32)
正在终止的 Pod 数量(处于 Pending 或 Running 阶段且具有 deletionTimestamp)。
此字段是 Beta 级别。当功能门 JobPodReplacementPolicy 启用(默认启用)时,Job 控制器会填充此字段。
JobList
JobList 是作业的集合。
apiVersion: batch/v1
kind: JobList
metadata (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
items ([]Job), required
items 是 Jobs 的列表。
操作
get
读取指定的 Job
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
响应
200 (Job): OK
401: 未授权
get
读取指定 Job 的状态
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
响应
200 (Job): OK
401: 未授权
list
列出或观察 Job 类型的对象
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (在路径中): string,必填
allowWatchBookmarks (在查询中): boolean
continue (在查询中): string
fieldSelector (在查询中): string
labelSelector (在查询中): string
limit (在查询中): integer
pretty (在查询中): string
resourceVersion (在查询中): string
resourceVersionMatch (在查询中): string
sendInitialEvents (在查询中): boolean
timeoutSeconds (在查询中): integer
watch (在查询中): boolean
响应
200 (JobList): OK
401: 未授权
list
列出或观察 Job 类型的对象
HTTP 请求
GET /apis/batch/v1/jobs
参数
allowWatchBookmarks (在查询中): boolean
continue (在查询中): string
fieldSelector (在查询中): string
labelSelector (在查询中): string
limit (在查询中): integer
pretty (在查询中): string
resourceVersion (在查询中): string
resourceVersionMatch (在查询中): string
sendInitialEvents (在查询中): boolean
timeoutSeconds (在查询中): integer
watch (在查询中): boolean
响应
200 (JobList): OK
401: 未授权
create
创建 Job
HTTP 请求
POST /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (在路径中): string,必填
body: Job, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (Job): OK
201 (Job): Created
202 (Job): Accepted
401: 未授权
update
替换指定的 Job
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (在路径中): string,必填
Job 的名称
namespace (在路径中): string,必填
body: Job, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (Job): OK
201 (Job): Created
401: 未授权
update
替换指定 Job 的状态
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
name (在路径中): string,必填
Job 的名称
namespace (在路径中): string,必填
body: Job, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (Job): OK
201 (Job): Created
401: 未授权
patch
部分更新指定的 Job
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (在路径中): string,必填
Job 的名称
namespace (在路径中): string,必填
body: Patch,必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (在查询中): boolean
pretty (在查询中): string
响应
200 (Job): OK
201 (Job): Created
401: 未授权
patch
部分更新指定 Job 的状态
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
name (在路径中): string,必填
Job 的名称
namespace (在路径中): string,必填
body: Patch,必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (在查询中): boolean
pretty (在查询中): string
响应
200 (Job): OK
201 (Job): Created
401: 未授权
delete
删除 Job
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (在路径中): string,必填
Job 的名称
namespace (在路径中): string,必填
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (在查询中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查询中): boolean
pretty (在查询中): string
propagationPolicy (在查询中): string
响应
200 (Status): OK
202 (Status): 已接受
401: 未授权
deletecollection
删除 Job 集合
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (在路径中): string,必填
body: DeleteOptions
continue (在查询中): string
dryRun (在查询中): string
fieldSelector (在查询中): string
gracePeriodSeconds (在查询中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查询中): boolean
labelSelector (在查询中): string
limit (在查询中): integer
pretty (在查询中): string
propagationPolicy (在查询中): string
resourceVersion (在查询中): string
resourceVersionMatch (在查询中): string
sendInitialEvents (在查询中): boolean
timeoutSeconds (在查询中): integer
响应
200 (Status): OK
401: 未授权
本页面是自动生成的。
如果你打算报告此页面存在的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。