Kubernetes v1.34: Звіт про стан ресурсів DRA в Podʼах
Зростання популярності штучного інтелекту (AI) та машинного навчання (ML) та інших високопродуктивних робочих навантажень зробило спеціалізоване обладнання, таке як графічні процесори (GPU), процесори для обробки даних (TPU) та програмовані логічні матриці (FPGA), критично важливим компонентом багатьох кластерів Kubernetes. Однак, як обговорювалося в попередньому блозі про пошук збоїв у Podʼах з пристроями, коли це обладнання виходить з ладу, його може бути важко діагностувати, що призводить до значного часу простою. З випуском Kubernetes v1.34 ми раді оголосити про нову альфа-функцію, яка забезпечує необхідну видимість стану цих пристроїв.
Ця робота розширює функціональність KEP-4680, яка вперше представила механізм для звітування про стан пристроїв, що керуються втулками пристроїв. Тепер ця можливість розширюється на Динамічне виділення ресурсів (DRA). Контрольована через функціональну можливість ResourceHealthStatus, це вдосконалення дозволяє драйверам DRA звітувати про стан пристроїв безпосередньо в поле .status Podʼа, надаючи важливу інформацію для операторів і розробників.
Чому важливо показувати стан пристроїв у статусі Podʼа?
Для стану застосунків або тривалих завдань збій пристрою може бути руйнівним і витратним. Експонуючи стан пристроїв у полі .status для Podʼа, Kubernetes надає стандартизований спосіб для користувачів і автоматизованих інструментів швидко діагностувати проблеми. Якщо Pod зазнає збою, ви тепер можете перевірити його статус, щоб дізнатися, чи є несправний пристрій основною причиною, заощаджуючи цінний час, який інакше міг би бути витрачений на налагодження коду застосунку.
Як це працює
Ця функція вводить новий, необовʼязковий канал звʼязку між Kubelet і драйверами DRA, побудований на трьох основних компонентах.
Новий gRPC сервіс перевірки справності
Новий gRPC сервіс, DRAResourceHealth, визначено в групі API dra-health/v1alpha1. Драйвери DRA можуть реалізувати цей сервіс для потокової передачі оновлень стану пристроїв до Kubelet. Сервіс включає серверний стрім RPC NodeWatchResources, який надсилає статус справності (Healthy, Unhealthy або Unknown) для пристроїв, якими він керує.
Інтеграція з Kubelet
Менеджер втулків DRA в Kubelet виявляє, які драйвери реалізують сервіс перевірки справності. Для кожного сумісного драйвера він запускає довготривалий стрім NodeWatchResources, щоб отримувати оновлення стану. Менеджер DRA потім споживає ці оновлення та зберігає їх у постійному кеші healthInfoCache, який може пережити перезавантаження Kubelet.
Заповнення статусу Podʼа
Коли стан пристрою змінюється, менеджер DRA ідентифікує всі Podʼи, на які вплинула зміна, і ініціює оновлення статусу Podʼа. Нове поле, allocatedResourcesStatus, тепер є частиною обʼєкта API v1.ContainerStatus. Kubelet заповнює це поле поточним станом кожного пристрою, виділеного контейнеру.
Практичний приклад
Якщо Pod знаходиться в стані CrashLoopBackOff, ви можете використовувати kubectl describe pod <pod-name>, щоб перевірити його статус. Якщо виділений пристрій зазнав збою, вивід тепер включатиме поле allocatedResourcesStatus, чітко вказуючи на проблему:
status:
containerStatuses:
- name: my-gpu-intensive-container
# ... інші стани контейнерів
allocatedResourcesStatus:
- name: "claim:my-gpu-claim"
resources:
- resourceID: "example.com/gpu-a1b2-c3d4"
health: "Unhealthy"
Цей явний статус чітко вказує на те, що проблема полягає в апаратному забезпеченні, а не в застосунку.
Тепер ви можете вдосконалити логіку виявлення збоїв, щоб реагувати на несправні пристрої, повʼязані з Podʼом, скасування планування Podʼа.
Як використовувати цю функцію
Оскільки це альфа-функція в Kubernetes v1.34, ви повинні виконати такі кроки, щоб використовувати її:
- Увімкніть функціональну можливість
ResourceHealthStatusна вашому kube-apiserver та kubelet. - Переконайтеся, що ви використовуєте драйвер DRA, який реалізує gRPC сервіс
v1alpha1 DRAResourceHealth.
Драйвери DRA
Якщо ви розробляєте драйвер DRA, обовʼязково подумайте про стратегію виявлення збоїв пристроїв і переконайтеся, що ваш драйвер інтегрований з цією функцією. Таким чином, ваш драйвер покращить досвід використання користувачами і спростить налагодження проблем з апаратним забезпеченням.
Що далі?
Це перший крок у більш широких зусиллях щодо покращення обробки збоїв пристроїв у Kubernetes. Збираючи відгуки про цю альфа-функцію, спільнота планує кілька ключових вдосконалень перед переходом до бета-версії:
- Детальні повідомлення про стан справності: Щоб покращити досвід налагодження, ми плануємо додати поле з повідомленням зрозумілими людям до gRPC API. Це дозволить драйверам DRA надавати конкретний контекст для стану справності, наприклад, "Температура GPU перевищує поріг" або "Зʼєднання NVLink втрачено".
- Конфігуровані тайм-аути перевірки справності: Тайм-аут для позначення стану справності пристрою як "Unknown" наразі жорстко прописаним у коді. Ми плануємо зробити це конфігурованим, ймовірно, на основі кожного драйвера, щоб краще врахувати різні характеристики звітності про стан справності різного апаратного забезпечення.
- Покращене усунення несправностей після виходу з ладу: Ми вирішимо відому обмеженість, коли оновлення стану справності можуть не застосовуватися до Podʼів, які вже завершили свою роботу. Це виправлення забезпечить збереження стану справності пристрою на момент збою, що є критично важливим для налагодження пакетних завдань та інших "завдань, що виконуються до завершення".
Ця функція була розроблена в рамках KEP-4680, і відгуки спільноти є критично важливими, оскільки ми працюємо над її переходом до бета-версії. Ми маємо більше вдосконалень обробки збоїв пристроїв у k8s і закликаємо вас спробувати це та поділитися своїм досвідом з спільнотою SIG Node!