DeviceClass v1alpha3
DeviceClass
— це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори.apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори. На нього можна посилатися у запитах до пристрою, щоб застосувати ці пресети. Охоплює кластер.
Це альфа-тип і вимагає увімкнення функціональної можливості DynamicResourceAllocation.
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClass
metadata (ObjectMeta)
Стандартний обʼєкт метаданих
spec (DeviceClassSpec), обовʼязково
Spec визначає, що можна призначити і як це налаштувати.
Поле є змінюваним. Споживачі повинні бути готові до того, що класи можуть змінюватися в будь-який час, як через оновлення, так і через заміну. Розподілення заявок виконується один раз на основі того, що було встановлено в класах на момент виділення.
Зміна spec автоматично збільшує номер metadata.generation.
DeviceClassSpec
DeviceClassSpec використовується в [DeviceClass] для визначення того, що може бути призначено і як це налаштувати.
config ([]DeviceClassConfiguration)
Atomic: буде замінено під час злиття
Config визначає параметри конфігурації, які застосовуються до кожного пристрою, що описується у цьому класі. Деякі класи потенційно можуть задовольнятися кількома драйверами, тому кожен екземпляр конфігурації постачальника застосовується лише до одного драйвера.
Вони передаються драйверу, але не враховуються при розподілі заявки.
DeviceClassConfiguration використовується в DeviceClass.
config.opaque (OpaqueDeviceConfiguration)
Opaque надає специфічні для драйвера параметри конфігурації.
OpaqueDeviceConfiguration містить параметри конфігурації драйвера у форматі, визначеному постачальником драйвера.
config.opaque.driver (string), обовʼязково
Driver використовується для визначення, в який втулок kubelet потрібно передати ці параметри конфігурації.
Політика допуску, надана розробником драйвера, може використовувати це для прийняття рішення про те, чи потрібно перевіряти їх.
Повинен бути DNS піддоменом і закінчуватися на DNS домен, що належить постачальнику драйвера.
config.opaque.parameters (RawExtension), обовʼязково
Параметри можуть містити довільні дані. Відповідальність за перевірку та керування версіями покладається на розробника драйверів. Зазвичай це включає самоідентифікацію та версію ("kind" + "apiVersion" для типів Kubernetes), а також конвертацію між різними версіями.
RawExtension використовується для зберігання розширень у зовнішніх версіях.
Щоб використовувати це, створіть поле, яке має тип RawExtension у вашій зовнішній, версійованій структурі, і Object у вашій внутрішній структурі. Також потрібно зареєструвати ваші різні типи втулків.
// Внутрішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.Object `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }
// Зовнішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.RawExtension `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }
// Готовий JSON буде виглядати приблизно так:
{ "kind":"MyAPIObject", "apiVersion":"v1", "myPlugin": { "kind":"PluginA", "aOption":"foo", }, }
Що відбувається? Спочатку декодування використовує json або yaml для десеріалізації даних у ваш зовнішній MyAPIObject. Це призводить до зберігання необробленого JSON, але без розпакування. Наступний крок — копіювання (за допомогою pkg/conversion) у внутрішню структуру. Функції перетворення, встановлені в DefaultScheme пакета runtime, розпаковують JSON, збережений у RawExtension, перетворюючи його в правильний тип обʼєкта і зберігаючи його в Object. (TODO: У випадку, коли обʼєкт має невідомий тип, буде створено і збережено обʼєкт runtime.Unknown.)
selectors ([]DeviceSelector)
Atomic: буде замінено під час злиття
Кожному селектору повинен відповідати пристрій, що заявляється в цьому класі.
DeviceSelector повинен мати рівно одне встановлене поле.
selectors.cel (CELDeviceSelector)
CEL містить вираз CEL для вибору пристрою.
CELDeviceSelector містить вираз CEL для вибору пристрою.
selectors.cel.expression (string), обовʼязковий
Вираз є виразом CEL, який оцінює один пристрій. Він має оцінюватися як true, коли пристрій відповідає бажаним критеріям, і як false, коли не відповідає. Будь-який інший результат є помилкою і призводить до зупинки надання пристроїв.
Вхідні дані виразу — це обʼєкт з назвою "device", який має наступні властивості:
- driver (рядок): імʼя драйвера, який визначає цей пристрій.
- attributes (map[string]object): атрибути пристрою, згруповані за префіксом (наприклад, device.attributes["dra.example.com"] оцінюється як обʼєкт з усіма атрибутами, які були префіксовані "dra.example.com").
- capacity (map[string]object): обсяги пристрою, згруповані за префіксом.
Приклад: Розглянемо пристрій з driver="dra.example.com", який надає два атрибути з назвою "model" та "ext.example.com/family" і один обсяг з назвою "modules". Вхідні дані для цього виразу будуть мати такі поля:
device.driver device.attributes["dra.example.com"].model device.attributes["ext.example.com"].family device.capacity["dra.example.com"].modules
Поле device.driver можна використовувати для перевірки конкретного драйвера, або як загальну попередню умову (тобто ви хочете розглядати лише пристрої від цього драйвера), або як частину виразу з кількома умовами, який призначений для розгляду пристроїв з різних драйверів.
Тип значення кожного атрибута визначається визначенням пристрою, і користувачі, які пишуть ці вирази, повинні звертатися до документації для своїх конкретних драйверів. Тип значення кожного обсягу — Quantity.
Якщо невідомий префікс використовується для запиту в device.attributes або device.capacity, буде повернено порожній map. Будь-яке посилання на невідоме поле спричинить помилку оцінки і зупинку виділення.
Робочий вираз має перевіряти наявність атрибутів перед їх використанням.
Для зручності використання доступна функція cel.bind(), яка може бути використана для спрощення виразів, що звертаються до кількох атрибутів з одного домену. Наприклад:
cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
suitableNodes (NodeSelector)
Лише вузли, що відповідають селектору, будуть враховуватися планувальником при спробі знайти Вузол, що підходить для Podʼа, коли цей Pod використовує запит, який ще не був виділений і цей запит виділяється через контролер панелі управління. Він ігнорується, коли запит не використовує контролер панелі управління для виділення.
Налаштування цього поля є необовʼязковим. Якщо не задано, всі Вузли є кандидатами.
Це поле є альфа-версією і потребує увімкнення функціональної можливості DRAControlPlaneController.
Селектор вузлів представляє об'єднання результатів одного або кількох запитів міток над набором вузлів; тобто, він представляє OR (логічне "або") селекторів, що представлені термінами селектора вузлів.
suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), обов'язково
Atomic: буде замінено під час злиття
Обов'язковий параметр. Список термів селектора вузлів. Терми обʼєднуються оператором OR.
Null або порожній термін селектора вузла не відповідає жодному об'єкту. Вимоги до них складаються за принципом AND. Тип TopologySelectorTerm реалізує підмножину NodeSelectorTerm.
suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
Atomic: буде замінено під час злиття
Список вимог до селектора вузлів за мітками вузлів.
suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
Atomic: буде замінено під час злиття
Список вимог до селектора вузла за полями вузла.
DeviceClassList
DeviceClassList — це колекція класів.
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClassList
metadata (ListMeta)
Стандартні метадані списку
items ([]DeviceClass), обовʼязково
Items —список класів ресурсів.
Operations
get
отримати вказаний DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (DeviceClassList): OK
401: Unauthorized
create
створення DeviceClass
HTTP запит
POST /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
202 (DeviceClass): Accepted
401: Unauthorized
update
заміна вказаного DeviceClass
HTTP запит
PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
patch
часткове оновлення вказаного DeviceClass
HTTP запит
PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
delete
видалення DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (DeviceClass): OK
202 (DeviceClass): Accepted
401: Unauthorized
deletecollection
видалення колекції DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
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): OK
401: Unauthorized