作业
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)
Job 期望行为的规约。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status (JobStatus)
Job 的当前状态。更多信息: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),该索引可在注解 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。
选择器
selector (LabelSelector)
对应该匹配 Pod 数量的 Pod 进行标签查询。通常,系统会为你设置此字段。更多信息:https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/#label-selectors
manualSelector (boolean)
manualSelector 控制 Pod 标签和 Pod 选择器的生成。除非你确定自己在做什么,否则请不要设置
manualSelector
。当为 false 或未设置时,系统会为该 Job 选择唯一的标签并将其附加到 Pod 模板。当为 true 时,用户负责选择唯一的标签并指定选择器。未能选择唯一的标签可能会导致此 Job 和其他 Job 无法正常工作。但是,你可能会在通过旧的extensions/v1beta1
API 创建的 Job 中看到manualSelector=true
。更多信息:https://kubernetes.ac.cn/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector
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/
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 状态:
- 将 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 的集合。
apiVersion: batch/v1
kind: JobList
metadata (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
items ([]Job),必需
items 是 Job 的列表。
操作
get
读取指定的 Job
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (in path): string,必需
Job 名称
namespace (in path): string,必需
pretty (in query): string
响应
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,必需
pretty (in query): string
响应
200 (Job): OK
401: Unauthorized
list
列出或监视类型为 Job 的对象
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (in path): string,必需
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
响应
200 (JobList): OK
401: Unauthorized
list
列出或监视类型为 Job 的对象
HTTP 请求
GET /apis/batch/v1/jobs
参数
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
响应
200 (JobList): OK
401: Unauthorized
create
创建一个 Job
HTTP 请求
POST /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (in path): string,必需
body: Job,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
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,必需
body: Job,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
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,必需
body: Job,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
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,必需
body: Patch,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
响应
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,必需
body: Patch,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
响应
200 (Job): OK
201 (Job): Created
401: Unauthorized
delete
删除一个 Job
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (in path): string,必需
Job 名称
namespace (in path): string,必需
body: DeleteOptions
dryRun (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (in query): string
propagationPolicy (in query): string
响应
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
删除 Job 集合
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs
参数
namespace (in path): string,必需
body: DeleteOptions
continue (in query): string
dryRun (in query): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
响应
200 (Status): OK
401: Unauthorized
此页面是自动生成的。
如果你打算报告此页面的问题,请在问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。