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

    pretty

Відповідь

200 (DeviceClass): OK

401: Unauthorized

list перелік або перегляд обʼєктів типу DeviceClass

HTTP запит

GET /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

200 (DeviceClassList): OK

401: Unauthorized

create створення DeviceClass

HTTP запит

POST /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • pretty (в запиті): string

    pretty

Відповідь

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

    dryRun

  • fieldManager (в запиті): string

    fieldManager

  • fieldValidation (в запиті): string

    fieldValidation

  • force (в запиті): boolean

    force

  • pretty (в запиті): string

    pretty

Відповідь

200 (DeviceClass): OK

201 (DeviceClass): Created

401: Unauthorized

delete видалення DeviceClass

HTTP запит

DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}

Параметри

Відповідь

200 (DeviceClass): OK

202 (DeviceClass): Accepted

401: Unauthorized

deletecollection видалення колекції DeviceClass

HTTP запит

DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses

Параметри

Відповідь

200 (Status): OK

401: Unauthorized

Змінено December 17, 2024 at 11:53 AM PST: Sync upstream after v1.32 release (d7b08bbf8e)