DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори.apiVersion: resource.k8s.io/v1
import "k8s.io/api/resource/v1"
DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори. На нього можна посилатися у запитах до пристрою, щоб застосувати ці пресети. Охоплює кластер.
Це альфа-тип і вимагає увімкнення функціональної можливості DynamicResourceAllocation.
apiVersion: resource.k8s.io/v1
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), а також конвертацію між різними версіями.
Довжина вихідних даних повинна бути меншою або дорівнювати 10 Ki.
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.)
extendedResourceName (string)
ExtendedResourceName — це розширена назва ресурсу для пристроїв цього класу. Пристрої цього класу можуть використовуватися для задоволення розширених запитів на ресурси пода. Вона має той самий формат, що й назва розширеного ресурсу подп. Вона повинна бути унікальною серед усіх класів пристроїв у кластері. Якщо два класи пристроїв мають однакову назву, то для задоволення розширених запитів на ресурси пода вибирається клас, створений пізніше. Якщо два класи створені одночасно, то вибирається імʼя класу, яке сортується лексикографічно першим.
Це поле alpha.
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): обсяги пристрою, згруповані за префіксом.
- allowMultipleAllocations (bool): властивість allowMultipleAllocations пристрою (v1.34+ з увімкненою функцією DRAConsumableCapacity).
Приклад: Розглянемо пристрій з 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)Довжина виразу повинна бути меншою або дорівнювати 10 Ki. Вартість його обчислення також обмежена на основі передбачуваної кількості логічних кроків.
DeviceClassList
DeviceClassList — це колекція класів.
apiVersion: resource.k8s.io/v1
kind: DeviceClassList
metadata (ListMeta)
Стандартні метадані списку
items ([]DeviceClass), обовʼязково
Items — список класів ресурсів.
Operations
get отримати вказаний DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1/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/v1/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/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the 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/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the 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/v1/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
name of the DeviceClass
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (DeviceClass): OK
202 (DeviceClass): Accepted
401: Unauthorized
deletecollection видалення колекції DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1/deviceclasses
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
Цю сторінку було стоврено автоматично.
Якщо у вас є наміри надіслати пропозиції щодо неї, додайте згадку, про те що сторінку створено автоматично в описі вашого повідомлення. Зміни мають відбутись всюди в проєкті Kubernetes.