DeviceClass

DeviceClass 是由供應商或管理員提供的資源,其中包含裝置配置和選擇器。

apiVersion: resource.k8s.io/v1

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

DeviceClass

DeviceClass 是由供應商或管理員提供的資源,其中包含裝置配置和選擇器。它可以在宣告的裝置請求中引用,以應用這些預設。叢集範圍。

這是一個 Alpha 型別,需要啟用 DynamicResourceAllocation 功能門控。


  • apiVersion: resource.k8s.io/v1

  • kind: DeviceClass

  • metadata (ObjectMeta)

    標準物件元資料

  • spec (DeviceClassSpec),必需

    Spec 定義了可以分配的內容以及如何配置它。

    這是可變的。消費者必須做好類隨時可能發生變化(因為它們被更新或替換)的準備。宣告分配僅在分配時基於類中設定的內容進行一次。

    更改 spec 會自動增加 metadata.generation 的值。

DeviceClassSpec

DeviceClassSpec 用於 [DeviceClass] 中,以定義可分配的內容以及如何配置它。


  • config ([]DeviceClassConfiguration)

    原子性:在合併期間將被替換

    Config 定義了適用於透過此類別宣告的每個裝置的配置引數。某些類別可能由多個驅動程式滿足,因此供應商配置的每個例項都適用於一個驅動程式。

    它們被傳遞給驅動程式,但在分配宣告時不予考慮。

    DeviceClassConfiguration 用於 DeviceClass 中。

    • config.opaque (OpaqueDeviceConfiguration)

      Opaque 提供了特定於驅動程式的配置引數。

      OpaqueDeviceConfiguration 以驅動程式供應商定義的格式包含驅動程式的配置引數。

      • config.opaque.driver (string),必需

        Driver 用於確定需要將這些配置引數傳遞給哪個 Kubelet 外掛。

        驅動程式開發人員提供的admission policy 可以使用此欄位來決定是否需要驗證它們。

        必須是 DNS 子域,並且應以供應商擁有的 DNS 域結尾。

      • config.opaque.parameters (RawExtension),必需

        Parameters 可以包含任意資料。驅動程式開發人員負責處理驗證和版本控制。通常包括自識別和版本(Kubernetes 型別的 "kind" + "apiVersion"),以及不同版本之間的轉換。

        原始資料的長度必須小於或等於 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", }, }

        那麼會發生什麼? Decode 首先使用 json 或 yaml 將序列化資料反 marshal 到您的外部 MyAPIObject 中。這會導致 raw JSON 被儲存,但不會被解包。下一步是(使用 pkg/conversion)複製到內部結構中。runtime 包的 DefaultScheme 安裝了轉換函式,這些函式將解包儲存在 RawExtension 中的 JSON,將其轉換為正確的物件型別,並將其儲存在 Object 中。(TODO:如果物件是未知型別,將建立一個 runtime.Unknown 物件並存儲。)*

  • extendedResourceName (string)

    ExtendedResourceName 是此類裝置的擴充套件資源名稱。此類裝置可用於滿足 Pod 的擴充套件資源請求。其格式與 Pod 的擴充套件資源名稱相同。它在叢集中的所有裝置類別中應是唯一的。如果兩個裝置類別具有相同的名稱,則選擇稍後建立的類別來滿足 Pod 的擴充套件資源請求。如果兩個類別同時建立,則選擇按字母順序排序靠前的類別的名稱。

    這是一個 alpha 欄位。

  • selectors ([]DeviceSelector)

    原子性:在合併期間將被替換

    透過此類別宣告的每個裝置都必須滿足每個選擇器。

    DeviceSelector 必須且僅有一個欄位被設定。

    • selectors.cel (CELDeviceSelector)

      CEL 包含用於選擇裝置的 CEL 表示式。

      CELDeviceSelector 包含用於選擇裝置的 CEL 表示式。

      • selectors.cel.expression (string),必需

        Expression 是一個評估單個裝置的 CEL 表示式。當所考慮的裝置滿足所需條件時,它必須評估為 true,否則評估為 false。任何其他結果都是錯誤,並導致裝置分配中止。

        表示式的輸入是一個名為 "device" 的物件,它具有以下屬性:

        • driver (字串): 定義此裝置的驅動程式名稱。
        • attributes (map[string]object): 裝置的屬性,按字首分組(例如 device.attributes["dra.example.com"] 評估為一個包含所有以 "dra.example.com" 為字首的屬性的物件)。
        • capacity (map[string]object): 裝置的容量,按字首分組。
        • allowMultipleAllocations (bool): 裝置(v1.34+,啟用了 DRAConsumableCapacity 功能)。

        示例:考慮一個驅動程式為 "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)
        

        表示式的長度必須小於或等於 10 Ki。評估成本也根據估計的邏輯步驟數受到限制。

DeviceClassList

DeviceClassList 是類別的集合。


  • apiVersion: resource.k8s.io/v1

  • kind: DeviceClassList

  • metadata (ListMeta)

    標準列表元資料

  • items ([]DeviceClass),必需

    Items 是資源類的列表。

操作


get 讀取指定的 DeviceClass

HTTP 請求

GET /apis/resource.k8s.io/v1/deviceclasses/{name}

引數

  • name (在路徑中): string,必填

    DeviceClass 的名稱

  • pretty (在查詢中): string

    pretty

響應

200 (DeviceClass): 成功

401: 未授權

list 列出或 watch DeviceClass 型別的物件

HTTP 請求

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

引數

響應

200 (DeviceClassList): 成功

401: 未授權

create 建立一個 DeviceClass

HTTP 請求

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

引數

響應

200 (DeviceClass): 成功

201 (DeviceClass): 已建立

202 (DeviceClass): 已接受

401: 未授權

update 替換指定的 DeviceClass

HTTP 請求

PUT /apis/resource.k8s.io/v1/deviceclasses/{name}

引數

  • name (在路徑中): string,必填

    DeviceClass 的名稱

  • body: DeviceClass,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • pretty (在查詢中): string

    pretty

響應

200 (DeviceClass): 成功

201 (DeviceClass): 已建立

401: 未授權

patch 部分更新指定的 DeviceClass

HTTP 請求

PATCH /apis/resource.k8s.io/v1/deviceclasses/{name}

引數

  • name (在路徑中): string,必填

    DeviceClass 的名稱

  • body: Patch,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • force (在查詢中): boolean

    force

  • pretty (在查詢中): string

    pretty

響應

200 (DeviceClass): 成功

201 (DeviceClass): 已建立

401: 未授權

delete 刪除一個 DeviceClass

HTTP 請求

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

引數

響應

200 (DeviceClass): 成功

202 (DeviceClass): 已接受

401: 未授權

deletecollection 刪除 DeviceClass 的集合

HTTP 請求

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

引數

響應

200 (Status): OK

401: 未授權

本頁面是自動生成的。

如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。

上次修改時間:2025 年 9 月 4 日 下午 3:37 PST:更新 v1.34 的 API 資源參考 (3e10e8c195)