Виселення, ініційоване API
Виселення, ініційоване API — процес, під час якого використовується Eviction API для створення обʼєкта Eviction
, який викликає належне завершення роботи Podʼа.
Ви можете ініціювати виселення, викликавши Eviction API безпосередньо або програмно,
використовуючи клієнт API-сервера, наприклад, команду kubectl drain
. Це створює обʼєкт Eviction
, що призводить до завершення роботи Podʼа через API-сервер.
Виселення ініційовані API дотримуються вашого налаштованого PodDisruptionBudgets
та terminationGracePeriodSeconds
.
Використання API для створення обʼєкта Eviction для Podʼа схоже на виконання контрольованої політикою операції DELETE
на Podʼі.
Виклик Eviction API
Ви можете використовувати клієнт кластера Kubernetes, щоб отримати доступ до API Kubernetes та створити обʼєкт Eviction
. Для цього ви надсилаєте POST-запит на виконання операції, схожий на наступний приклад:
Примітка:
policy/v1
Eviction доступний в v1.22+. Використовуйте policy/v1beta1
для попередніх версій.{
"apiVersion": "policy/v1",
"kind": "Eviction",
"metadata": {
"name": "quux",
"namespace": "default"
}
}
Примітка:
Застаріло в v1.22 на користьpolicy/v1
{
"apiVersion": "policy/v1beta1",
"kind": "Eviction",
"metadata": {
"name": "quux",
"namespace": "default"
}
}
Також ви можете спробувати виконати операцію виселення, звернувшись до API за допомогою
curl
або wget
, схожою на наступний приклад:
curl -v -H 'Content-type: application/json' https://your-cluster-api-endpoint.example/api/v1/namespaces/default/pods/quux/eviction -d @eviction.json
Як працює виселення, ініційоване через API
Коли ви запитуєте виселення за допомогою API, сервер API виконує перевірки допуску і відповідає одним із таких способів:
200 ОК
: виселення дозволено, субресурсEviction
створюється, і Pod видаляється, подібно до надсиланняDELETE
-запиту на URL Podʼа.429 Забагато запитів
: виселення на цей момент не дозволено через налаштований PodDisruptionBudget. Можливо, ви зможете спробувати виселення пізніше. Ви також можете отримати цю відповідь через обмеження швидкості API.500 Внутрішня помилка сервера
: виселення не дозволено через помилкову конфігурацію, наприклад, якщо декілька PodDisruptionBudget посилаються на той самий Pod.
Якщо Pod, який ви хочете виселити, не є частиною робочого навантаження, яке має PodDisruptionBudget, сервер API завжди повертає 200 OK
та дозволяє виселення.
Якщо сервер API дозволяє виселення, Pod видаляється наступним чином:
- Ресурс
Pod
в сервері API оновлюється з часовою міткою видалення, після чого сервер API вважає ресурсPod
таким, що завершив роботу. РесурсPod
також позначений для відповідного звершення роботи. - Kubelet на вузлі, на якому запущений локальний Pod, помічає, що ресурс
Pod
позначений для припинення та починає видаляти локальний Pod. - Під час вимкнення Podʼа kubelet видаляє Pod з обʼєктів Endpoint та EndpointSlice. В результаті контролери більше не вважають Pod за дійсний обʼєкт.
- Після закінчення періоду належного завершення роботи для Podʼа kubelet примусово вимикає локальний Pod.
- kubelet повідомляє сервер API про видалення ресурсу
Pod
. - Сервер API видаляє ресурс
Pod
.
Виправлення застряглих виселень
У деяких випадках ваші застосунки можуть потрапити в непрацездатний стан, де Eviction API буде повертати лише відповіді 429
або 500
, поки ви не втрутитеся. Це може відбуватися, наприклад, якщо ReplicaSet створює Podʼи для вашого застосунку, але нові Podʼи не переходять в стан Ready
. Ви також можете помітити це поведінку у випадках, коли останній виселений Pod мав довгий період належного завершення роботи при примусовому завершенні роботи.
Якщо ви помічаєте застряглі виселення, спробуйте одне з таких рішень:
- Скасуйте або призупиніть автоматизовану операцію, що викликає проблему. Дослідіть застряглий застосунок, перш ніж перезапустити операцію.
- Почекайте трохи, а потім безпосередньо видаліть Pod з панелі управління вашого кластера замість використання API виселення.
Що далі
- Дізнайтеся, як захистити ваші застосунки за допомогою Бюджету відмови Podʼів.
- Дізнайтеся про Виселення внаслідок тиску на вузол.
- Дізнайтеся про Пріоритет та випередження Podʼів.