Job
apiVersion: batch/v1
import "k8s.io/api/batch/v1"
Job
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.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
parallelism (int32)
Визначає максимальну бажану кількість Podʼів, які завдання повинно виконувати в будь-який момент часу. Фактична кількість Podʼів, що працюють в стабільному стані, буде меншою за цю кількість, коли ((.spec.completions - .status.successful) < .spec.parallelism), тобто коли залишилося менше роботи, ніж максимально дозволена паралельність. Детальніше: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Життєвий цикл
completions (int32)
Визначає бажану кількість успішно завершених Podʼів, які має виконати завдання. Встановлення null означає, що успіх будь-якого Podʼа сигналізує про успіх усіх Podʼів і дозволяє паралельності мати будь-яке позитивне значення. Встановлення значення 1 означає, що паралельність обмежується до 1 і успіх цього Podʼа сигналізує про успіх завдання. Детальніше: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
completionMode (string)
completionMode визначає, як відстежуються завершення Podʼів. Може бути
NonIndexed
(стандартно) абоIndexed
.NonIndexed
означає, що завдання вважається завершеним, коли успішно завершено кількість Podʼів вказана у .spec.completions. Кожне завершення Podʼа є аналогічним до іншого.Indexed
означає, що Podʼи завдання отримують асоційований індекс завершення від 0 до (.spec.completions — 1), доступний в анотації batch.kubernetes.io/job-completion-index. Завдання вважається завершеним, коли для кожного індексу є один успішно завершений Pod. Коли значенняIndexed
, .spec.completions має бути вказано, а.spec.parallelism
має бути менше або дорівнювати 10^5. Крім того, імʼя Podʼа має форму$(job-name)-$(index)-$(random-string)
, а імʼя хоста Podʼа має форму$(job-name)-$(index)
.У майбутньому можуть бути додані інші режими завершення. Якщо контролер завдання спостерігає режим, який він не розпізнає, що можливо під час оновлень через різницю версій, контролер пропускає оновлення для завдання.
backoffLimit (int32)
Визначає кількість спроб перед тим, як відзначити завдання таким, що не вдалося. Стандартне значення — 6.
activeDeadlineSeconds (int64)
Визначає тривалість у секундах відносно startTime, протягом якої завдання може бути активним, перш ніж система спробує його завершити; значення має бути додатним цілим числом. Якщо завдання призупинено (під час створення або через оновлення), цей таймер фактично зупиняється і скидається, коли завдання знову відновлюється.
ttlSecondsAfterFinished (int32)
ttlSecondsAfterFinished обмежує термін життя завдання, яке завершило виконання (або Complete, або Failed). Якщо це поле встановлено, то через ttlSecondsAfterFinished після завершення завдання воно може бути автоматично видалене. Коли завдання видаляється, його життєвий цикл (наприклад, завершувачі) буде враховуватись. Якщо це поле не встановлено, завдання не буде автоматично видалено. Якщо це поле встановлено на нуль, завдання може бути видалене відразу після завершення.
suspend (boolean)
suspend визначає, чи повинен контролер завдання створювати Podʼи чи ні. Якщо завдання створюється з параметром suspend, встановленим на true, контролер завдання не створює Podʼи. Якщо завдання призупиняється після створення (тобто прапорець змінюється з false на true), контролер завдання видалить усі активні Podʼи, повʼязані з цим завданням. Користувачі повинні спроєктувати своє робоче навантаження так, щоб воно могло правильно обробляти це. Призупинення завдання скине поле StartTime завдання, фактично скидаючи таймер ActiveDeadlineSeconds. Стандартне значення — false.
Селектор
selector (LabelSelector)
Запит до міток на Podʼах, які повинні відповідати кількості Podʼів. Зазвичай система встановлює це поле для вас. Детальніше: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
manualSelector (boolean)
manualSelector керує генерацією міток Podʼів і селекторів Podʼів. Залиште
manualSelector
невстановленим, якщо ви не впевнені, що робите. Коли значення false або невстановлене, система вибирає унікальні мітки для цього завдання та додає ці мітки до шаблону Podʼа. Коли значення true, користувач відповідає за вибір унікальних міток і вказування селектора. Невдача у виборі унікальної мітки може спричинити некоректну роботу цього та інших завдань. Однак ви можете побачитиmanualSelector=true
у завданнях, створених за допомогою старого APIextensions/v1beta1
. Детальніше: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector
Бета-рівень
podFailurePolicy (PodFailurePolicy)
Визначає політику обробки невдалих Podʼів. Зокрема, дозволяє вказати набір дій та умов, які повинні бути виконані для виконання повʼязаної дії. Якщо це поле порожнє, застосовується стандартна поведінка — лічильник невдалих Podʼів, представлений полем .status.failed завдання, збільшується і перевіряється з backoffLimit. Це поле не можна використовувати в комбінації з restartPolicy=OnFailure.
Це поле рівня бета. Воно може бути використане, коли ввімкнено прапорець
JobPodFailurePolicy
(стандартно увімкнено).PodFailurePolicy описує, як невдалі Podʼи впливають на backoffLimit.
podFailurePolicy.rules ([]PodFailurePolicyRule), обовʼязково
Atomic: буде замінено під час обʼєднання
Список правил політики невдач Podʼів. Правила оцінюються послідовно. Як тільки правило відповідає невдачі Podʼа, решта правил ігнорується. Якщо жодне правило не відповідає невдачі Podʼа, застосовується стандартна обробка — лічильник невдач Podʼів збільшується і перевіряється з backoffLimit. Максимально дозволено 20 елементів.
PodFailurePolicyRule описує, як обробляється невдача Podʼа, коли виконуються вимоги. Одне з onExitCodes і onPodConditions, але не обидва, можуть бути використані в кожному правилі.
podFailurePolicy.rules.action (string), обовʼязково
Визначає дію, яка виконується при невдачі Podʼа, коли виконуються вимоги. Можливі значення:
- FailJob: означає, що завдання Podʼа позначається як Failed і всі запущені Podʼи завершуються.
- FailIndex: означає, що індекс Podʼа позначається як Failed і не буде
перезапущений. Це значення рівня альфа. Воно може бути використане, коли ввімкнено
прапорець
JobBackoffLimitPerIndex
(стандартно вимкнено). - Ignore: означає, що лічильник по відношенню до .backoffLimit не збільшується і створюється Pod заміна.
- Count: означає, що Pod обробляється стандартним способом — лічильник .backoffLimit збільшується.
Додаткові значення можуть бути додані в майбутньому. Клієнти повинні реагувати на невідому дію, пропускаючи правило.
podFailurePolicy.rules.onPodConditions ([]PodFailurePolicyOnPodConditionsPattern), обовʼязково
Atomic: буде замінено під час обʼєднання
Представляє вимогу до стану Podʼа. Вимога представлена як список шаблонів стан Podʼа. Вимога задовольняється, якщо хоча б один шаблон відповідає фактичному стану Podʼа. Максимально дозволено 20 елементів.
PodFailurePolicyOnPodConditionsPattern описує шаблон для відповідності фактичний стан Podʼа.
podFailurePolicy.rules.onPodConditions.status (string), обовʼязково
Визначає необхідний статус стану Podʼа. Для відповідності стану Podʼа потрібно, щоб зазначений статус відповідав статусу стану Podʼа. Стандартне значення — True.
podFailurePolicy.rules.onPodConditions.type (string), обовʼязково
Визначає необхідний тип стану Podʼа. Для відповідності стану Podʼа потрібно, щоб зазначений тип відповідав типу стану Podʼа.
podFailurePolicy.rules.onExitCodes (PodFailurePolicyOnExitCodesRequirement)
Представляє вимогу до кодів завершення контейнера.
PodFailurePolicyOnExitCodesRequirement описує вимогу для обробки невдалого Podʼа на основі кодів завершення його контейнера. Зокрема, перевіряється .state.terminated.exitCode для кожного контейнера застосунку та init-контейнера, представленого полями .status.containerStatuses і .status.initContainerStatuses у статусі Podʼа відповідно. Контейнери, завершені успішно (код завершення 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)
Обмежує перевірку кодів завершення контейнера контейнером з зазначеним імʼям. Коли null, правило застосовується до всіх контейнерів. Коли зазначено, воно має відповідати одному з імен контейнерів або init-контейнерів у шаблоні Podʼа.
Альфа-рівень
backoffLimitPerIndex (int32)
Визначає ліміт кількості повторних спроб в межах індексу перед тим, як позначити цей індекс як невдалий. Коли цей параметр увімкнений, кількість невдач по індексу зберігається в анотації Podʼа batch.kubernetes.io/job-index-failure-count. Це поле можна встановити лише при completionMode=Indexed для завдання, і політика перезапуску Podʼа повинна бути Never. Поле незмінне. Це поле на рівні альфа. Воно може бути використане, коли ввімкнено прапорець
JobBackoffLimitPerIndex
(стандартно вимкнено).maxFailedIndexes (int32)
Визначає максимальну кількість невдалих індексів перед тим, як позначити завдання як невдале, коли backoffLimitPerIndex встановлено. Як тільки кількість невдалих індексів перевищує це число, все завдання позначається як Failed і його виконання припиняється. Якщо залишити null, завдання продовжує виконання всіх своїх індексів і позначається станом завдання
Complete
. Це поле можна вказати лише, коли встановлено backoffLimitPerIndex. Воно може бути null або дорівнювати кількості completions. Воно обовʼязково і повинно бути менше або дорівнювати 10^4, коли кількість completions більша за 10^5. Це поле на рівні альфа. Воно може бути використане, коли ввімкнено прапорецьJobBackoffLimitPerIndex
(стандартно вимкнено).podReplacementPolicy (string)
podReplacementPolicy визначає, коли створювати нові Podʼи на заміну. Можливі значення:
- TerminatingOrFailed означає, що ми створюємо Podʼи повторно, коли вони завершуються (мають metadata.deletionTimestamp) або не зазнали збою.
- Failed означає, що потрібно чекати, поки раніше створений Pod повністю завершиться (має phase Failed або Succeeded) перед створенням нового Podʼа на заміну.
При використанні podFailurePolicy, Failed є єдиним допустимим значенням. TerminatingOrFailed і Failed є допустимими значеннями, коли podFailurePolicy не використовується. Це поле на рівні альфа. Увімкніть JobPodReplacementPolicy, щоб мати змогу використовувати це поле.
JobStatus
JobStatus представляє поточний стан Job.
startTime (Time)
Представляє час, коли контролер Job почав обробку завдання. Коли Job створюється в призупиненому стані, це поле не встановлюється до першого відновлення. Це поле скидається кожного разу, коли Job відновлюється після призупинення. Воно представлене у форматі RFC3339 і є в UTC.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
completionTime (Time)
Представляє час, коли завдання було завершено. Це поле може не встановлюватися в порядку "відбувається перед" у різних операціях. Воно представлене у форматі RFC3339 і є в UTC. Час завершення встановлюється лише тоді, коли завдання успішно завершується.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
active (int32)
Кількість Podʼів в стані очікування та працюючих Podʼів.
failed (int32)
Кількість Podʼів, які досягли фази Failed.
succeeded (int32)
Кількість Podʼів, які досягли фази Succeeded.
completedIndexes (string)
completedIndexes містить завершені індекси, коли .spec.completionMode = "Indexed" у текстовому форматі. Індекси представлені у вигляді десяткових чисел, розділених комами. Числа перелічені у порядку зростання. Три або більше послідовних числа стискаються і представлені першим і останнім елементами серії, розділеними дефісом. Наприклад, якщо завершені індекси 1, 3, 4, 5 і 7, вони представлені як "1,3-5,7".
conditions ([]JobCondition)
Patch strategy: обʼєднання за ключем
type
Atomic: буде замінено під час обʼєднання
Останні доступні спостереження за поточним станом обʼєкта. Коли Job не вдається, один зі станів матиме тип "Failed" і статус true. Коли Job призупинено, один зі станів матиме тип "Suspended" і статус true; коли Job відновлюється, статус цього стану стає false. Коли Job завершено, один з станів матиме тип "Complete" і статус true. Додаткова інформація: https://kubernetes.io/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 містить UID Podʼів, які завершили роботу, але контролер завдань ще не врахував їх у статусних лічильниках.
Контролер завдань створює Podʼи з завершувачем. Коли Pod завершується (успішно або з помилкою), контролер виконує три кроки для врахування його у статусі завдання:
- Додає UID Podʼа до масивів у цьому полі.
- Видаляє завершувач Podʼа.
- Видаляє UID Podʼа з масивів, збільшуючи відповідний лічильник.
Старі завдання можуть не відстежуватися з використанням цього поля, у такому випадку поле залишається порожнім.
UncountedTerminatedPods містить UID Podʼів, які завершили роботу, але ще не враховані в лічильниках статусу завдання.
uncountedTerminatedPods.failed ([]string)
Set: унікальні значення зберігатимуться під час обʼєднання
failed містить UID Podʼів, що завершилися з помилкою.
uncountedTerminatedPods.succeeded ([]string)
Set: унікальні значення зберігатимуться під час обʼєднання
succeeded містить UID Podʼів, що завершилися успішно.
Бета-рівень
ready (int32)
Кількість Podʼів, які мають стан Ready.
Це поле знаходиться на бета-рівні. Контролер завдань заповнює це поле, коли ввімкнено функцію JobReadyPods (стандартно увімкнено).
Альфа-рівень
failedIndexes (string)
FailedIndexes зберігає невдалі індекси, коли backoffLimitPerIndex=true. Індекси представлені у текстовому форматі, аналогічному до поля
completedIndexes
, тобто вони зберігаються як десяткові цілі числа, розділені комами. Числа подані в порядку зростання. Три або більше послідовних числа стискаються і представлені першим та останнім елементом серії, розділеними дефісом. Наприклад, якщо невдалі індекси: 1, 3, 4, 5 і 7, вони представлені як "1,3-5,7". Це поле знаходиться на альфа-рівні. Його можна використовувати, коли ввімкнено функцію JobBackoffLimitPerIndex (стандартно вимкнено).terminating (int32)
Кількість Podʼів, які завершуються (у фазі Pending або Running та мають deletionTimestamp).
Це поле знаходиться на альфа-рівні. Контролер завдань заповнює це поле, коли ввімкнено функцію JobPodReplacementPolicy (стандартно вимкнено).
JobList
JobList представляє собою колекцію завдань.
apiVersion: batch/v1
kind: JobList
metadata (ListMeta)
Стандартні метадані списку. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
items ([]Job), обовʼязково
Список завдань (Job).
Операції
get
отримати вказане завдання
HTTP запит
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (Job): ОК
401: Unauthorized
get
отримати статус вказаного завдання
HTTP запит
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (Job): ОК
401: Unauthorized
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): ОК
401: Unauthorized
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 timeoutSeconds
watch (в запиті): boolean
Відповідь
200 (JobList): ОК
401: Unauthorized
create
створення Job
HTTP запит
POST /apis/batch/v1/namespaces/{namespace}/jobs
Параметри
namespace (в шляху): string, обовʼязково
body: Job, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Job): ОК
201 (Job): Created
202 (Job): Accepted
401: Unauthorized
update
заміна вказаного Job
HTTP запит
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
body: Job, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Job): ОК
201 (Job): Created
401: Unauthorized
update
заміна статусу вказаного Job
HTTP запит
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
body: Job, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Job): ОК
201 (Job): Created
401: Unauthorized
patch
часткове оновлення вказаного Job
HTTP запит
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Job): ОК
201 (Job): Created
401: Unauthorized
patch
часткове оновлення статусу вказаного Job
HTTP запит
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Job): ОК
201 (Job): Created
401: Unauthorized
delete
видалення Job
HTTP запит
DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name}
Параметри
name (в шляху): string, обовʼязково
назва завдання
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): ОК
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції Job
HTTP запит
DELETE /apis/batch/v1/namespaces/{namespace}/jobs
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): ОК
401: Unauthorized