ResourceSlice v1beta2

ResourceSlice 代表由通用驱动程序管理的类似资源池中的一个或多个资源。

apiVersion: resource.k8s.io/v1beta2

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

ResourceSlice

ResourceSlice 代表由通用驱动程序管理的类似资源池中的一个或多个资源。一个资源池可能包含多个 ResourceSlice,具体包含多少个 ResourceSlice 由驱动程序决定。

目前,唯一支持的资源是具有属性和容量的设备。给定资源池中的每个设备,无论有多少 ResourceSlice,都必须具有唯一的名称。设备被发布到哪个 ResourceSlice 可能会随着时间而变化。设备的唯一标识符是元组 <driver name>、<pool name>、<device name>。

每当驱动程序需要更新资源池时,它会增加 pool.Spec.Pool.Generation 编号,并使用新的编号和新的资源定义更新所有 ResourceSlice。消费者只能使用具有最高 Generation 编号的 ResourceSlice,并忽略所有其他 ResourceSlice。

当分配资源池中符合特定条件的所有资源,或者在几种不同备选方案中寻找最佳解决方案时,消费者应该检查资源池中的 ResourceSlice 数量(每个 ResourceSlice 中包含此信息),以确定其对资源池的视图是否完整。如果视图不完整,则应等待驱动程序完成资源池的更新。

对于非节点本地的资源,不会设置节点名称。相反,驱动程序可以使用节点选择器来指定设备在哪里可用。

这是一个 Alpha 类型,需要启用 DynamicResourceAllocation 特性门控。


  • apiVersion: resource.k8s.io/v1beta2

  • kind: ResourceSlice

  • metadata (ObjectMeta)

    标准对象元数据

  • spec (ResourceSliceSpec),必需

    包含驱动程序发布的信息。

    修改 spec 会自动增加 metadata.generation 编号。

ResourceSliceSpec

ResourceSliceSpec 包含驱动程序在一个 ResourceSlice 中发布的信息。


  • driver (string),必需

    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 (string),必需

      Name 用于标识资源池。对于节点本地设备,这通常是节点名称,但不是必需的。

      长度不得超过 253 个字符,并且必须由一个或多个以斜杠分隔的 DNS 子域组成。此字段不可变。

    • pool.resourceSliceCount (int64),必需

      ResourceSliceCount 是此 Generation 编号下资源池中的 ResourceSlice 总数。必须大于零。

      消费者可以使用此字段来检查他们是否看到了属于同一资源池的所有 ResourceSlice。

  • allNodes (boolean)

    AllNodes 表示所有节点都可以访问资源池中的资源。

    必须且只能设置 NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中的一个。

  • devices ([]Device)

    原子性:合并时将被替换

    Devices 列出此资源池中的部分或全部设备。

    条目数不得超过 128 个。

    Device 代表一个独立的硬件实例,可以根据其属性进行选择。除了 name 字段外,必须且只能设置一个字段。

    • devices.name (string),必需

      Name 是资源池中由驱动程序管理的所有设备中的唯一标识符。它必须是一个 DNS 标签。

    • devices.allNodes (boolean)

      AllNodes 表示所有节点都可以访问该设备。

      仅当 Spec.PerDeviceNodeSelection 设置为 true 时才能设置此字段。NodeName、NodeSelector 和 AllNodes 中最多只能设置一个。

    • devices.attributes (map[string]DeviceAttribute)

      Attributes 定义此设备的属性集。每个属性的名称在该集合中必须是唯一的。

      属性和容量的总数上限为 32。

      DeviceAttribute 必须且只能设置一个字段。

      • devices.attributes.bool (boolean)

        BoolValue 是一个布尔值(true/false)。

      • devices.attributes.int (int64)

        IntValue 是一个整数。

      • devices.attributes.string (string)

        StringValue 是一个字符串。长度不得超过 64 个字符。

      • devices.attributes.version (string)

        VersionValue 是一个符合 semver.org 2.0.0 规范的语义版本。长度不得超过 64 个字符。

    • devices.capacity (map[string]DeviceCapacity)

      Capacity 定义此设备的容量集。每个容量的名称在该集合中必须是唯一的。

      属性和容量的总数上限为 32。

      DeviceCapacity 描述与设备关联的数量。

      • devices.capacity.value (Quantity),必需

        Value 定义了某种设备容量的可用量。

    • devices.consumesCounters ([]DeviceCounterConsumption)

      原子性:合并时将被替换

      ConsumesCounters 定义了对 sharedCounters 的引用列表以及设备将从这些计数器集中消耗的计数器集合。

      每个 counterSet 只能有一个条目。

      设备计数器消耗条目的总数必须小于或等于 32。此外,整个 ResourceSlice 中的总数必须小于或等于 1024(例如,64 个设备,每个设备有 16 个计数器)。

      DeviceCounterConsumption 定义设备将从 CounterSet 中消耗的一组计数器。

      • devices.consumesCounters.counterSet (string),必需

        CounterSet 是从中消耗已定义计数器的集合的名称。

      • devices.consumesCounters.counters (map[string]Counter),必需

        Counters 定义设备将消耗的计数器。

        一个设备中的计数器数量上限为 32。此外,所有设备中的所有计数器总数上限为 1024(例如,64 个设备,每个设备有 16 个计数器)。

        Counter 描述与设备关联的数量。

        • devices.consumesCounters.counters.value (Quantity),必需

          Value 定义了某种设备计数器的可用量。

    • devices.nodeName (string)

      NodeName 标识设备所在的节点。

      仅当 Spec.PerDeviceNodeSelection 设置为 true 时才能设置此字段。NodeName、NodeSelector 和 AllNodes 中最多只能设置一个。

    • devices.nodeSelector (NodeSelector)

      NodeSelector 定义设备可用的节点。

      必须且只能使用一个 term。

      仅当 Spec.PerDeviceNodeSelection 设置为 true 时才能设置此字段。NodeName、NodeSelector 和 AllNodes 中最多只能设置一个。

      节点选择器表示对一组节点执行一个或多个标签查询的结果的并集;也就是说,它表示节点选择器项所代表的选择器的 OR 运算结果。

      • devices.nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm),必需

        原子性:合并时将被替换

        必需。节点选择器项的列表。这些项通过 OR 运算组合。

        空或 nil 的节点选择器项不匹配任何对象。它们的各项需求通过 AND 运算组合。TopologySelectorTerm 类型实现了 NodeSelectorTerm 的一个子集。

        • devices.nodeSelector.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)

          原子性:合并时将被替换

          按节点标签列出的节点选择器需求列表。

        • devices.nodeSelector.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)

          原子性:合并时将被替换

          按节点字段列出的节点选择器需求列表。

    • devices.taints ([]DeviceTaint)

      原子性:合并时将被替换

      如果指定,这些是驱动程序定义的污点。

      污点数量上限为 4 个。

      这是一个 Alpha 字段,需要启用 DRADeviceTaints 特性门控。

      附有此污点的设备对任何不容忍此污点,以及通过该 PVC 使用该设备的 Pod,都会产生 "effect" 影响。

      • devices.taints.effect (string),必需

        污点对不容忍该污点,以及通过此类 PVC 使用该设备的 Pod 产生的影响。有效的影响值为 NoSchedule 和 NoExecute。用于节点的 PreferNoSchedule 在此无效。

      • devices.taints.key (string),必需

        要应用于设备的污点键。必须是标签名称。

      • devices.taints.timeAdded (Time)

        TimeAdded 表示添加污点的时间。如果在创建或更新时未设置,则自动添加。

        Time 是 time.Time 的包装器,支持正确地编组(marshaling)为 YAML 和 JSON。包装器提供了 time 包提供的许多工厂方法。

      • devices.taints.value (string)

        与污点键对应的污点值。必须是标签值。

  • nodeName (string)

    NodeName 标识提供此资源池中资源的节点。可以使用字段选择器仅列出属于特定节点的 ResourceSlice 对象。

    此字段可用于限制节点对具有相同节点名称的 ResourceSlice 的访问。它还向自动扩缩器指示,添加与某些旧节点相同类型的新节点也可能使新资源可用。

    必须且只能设置 NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中的一个。此字段不可变。

  • nodeSelector (NodeSelector)

    NodeSelector 定义当资源池不限于单个节点时,哪些节点可以访问资源池中的资源。

    必须且只能使用一个 term。

    必须且只能设置 NodeName、NodeSelector、AllNodes 和 PerDeviceNodeSelection 中的一个。

    节点选择器表示对一组节点执行一个或多个标签查询的结果的并集;也就是说,它表示节点选择器项所代表的选择器的 OR 运算结果。

    • nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm),必需

      原子性:合并时将被替换

      必需。节点选择器项的列表。这些项通过 OR 运算组合。

      空或 nil 的节点选择器项不匹配任何对象。它们的各项需求通过 AND 运算组合。TopologySelectorTerm 类型实现了 NodeSelectorTerm 的一个子集。

      • nodeSelector.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)

        原子性:合并时将被替换

        按节点标签列出的节点选择器需求列表。

      • nodeSelector.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)

        原子性:合并时将被替换

        按节点字段列出的节点选择器需求列表。

  • perDeviceNodeSelection (boolean)

    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 个。

      Counter 描述与设备关联的数量。

      • sharedCounters.counters.value (Quantity),必需

        Value 定义了某种设备计数器的可用量。

    • sharedCounters.name (string),必需

      Name 定义计数器集的名称。它必须是 DNS 标签。

ResourceSliceList

ResourceSliceList 是 ResourceSlice 的集合。


  • apiVersion: resource.k8s.io/v1beta2

  • kind: ResourceSliceList

  • metadata (ListMeta)

    标准列表元数据

  • items ([]ResourceSlice),必需

    Items 是资源 ResourceSlice 的列表。

操作


get 读取指定的 ResourceSlice

HTTP 请求

GET /apis/resource.k8s.io/v1beta2/resourceslices/{name}

参数

  • name (in path): string,必需

    ResourceSlice 的名称

  • pretty (in query): string

    pretty

响应

200 (ResourceSlice): OK

401: 未授权

list 列出或监听 ResourceSlice 类型的对象

HTTP 请求

GET /apis/resource.k8s.io/v1beta2/resourceslices

参数

响应

200 (ResourceSliceList): OK

401: 未授权

create 创建一个 ResourceSlice

HTTP 请求

POST /apis/resource.k8s.io/v1beta2/resourceslices

参数

响应

200 (ResourceSlice): OK

201 (ResourceSlice): 已创建

202 (ResourceSlice): 已接受

401: 未授权

update 替换指定的 ResourceSlice

HTTP 请求

PUT /apis/resource.k8s.io/v1beta2/resourceslices/{name}

参数

响应

200 (ResourceSlice): OK

201 (ResourceSlice): 已创建

401: 未授权

patch 部分更新指定的 ResourceSlice

HTTP 请求

PATCH /apis/resource.k8s.io/v1beta2/resourceslices/{name}

参数

  • name (in path): string,必需

    ResourceSlice 的名称

  • body: Patch,必需

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

响应

200 (ResourceSlice): OK

201 (ResourceSlice): 已创建

401: 未授权

delete 删除 ResourceSlice

HTTP 请求

DELETE /apis/resource.k8s.io/v1beta2/resourceslices/{name}

参数

响应

200 (ResourceSlice): OK

202 (ResourceSlice): 已接受

401: 未授权

deletecollection 删除 ResourceSlice 集合

HTTP 请求

DELETE /apis/resource.k8s.io/v1beta2/resourceslices

参数

响应

200 (Status): OK

401: 未授权

此页面是自动生成的。

如果你打算报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

最后修改于 2025 年 4 月 24 日太平洋标准时间 9:14: v1.33 的 Markdown API 参考 (b84ec30bbb)