作業
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.club.tw/docs/concepts/workloads/controllers/jobs-run-to-completion/
parallelism (int32)
指定作業在任何給定時間應執行的最大期望 Pod 數量。當 ((.spec.completions - .status.successful) < .spec.parallelism) 時,即當剩餘工作量小於最大並行度時,穩定狀態下實際執行的 Pod 數量將小於此值。更多資訊:https://kubernetes.club.tw/docs/concepts/workloads/controllers/jobs-run-to-completion/
生命週期
completions (int32)
指定作業應成功完成的 Pod 的期望數量。設定為 null 意味著任何 Pod 的成功都表示所有 Pod 的成功,並允許並行度為任何正值。設定為 1 意味著並行度限制為 1,並且該 Pod 的成功表示作業的成功。更多資訊:https://kubernetes.club.tw/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.club.tw/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.club.tw/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.club.tw/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 專案的其他地方進行。