Ця стаття була опублікована більше року тому. Старіші статті можуть містити застарілу інформацію. Перевірте, чи інформація на цій сторінці не втратила актуальності з моменту її публікації.
Kubernetes v1.34: Podʼи звітують про справність ресурсів DRA
Зростання популярності штучного інтелекту та машинного навчання (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
DRAPluginManager у 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!