ResourceSlice
apiVersion: resource.k8s.io/v1
import "k8s.io/api/resource/v1"
ResourceSlice
ResourceSlice 表示由通用驅動程式管理的一組相似資源中的一個或多個資源。一個資源池可能包含多個 ResourceSlice,具體包含多少個 ResourceSlice 由驅動程式決定。
目前,唯一受支援的資源是具有屬性和容量的裝置。給定資源池中的每個裝置,無論有多少個 ResourceSlice,都必須具有唯一的名稱。裝置釋出的 ResourceSlice 可能會隨時間變化。裝置的唯一識別符號是
每當驅動程式需要更新資源池時,它會遞增 pool.Spec.Pool.Generation 編號,並使用新的編號和新的資源定義更新所有 ResourceSlice。消費者只能使用具有最高生成編號的 ResourceSlice,並忽略所有其他 ResourceSlice。
當分配符合某些條件的所有資源池中的資源,或在幾種不同替代方案中尋找最佳解決方案時,消費者應檢查資源池中 ResourceSlice 的數量(包含在每個 ResourceSlice 中),以確定其對資源池的檢視是否完整,如果未完成,則應等待驅動程式完成更新資源池。
對於非節點本地資源,不設定節點名稱。相反,驅動程式可以使用節點選擇器來指定裝置可用位置。
這是一個 Alpha 型別,需要啟用 DynamicResourceAllocation 功能門控。
apiVersion: resource.k8s.io/v1
kind: ResourceSlice
metadata (ObjectMeta)
標準物件元資料
spec (ResourceSliceSpec), 必填
包含由驅動程式釋出的資訊。
更改 spec 會自動增加 metadata.generation 的值。
ResourceSliceSpec
ResourceSliceSpec 包含驅動程式在一個 ResourceSlice 中釋出的資訊。
driver (字串), 必填
Driver 標識提供容量資訊的 DRA 驅動程式。欄位選擇器可用於僅列出具有特定驅動程式名稱的 ResourceSlice 物件。
必須是 DNS 子域,並且應以驅動程式供應商擁有的 DNS 域結尾。此欄位不可變。
pool (ResourcePool), 必填
Pool 描述此 ResourceSlice 所屬的資源池。
ResourcePool 描述 ResourceSlice 所屬的資源池。
pool.generation (int64), 必填
Generation 跟蹤資源池隨時間的變化。每當驅動程式更改資源池中一個或多個資源時,它必須更改屬於該資源池的所有 ResourceSlice 中的 generation。ResourceSlice 的消費者應僅考慮來自具有最高 generation 編號的資源池的資源。generation 可以由驅動程式重置,這對於消費者來說應該沒有問題,假設資源池中的所有 ResourceSlice 都已更新以匹配或刪除。
結合 ResourceSliceCount,此機制使消費者能夠檢測由多個 ResourceSlice 組成且處於不完整狀態的資源池。
pool.name (字串), 必填
Name 用於標識資源池。對於節點本地裝置,這通常是節點名稱,但不是必需的。
它不能超過 253 個字元,並且必須由一個或多個用斜槓分隔的 DNS 子域組成。此欄位不可變。
pool.resourceSliceCount (int64), 必填
ResourceSliceCount 是此 generation 編號下資源池中 ResourceSlice 的總數。必須大於零。
消費者可以使用此來檢查他們是否已看到屬於同一資源池的所有 ResourceSlice。
allNodes (布林值)
AllNodes 表示所有節點都可以訪問資源池中的資源。
NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中必須且只能設定一個。
devices ([]Device)
原子性:在合併期間將被替換
Devices 列出此資源池中的部分或全部裝置。
條目數不得超過 128 個。
Device 表示一個單獨的硬體例項,可以根據其屬性進行選擇。除了名稱,必須且只能設定一個欄位。
devices.name (字串), 必填
Name 是驅動程式在資源池中管理的所有裝置中的唯一識別符號。它必須是 DNS 標籤。
devices.allNodes (布林值)
AllNodes 表示所有節點都可以訪問該裝置。
僅當 Spec.PerDeviceNodeSelection 設定為 true 時才可設定。NodeName、NodeSelector 和 AllNodes 中最多隻能設定一個。
devices.allowMultipleAllocations (布林值)
AllowMultipleAllocations 標記是否允許將裝置分配給多個 DeviceRequest。
如果 AllowMultipleAllocations 設定為 true,則裝置可以多次分配,並且其所有容量都是可消耗的,無論是否定義了 requestPolicy。
devices.attributes (map[string]DeviceAttribute)
Attributes 定義此裝置的屬性集。每個屬性的名稱在該集中必須是唯一的。
屬性和容量的總數不得超過 32 個。
devices.attributes.bool (布林值)
BoolValue 是一個 true/false 值。
devices.attributes.int (int64)
IntValue 是一個數字。
devices.attributes.string (字串)
StringValue 是一個字串。長度不得超過 64 個字元。
devices.attributes.version (字串)
VersionValue 是符合 semver.org 規範 2.0.0 的語義版本。長度不得超過 64 個字元。
devices.bindingConditions ([]string)
原子性:在合併期間將被替換
BindingConditions 定義了繼續繫結所需的條件。在排程 Pod 時,所有這些條件都必須在每個裝置狀態條件中設定為 True,才能繼續將 Pod 繫結到節點。
繫結條件的最大數量為 4 個。
條件必須是有效的條件型別字串。
這是一個 Alpha 欄位,需要啟用 DRADeviceBindingConditions 和 DRAResourceClaimDeviceStatus 功能門。
devices.bindingFailureConditions ([]string)
原子性:在合併期間將被替換
BindingFailureConditions 定義了繫結失敗的條件。它們可以在每個裝置狀態條件中設定。如果任何一個設定為 "True",則表示發生了繫結失敗。
繫結失敗條件的最大數量為 4 個。
條件必須是有效的條件型別字串。
這是一個 Alpha 欄位,需要啟用 DRADeviceBindingConditions 和 DRAResourceClaimDeviceStatus 功能門。
devices.bindsToNode (布林值)
BindsToNode 指示涉及此裝置的分配使用是否必須限制在分配宣告時選擇的節點。如果設定為 true,排程器將設定 ResourceClaim.Status.Allocation.NodeSelector 以匹配進行分配的節點。
這是一個 Alpha 欄位,需要啟用 DRADeviceBindingConditions 和 DRAResourceClaimDeviceStatus 功能門。
devices.capacity (map[string]DeviceCapacity)
Capacity 定義此裝置的容量集。每個容量的名稱在該集中必須是唯一的。
屬性和容量的總數不得超過 32 個。
devices.capacity.value (Quantity), 必填
Value 定義該裝置具有的某種容量的數量。
此欄位反映固定的總容量,不會更改。已消耗的數量由排程器單獨跟蹤,不影響此值。
devices.capacity.requestPolicy (CapacityRequestPolicy)
RequestPolicy 定義當裝置允許被多個分配共享時,此 DeviceCapacity 必須如何消耗。
Device 必須將 allowMultipleAllocations 設定為 true 才能設定 requestPolicy。
如果未設定,則容量請求不受限制:請求可以消耗任意數量的容量,只要所有分配的總消耗不超過裝置定義的容量即可。如果 request 也未設定,則預設為完整容量值。
*CapacityRequestPolicy 定義請求如何消耗裝置容量。
ValidRequestValues 中不得設定多個。*
devices.capacity.requestPolicy.default (Quantity)
Default 指定 DeviceRequest 的 Capacity 中不包含此容量條目的請求消耗此容量的數量。
devices.capacity.requestPolicy.validRange (CapacityRequestPolicyRange)
ValidRange 定義了消耗請求中可接受的數量值範圍。
如果設定了此欄位,則必須定義 Default,並且它必須落在定義的 ValidRange 內。
如果請求的數量不在定義的範圍內,則請求違反策略,並且無法分配此裝置。
如果請求不包含此容量條目,則使用 Default 值。
*CapacityRequestPolicyRange 定義了可消耗容量值的有效範圍。
如果請求的數量小於 Min,則向上舍入到 Min 值。
如果設定了 Step 且請求的數量在 Min 和 Max 之間(但不與 Step 對齊),則將向上舍入到等於 Min + (n * Step) 的下一個值。
如果未設定 Step,則請求的數量在 Min 到 Max 範圍內(如果設定)時按原樣使用。
如果請求或舍入的數量超過 Max(如果設定),則請求不滿足策略,並且無法分配裝置。*
devices.capacity.requestPolicy.validRange.min (Quantity), 必填
Min 指定消耗請求允許的最小容量。
Min 必須大於或等於零,並且小於或等於容量值。requestPolicy.default 必須大於或等於最小值。
devices.capacity.requestPolicy.validRange.max (Quantity)
Max 定義可請求容量的上限。
Max 必須小於或等於容量值。Min 和 requestPolicy.default 必須小於或等於最大值。
devices.capacity.requestPolicy.validRange.step (Quantity)
Step 定義範圍內有效容量量之間的步長。
Max(如果設定)和 requestPolicy.default 必須是 Step 的倍數。Min + Step 必須小於或等於容量值。
devices.capacity.requestPolicy.validValues ([]Quantity)
原子性:在合併期間將被替換
ValidValues 定義消耗請求中可接受的數量值集。
條目數不得超過 10 個。必須按升序排序。
如果設定了此欄位,則必須定義 Default,並且它必須包含在 ValidValues 列表中。
如果請求的數量不匹配任何有效值,但小於某些有效值,則排程器計算大於或等於請求的最小有效值。即:min(ceil(requestedValue) ∈ validValues),其中 requestedValue ≤ max(validValues)。
如果請求的數量超過所有有效值,則請求違反策略,並且無法分配此裝置。
devices.consumesCounters ([]DeviceCounterConsumption)
原子性:在合併期間將被替換
ConsumesCounters 定義了共享計數器的引用列表以及裝置將從這些計數器集中消耗的計數器集。
每個 counterSet 只能有一個條目。
裝置計數器消耗條目的總數必須 <= 32。此外,整個 ResourceSlice 中的總數必須 <= 1024(例如,64 個裝置,每個裝置有 16 個計數器)。
DeviceCounterConsumption 定義了裝置將從 CounterSet 中消耗的一組計數器。
devices.consumesCounters.counterSet (字串), 必填
CounterSet 是從中消耗定義的計數器集的名稱。
devices.consumesCounters.counters (map[string]Counter), 必填
Counters 定義裝置將消耗的計數器。
裝置中計數器的最大數量為 32 個。此外,所有裝置中所有計數器的最大數量為 1024 個(例如,64 個裝置,每個裝置有 16 個計數器)。
devices.consumesCounters.counters.value (Quantity), 必填
Value 定義可用裝置計數器的數量。
devices.nodeName (字串)
NodeName 標識裝置可用的節點。
僅當 Spec.PerDeviceNodeSelection 設定為 true 時才可設定。NodeName、NodeSelector 和 AllNodes 中最多隻能設定一個。
devices.nodeSelector (NodeSelector)
NodeSelector 定義裝置可用的節點。
必須且只能使用一個術語。
僅當 Spec.PerDeviceNodeSelection 設定為 true 時才可設定。NodeName、NodeSelector 和 AllNodes 中最多隻能設定一個。
節點選擇器表示一個或多個標籤查詢在一組節點上的結果的並集;也就是說,它表示節點選擇器項所表示的選擇器的 OR 運算。
devices.nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm), 必填
原子性:在合併期間將被替換
必需。節點選擇器項的列表。這些項是 OR 關係。
空或空的節點選擇器項不匹配任何物件。它們的要求是 AND 關係。TopologySelectorTerm 型別實現了 NodeSelectorTerm 的子集。
devices.nodeSelector.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
原子性:在合併期間將被替換
透過節點標籤列出的節點選擇器要求列表。
devices.nodeSelector.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
原子性:在合併期間將被替換
透過節點欄位列出的節點選擇器要求列表。
devices.taints ([]DeviceTaint)
原子性:在合併期間將被替換
如果指定,這些是驅動程式定義的汙點。
汙點的最大數量為 4 個。
這是一個 Alpha 欄位,需要啟用 DRADeviceTaints 功能門。
此汙點所附著的裝置對任何不容忍此汙點(並透過宣告傳遞給使用此宣告的 Pod)的宣告都具有“effect”。
devices.taints.effect (字串), 必填
汙點對不容忍此汙點的宣告以及透過此類宣告對使用它們的 Pod 的影響。有效的影響是 NoSchedule 和 NoExecute。此處不允許使用節點上使用的 PreferNoSchedule。
devices.taints.key (字串), 必填
要應用於裝置的汙點鍵。必須是標籤名稱。
devices.taints.timeAdded (Time)
TimeAdded 表示新增汙點的時間。如果未設定,則在建立或更新期間自動新增。
Time 是 time.Time 的一個包裝器,支援正確地編組到 YAML 和 JSON。提供了 time 包提供的許多工廠方法的包裝器。
devices.taints.value (字串)
與汙點鍵對應的汙點值。必須是標籤值。
nodeName (字串)
NodeName 標識提供此資源池中資源的節點。欄位選擇器可用於僅列出屬於特定節點的 ResourceSlice 物件。
此欄位可用於限制節點對具有相同節點名稱的 ResourceSlice 的訪問。它還向自動擴縮器指示,新增與某些舊節點相同型別的新節點也可能會使新資源可用。
NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中必須且只能設定一個。此欄位不可變。
nodeSelector (NodeSelector)
NodeSelector 定義當資源池不限於單個節點時,哪些節點可以訪問資源池中的資源。
必須且只能使用一個術語。
NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中必須且只能設定一個。
節點選擇器表示一個或多個標籤查詢在一組節點上的結果的並集;也就是說,它表示節點選擇器項所表示的選擇器的 OR 運算。
nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm), 必填
原子性:在合併期間將被替換
必需。節點選擇器項的列表。這些項是 OR 關係。
空或空的節點選擇器項不匹配任何物件。它們的要求是 AND 關係。TopologySelectorTerm 型別實現了 NodeSelectorTerm 的子集。
nodeSelector.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
原子性:在合併期間將被替換
透過節點標籤列出的節點選擇器要求列表。
nodeSelector.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
原子性:在合併期間將被替換
透過節點欄位列出的節點選擇器要求列表。
perDeviceNodeSelection (布林值)
PerDeviceNodeSelection 定義從節點對資源池中資源的訪問是在 ResourceSlice 級別還是在每個裝置上設定。如果設定為 true,則 ResourceSlice 中定義的每個裝置必須單獨指定此項。
NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中必須且只能設定一個。
sharedCounters ([]CounterSet)
原子性:在合併期間將被替換
SharedCounters 定義了一個計數器集列表,每個計數器集都有一個名稱和可用計數器的列表。
ResourceSlice 中 SharedCounters 的名稱必須是唯一的。
所有計數器集中計數器的最大數量為 32 個。
*CounterSet 定義了一個命名的計數器集,可供 ResourceSlice 中定義的裝置使用。
計數器本身不可分配,但可以由裝置引用。當裝置被分配時,其使用的計數器部分將不再可供其他裝置使用。*
sharedCounters.counters (map[string]Counter), 必填
Counters 定義此 CounterSet 的計數器集。每個計數器的名稱在該集中必須是唯一的,並且必須是 DNS 標籤。
所有計數器集中計數器的最大數量為 32 個。
sharedCounters.counters.value (Quantity), 必填
Value 定義可用裝置計數器的數量。
sharedCounters.name (字串), 必填
Name 定義計數器集的名稱。它必須是 DNS 標籤。
ResourceSliceList
ResourceSliceList 是 ResourceSlice 的集合。
apiVersion: resource.k8s.io/v1
kind: ResourceSliceList
metadata (ListMeta)
標準列表元資料
items ([]ResourceSlice), 必填
Items 是資源 ResourceSlice 的列表。
操作
get
讀取指定的 ResourceSlice
HTTP 請求
GET /apis/resource.k8s.io/v1/resourceslices/{name}
引數
name (在路徑中): string,必填
ResourceSlice 的名稱
pretty (在查詢中): string
響應
200 (ResourceSlice): OK
401: 未授權
list
列出或監視 ResourceSlice 型別的物件
HTTP 請求
GET /apis/resource.k8s.io/v1/resourceslices
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (ResourceSliceList): OK
401: 未授權
create
建立 ResourceSlice
HTTP 請求
POST /apis/resource.k8s.io/v1/resourceslices
引數
body: ResourceSlice, 必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ResourceSlice): OK
201 (ResourceSlice): 已建立
202 (ResourceSlice): 已接受
401: 未授權
update
替換指定的 ResourceSlice
HTTP 請求
PUT /apis/resource.k8s.io/v1/resourceslices/{name}
引數
name (在路徑中): string,必填
ResourceSlice 的名稱
body: ResourceSlice, 必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (ResourceSlice): OK
201 (ResourceSlice): 已建立
401: 未授權
patch
部分更新指定的 ResourceSlice
HTTP 請求
PATCH /apis/resource.k8s.io/v1/resourceslices/{name}
引數
name (在路徑中): string,必填
ResourceSlice 的名稱
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (ResourceSlice): OK
201 (ResourceSlice): 已建立
401: 未授權
delete
刪除 ResourceSlice
HTTP 請求
DELETE /apis/resource.k8s.io/v1/resourceslices/{name}
引數
name (在路徑中): string,必填
ResourceSlice 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (ResourceSlice): OK
202 (ResourceSlice): 已接受
401: 未授權
deletecollection
刪除 ResourceSlice 集合
HTTP 請求
DELETE /apis/resource.k8s.io/v1/resourceslices
引數
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 專案的其他地方進行。