Автоматичне очищення завершених задач
Kubernetes v1.23 [stable]
Коли ваша задача завершилася, корисно залишити цю задачу в API (і не видаляти її відразу), щоб ви могли визначити, чи вдалося, чи не вдалося завдання.
Контролер Kubernetes часу життя після завершення забезпечує механізм TTL (time to live), щоб обмежити термін життя обʼєктів задачі, які завершили виконання.
Очищення завершених задач
Контролер часу життя після завершення підтримується лише для задач. Ви можете використовувати цей механізм для автоматичного очищення завершених завдань (як Complete
, так і Failed
), автоматично вказавши поле .spec.ttlSecondsAfterFinished
задачі, як у цьому прикладі.
Контролер часу життя після завершення передбачає, що задачу можна очистити через TTL секунд після завершення роботи. Відлік починається, коли умова статусу задачі змінюється, щоб показати, що задача є або Complete
, або Failed
; як тільки TTL закінчився, ця задача стає придатною для каскадного видалення. Коли контролер часу життя після завершення очищає задачу, він видалить її каскадно, іншими словами, він видалить її залежні обʼєкти разом з нею.
Kubernetes дотримується гарантій життєвого циклу обʼєкта для задачі, таких як очікування завершувачів.
Ви можете встановити TTL секунд у будь-який момент. Ось деякі приклади встановлення поля .spec.ttlSecondsAfterFinished
задачі:
- Вказуйте це поле в маніфесті задачі, щоб задачу можна було автоматично очистити через певний час після її завершення.
- Вручну встановлюйте це поле вже наявним завершеним завданням, щоб вони стали придатними для очищення.
- Використовуйте змінний вебхук доступу для динамічного встановлення цього поля під час створення задачі. Адміністратори кластера можуть використовувати це, щоб накладати політику TTL для завершених задач.
- Використовуйте змінний вебхук доступу для динамічного встановлення цього поля після завершення задачі та вибору різних значень TTL на основі статусу завдання, міток. У цьому випадку вебзапит повинен виявляти зміни в полі
.status
задачі та встановлювати TTL лише тоді, коли задача позначається як завершена. - Напишіть свій власний контролер для управління часом життя TTL для задач, які відповідають певному селектору.
Обмеження
Оновлення TTL для завершених задач
Ви можете змінювати період TTL, наприклад, поле .spec.ttlSecondsAfterFinished
для задач, після створення або завершення задачі. Якщо ви збільшуєте період TTL після закінчення поточного періоду ttlSecondsAfterFinished
, Kubernetes не гарантує збереження цієї задачі, навіть якщо оновлення для збільшення TTL повертає успішну API відповідь.
Зсув часу
Оскільки контролер часу життя після завершення використовує відмітки часу, збережені в задачах Kubernetes, для визначення того, чи TTL минув, чи ні, ця функція чутлива до зсуву часу в кластері, що може призвести до очищення обʼєктів задачі в неправильний час.
Годинники не завжди вірні, але різниця повинна бути дуже мала. Будь ласка, будьте уважні при встановленні ненульового TTL.
Що далі
Прочитайте Автоматичне очищення задач
Зверніться до Пропозиції з покращення Kubernetes (KEP) для додавання цього механізму.