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 项目的其他地方进行。