Spec-Zone.ru › Kubernetes

DeviceClass v1alpha3

DeviceClass — это ресурс, предоставляемый поставщиком или администратором, содержащий конфигурацию устройства и селекторы.

apiVersion: resource.k8s.io/v1alpha3

import "k8s.io/api/resource/v1alpha3"

DeviceClass

DeviceClass — это ресурс, предоставляемый поставщиком или администратором, содержащий конфигурацию устройства и селекторы. Он может быть использован в запросах на устройство в претензии (claim) для применения этих пресетов. С коперностью кластера.

Это тип альфа-версии и требует включения функции DynamicResourceAllocation.

  • apiVersion: resource.k8s.io/v1alpha3

  • kind: DeviceClass

  • metadata (ObjectMeta)

    Стандартные метаданные объекта

  • spec (DeviceClassSpec), required

    Spec определяет, что можно выделить и как это настроить.

    Это изменяемый параметр. Потребители должны быть готовы к изменениям классов в любое время, либо из-за обновлений, либо из-за замены. Распределения претензий (claims) выполняются один раз на основе того, что было установлено в классах на момент распределения.

    Изменение spec автоматически увеличивает номер метаданных metadata.generation.

DeviceClassSpec

DeviceClassSpec используется в [DeviceClass] для определения того, что можно выделить и как это настроить.

  • config ([]DeviceClassConfiguration)

    Атомарный: будет заменён во время слияния

    Config определяет параметры конфигурации, которые применяются к каждому устройству, которое затребовано через этот класс. Некоторые классы могут потенциально удовлетворяться несколькими драйверами, поэтому каждая реализация конфигурации поставщика применяется ровно к одному драйверу.

    Они передаются драйверу, но не учитываются при распределении претензии.

    DeviceClassConfiguration используется в DeviceClass.

    • config.opaque (OpaqueDeviceConfiguration)

      Opaque предоставляет параметры конфигурации, специфичные для драйвера.

      OpaqueDeviceConfiguration содержит параметры конфигурации для драйвера в формате, определённом поставщиком драйвера.

      • config.opaque.driver (string), required

        Driver используется для определения того, какой плагин kubelet должен получить эти параметры конфигурации.

        Политика допуска, предоставленная разработчиком драйвера, может использовать это для решения, нужно ли её проверять.

        Должен быть поддоменом DNS и должен заканчиваться доменом DNS, принадлежащим поставщику драйвера.

      • config.opaque.parameters (RawExtension), required

        Parameters могут содержать произвольные данные. Ответственность за валидацию и версионирование лежит на разработчике драйвера. Как правило, это включает самоидентификацию и версию ("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", }, }

        Что происходит? Сначала decode использует json или yaml для разархивирования сериализованных данных во внешнее MyAPIObject. Это приводит к тому, что сырой JSON хранится, но не распаковывается. Следующий шаг — копирование (с использованием pkg/conversion) во внутреннюю структуру. В пакете runtime установлены функции преобразования в DefaultScheme, которые распакуют JSON, хранящийся в RawExtension, преобразуя его в правильный тип объекта и сохраняя его в Object. (TODO: В случае, если объект неизвестного типа, будет создан и сохранён объект runtime.Unknown.)*

  • selectors ([]DeviceSelector)

    Атомарный: будет заменён во время слияния

    Каждый селектор должен удовлетворяться устройством, которое затребовано через этот класс.

    DeviceSelector должен иметь ровно одно установленное поле.

    • selectors.cel (CELDeviceSelector)

      CEL содержит выражение CEL для выбора устройства.

      CELDeviceSelector содержит выражение CEL для выбора устройства.

      • selectors.cel.expression (string), required

        Expression — это выражение CEL, которое оценивает одно устройство. Оно должно оцениваться как true, когда рассматриваемое устройство удовлетворяет желаемым критериям, и как false, когда не удовлетворяет. Любой другой результат является ошибкой и приводит к прерыванию распределения устройств.

        Входными данными выражения является объект с именем "device", который содержит следующие свойства:

        • driver (string): имя драйвера, который определяет это устройство.
        • 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, будет возвращена пустая карта. Любая ссылка на неизвестное поле вызовет ошибку оценки и прервёт распределение.

        Надежное выражение должно проверять наличие атрибутов перед ссылкой на них.

        Для удобства использования функция cel.bind() включена и может быть использована для упрощения выражений, которые обращаются к нескольким атрибутам с одним и тем же доменом. Например:

        cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
        
  • suitableNodes (NodeSelector)

    Только узлы, соответствующие селектору, будут рассмотрены планировщиком при поиске узла, подходящего для Pod, когда этот Pod использует претензию, которая ещё не распределена *и* эта претензия распределяется контроллером плоскости управления. Он игнорируется, когда претензия не использует контроллер плоскости управления для распределения.

    Установка этого поля необязательна. Если оно не установлено, все узлы являются кандидатами.

    Это поле альфа-версии и требует включения функции DRAControlPlaneController.

    Селектор узла представляет собой объединение результатов одного или нескольких запросов по меткам на наборе узлов; то есть, он представляет собой ИЛИ селекторов, представленных терминами селектора узла.

    • suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), required

      Атомарный: будет заменён во время слияния

      Обязательно. Список терминов селектора узлов. Термы находятся в ИЛИ.

      Пустой или нулевой терм селектора узла не соответствует никаким объектам. Требования к ним объединены по И. Тип TopologySelectorTerm реализует подмножество NodeSelectorTerm.

      • suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)

        Атомарный: будет заменён во время слияния

        Список требований селектора узла по меткам узла.

      • suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)

        Атомарный: будет заменён во время слияния

        Список требований селектора узла по полям узла.

DeviceClassList

DeviceClassList — это коллекция классов.

  • apiVersion: resource.k8s.io/v1alpha3

  • kind: DeviceClassList

  • metadata (ListMeta)

    Стандартные метаданные списка

  • items ([]DeviceClass), required

    Items — это список ресурсов классов.

© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/device-class-v1alpha3/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API