DeviceClass v1alpha3
apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
DeviceClass
DeviceClass 是一種供應商或管理員提供的資源,其中包含裝置組態和選擇器。它可以在宣告的裝置請求中被引用,以套用這些預設值。叢集範圍。
這是一個 Alpha 類型,需要啟用 DynamicResourceAllocation 功能閘道。
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClass
metadata (ObjectMeta)
標準物件中繼資料
spec (DeviceClassSpec), required
Spec 定義可以分配什麼以及如何組態它。
這是可變的。消費者必須為類別隨時變更做好準備,無論是因為它們被更新或替換。宣告分配在分配時基於類別中設定的任何內容完成一次。
變更規格會自動遞增 metadata.generation 編號。
DeviceClassSpec
DeviceClassSpec 用於 [DeviceClass] 中,以定義可以分配什麼以及如何組態它。
config ([]DeviceClassConfiguration)
Atomic:將在合併期間被替換
Config 定義適用於透過此類別宣告的每個裝置的組態參數。某些類別可能由多個驅動程式滿足,因此供應商組態的每個實例都適用於一個驅動程式。
它們被傳遞到驅動程式,但在分配宣告時不被考慮。
DeviceClassConfiguration 用於 DeviceClass。
config.opaque (OpaqueDeviceConfiguration)
Opaque 提供驅動程式特定的組態參數。
OpaqueDeviceConfiguration 包含驅動程式的組態參數,格式由驅動程式供應商定義。
config.opaque.driver (字串), 必填
Driver 用於決定哪個 kubelet 外掛程式需要傳遞這些組態參數。
驅動程式開發人員提供的許可政策可以使用此功能來決定是否需要驗證它們。
必須是 DNS 子網域,且應以驅動程式供應商擁有的 DNS 網域結尾。
config.opaque.parameters (RawExtension), 必填
Parameters 可以包含任意資料。驅動程式開發人員有責任處理驗證和版本控制。通常這包括自我識別和版本(Kubernetes 類型的 "kind" + "apiVersion"),以及不同版本之間的轉換。
若要使用此功能,請在您的外部版本化結構中建立一個以 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 將序列化資料解組到您的外部 MyAPIObject 中。這會導致原始 JSON 被儲存,但未解壓縮。下一步是複製(使用 pkg/conversion)到內部結構中。runtime 套件的 DefaultScheme 安裝了轉換函數,這些函數會解壓縮儲存在 RawExtension 中的 JSON,將其轉換為正確的物件類型,並將其儲存在 Object 中。(待辦事項:如果物件類型未知,則會建立並儲存 runtime.Unknown 物件。)*
selectors ([]DeviceSelector)
Atomic:將在合併期間被替換
每個 selector 必須由透過此類別宣告的裝置滿足。
selectors.cel (CELDeviceSelector)
CEL 包含用於選取裝置的 CEL 表達式。
CELDeviceSelector 包含用於選取裝置的 CEL 表達式。
selectors.cel.expression (字串), 必填
Expression 是一個 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 中使用未知前綴作為查找,將傳回空地圖。對未知欄位的任何引用都將導致評估錯誤,並中止分配。
穩健的表達式應在引用屬性之前檢查屬性的存在。
為了易於使用,cel.bind() 函數已啟用,可用於簡化存取具有相同網域的多個屬性的表達式。例如
cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
suitableNodes (NodeSelector)
只有符合 selector 的節點才會在排程器嘗試尋找適合 Pod 的節點時被考慮,當該 Pod 使用尚未分配的請求且該請求透過控制平面控制器分配時。當請求未使用控制平面控制器進行分配時,將忽略此欄位。
設定此欄位是選填的。如果未設定,則所有節點都是候選節點。
這是一個 alpha 欄位,需要啟用 DRAControlPlaneController 功能閘道。
節點選取器表示一組節點上一個或多個標籤查詢結果的聯集;也就是說,它表示節點選取器術語所表示的選取器的 OR 運算。
suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), 必填
Atomic:將在合併期間被替換
必填。節點選取器術語的列表。這些術語是 OR 運算。
空值或空的節點選取器術語不符合任何物件。它們的要求是 AND 運算。TopologySelectorTerm 類型實作了 NodeSelectorTerm 的子集。
suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
Atomic:將在合併期間被替換
依節點標籤的節點選取器需求列表。
suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
Atomic:將在合併期間被替換
依節點欄位的節點選取器需求列表。
DeviceClassList
DeviceClassList 是類別的集合。
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClassList
metadata (ListMeta)
標準列表 metadata
items ([]DeviceClass), 必填
Items 是資源類別的列表。
操作
get
讀取指定的 DeviceClass
HTTP 請求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
參數
name (在路徑中): 字串, 必填
DeviceClass 的名稱
pretty (在查詢中): 字串
回應
200 (DeviceClass): OK
401: 未經授權
list
列出或監看 DeviceClass 類型的物件
HTTP 請求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses
參數
allowWatchBookmarks (在查詢中): 布林值
continue (在查詢中): 字串
fieldSelector (在查詢中): 字串
labelSelector (在查詢中): 字串
limit (在查詢中): 整數
pretty (在查詢中): 字串
resourceVersion (在查詢中): 字串
resourceVersionMatch (在查詢中): 字串
sendInitialEvents (在查詢中): 布林值
timeoutSeconds (在查詢中): 整數
watch (在查詢中): 布林值
回應
200 (DeviceClassList): OK
401: 未經授權
create
建立 DeviceClass
HTTP 請求
POST /apis/resource.k8s.io/v1alpha3/deviceclasses
參數
body: DeviceClass, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
pretty (在查詢中): 字串
回應
200 (DeviceClass): OK
201 (DeviceClass): 已建立
202 (DeviceClass): 已接受
401: 未經授權
update
取代指定的 DeviceClass
HTTP 請求
PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
參數
name (在路徑中): 字串, 必填
DeviceClass 的名稱
body: DeviceClass, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
pretty (在查詢中): 字串
回應
200 (DeviceClass): OK
201 (DeviceClass): 已建立
401: 未經授權
patch
部分更新指定的 DeviceClass
HTTP 請求
PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
參數
name (在路徑中): 字串, 必填
DeviceClass 的名稱
body: Patch, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
force (在查詢中): 布林值
pretty (在查詢中): 字串
回應
200 (DeviceClass): OK
201 (DeviceClass): 已建立
401: 未經授權
delete
刪除 DeviceClass
HTTP 請求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
參數
name (在路徑中): 字串, 必填
DeviceClass 的名稱
body: DeleteOptions
dryRun (在查詢中): 字串
gracePeriodSeconds (在查詢中): 整數
pretty (在查詢中): 字串
propagationPolicy (在查詢中): 字串
回應
200 (DeviceClass): OK
202 (DeviceClass): 已接受
401: 未經授權
deletecollection
刪除 DeviceClass 的集合
HTTP 請求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses
參數
body: DeleteOptions
continue (在查詢中): 字串
dryRun (在查詢中): 字串
fieldSelector (在查詢中): 字串
gracePeriodSeconds (在查詢中): 整數
labelSelector (在查詢中): 字串
limit (在查詢中): 整數
pretty (在查詢中): 字串
propagationPolicy (在查詢中): 字串
resourceVersion (在查詢中): 字串
resourceVersionMatch (在查詢中): 字串
sendInitialEvents (在查詢中): 布林值
timeoutSeconds (在查詢中): 整數
回應
200 (Status): OK
401: 未經授權
此頁面為自動產生。
如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。修正可能需要在 Kubernetes 專案的其他地方進行。