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 的欄位,並在您的內部結構中建立一個 Object 欄位。您還需要註冊各種外掛型別。
// 內部包
type MyAPIObject struct { runtime.TypeMeta
json:",inline"
MyPlugin runtime.Objectjson:"myPlugin"
}type PluginA struct { AOption string
json:"aOption"
}// 外部包
type MyAPIObject struct { runtime.TypeMeta
json:",inline"
MyPlugin runtime.RawExtensionjson:"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)
原子性:在合併期間將被替換
透過此類別宣告的每個裝置都必須滿足每個選擇器。
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
響應
200 (DeviceClass): 成功
401: 未授權
list
列出或 watch 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): 成功
401: 未授權
create
建立一個 DeviceClass
HTTP 請求
POST /apis/resource.k8s.io/v1/deviceclasses
引數
body: DeviceClass,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
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
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (DeviceClass): 成功
201 (DeviceClass): 已建立
401: 未授權
patch
部分更新指定的 DeviceClass
HTTP 請求
PATCH /apis/resource.k8s.io/v1/deviceclasses/{name}
引數
name (在路徑中): string,必填
DeviceClass 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (DeviceClass): 成功
201 (DeviceClass): 已建立
401: 未授權
delete
刪除一個 DeviceClass
HTTP 請求
DELETE /apis/resource.k8s.io/v1/deviceclasses/{name}
引數
name (在路徑中): string,必填
DeviceClass 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (DeviceClass): 成功
202 (DeviceClass): 已接受
401: 未授權
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: 未授權
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。