--- api_metadata: apiVersion: "resource.k8s.io/v1alpha3" import: "k8s.io/api/resource/v1alpha3" kind: "ResourceSlice" content_type: "api_reference" description: "ResourceSlice 表示一个或多个资源,这些资源位于同一个驱动所管理的、彼此相似的资源构成的资源池。" title: "ResourceSlice v1alpha3" weight: 18 --- `apiVersion: resource.k8s.io/v1alpha3` `import "k8s.io/api/resource/v1alpha3"` ## ResourceSlice {#ResourceSlice} ResourceSlice 表示一个或多个资源,这些资源位于同一个驱动所管理的、彼此相似的资源构成的资源池。 一个池可以包含多个 ResourceSlice,一个池包含多少个 ResourceSlice 由驱动确定。 目前,所支持的资源只能是具有属性和容量的设备。 给定池中的每个设备,无论有多少个 ResourceSlice,必须具有唯一名称。 发布设备的 ResourceSlice 可能会随着时间的推移而变化。 设备的唯一标识符是元组 \<驱动名称\>、\<池名称\>、\<设备名称\>。 每当驱动需要更新池时,pool.spec.pool.generation 编号加一, 并用新的编号和新的资源定义来更新所有 ResourceSlice。 资源用户必须仅使用 generation 编号最大的 ResourceSlice,并忽略所有其他 ResourceSlice。 从池中分配符合某些条件的所有资源或在多个不同分配方案间寻找最佳方案时, 资源用户应检查池中的 ResourceSlice 数量(包含在每个 ResourceSlice 中), 以确定其对池的视图是否完整,如果不完整,则应等到驱动完成对池的更新。 对于非某节点本地的资源,节点名称不会被设置。 驱动可以使用节点选择算符来给出设备的可用位置。 此特性为 Alpha 级别,需要启用 DynamicResourceAllocation 特性门控。
- **apiVersion**: resource.k8s.io/v1alpha3 - **kind**: ResourceSlice - **metadata** (}}">ObjectMeta) 标准的对象元数据。 - **spec** (}}">ResourceSliceSpec),必需 包含驱动所发布的信息。 更改 spec 会自动让 metadata.generation 编号加一。 ## ResourceSliceSpec {#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 之一必须被设置。 - **devices** ([]Device) **原子性:将在合并期间被替换** devices 列举池中的部分或全部设备。 列表大小不得超过 128 个条目。 **Device 表示可以基于其属性进行选择的一个单独硬件实例。name 之外,必须且只能设置一个字段。** - **devices.name** (string),必需 name 是池中由驱动所管理的设备的标识符,在所有设备中唯一。此字段值必须是 DNS 标签。 - **devices.basic** (BasicDevice) basic 定义一个设备实例。 **BasicDevice 定义一个设备实例。** - **devices.basic.attributes** (map[string]DeviceAttribute) attributes 定义设备的属性集。在该集合中每个属性的名称必须唯一。 attributes 和 capacities 两个映射合起来,最多包含 32 个属性。 **DeviceAttribute 必须设置一个字段。** - **devices.basic.attributes.bool** (boolean) bool 字段值是 true/false。 - **devices.basic.attributes.int** (int64) int 字段值是一个整数。 - **devices.basic.attributes.string** (string) string 字段值是一个字符串。不得超过 64 个字符。 - **devices.basic.attributes.version** (string) version 字段值是符合 semver.org 2.0.0 规范的语义版本。不得超过 64 个字符。 - **devices.basic.capacity** (map[string]}}">Quantity) capacity 定义设备的容量集。在该集合中每个容量的名称必须唯一。 attributes 和 capacities 两个映射合起来,最多包含 32 个属性。 - **nodeName** (string) nodeName 标明提供池中资源的某个节点。可以使用字段选择算符仅列举属于特定节点的 ResourceSlice 对象。 此字段可用于限制节点只能访问具有相同节点名称的 ResourceSlice。 此字段还向负责添加相同类型节点的自动扩缩容程序指明,某些旧节点也能够提供新资源供访问。 nodeName、nodeSelector 和 allNodes 三个字段必须设置其一。此字段是不可变更的。 - **nodeSelector** (NodeSelector) nodeSelector 定义当池所涉及的节点不止一个时,在哪些节点上可以访问到资源。 此字段中只能设置一个判定条件。 nodeName、nodeSelector 和 allNodes 三个字段必须设置其一。 **NodeSelector 表示在一组节点上一个或多个标签查询结果的并集; 也就是说,它表示由节点选择算符条件所表示的选择算符的逻辑或计算结果。** - **nodeSelector.nodeSelectorTerms** ([]NodeSelectorTerm),必需 **原子性:将在合并期间被替换** 必需。节点选择算符条件的列表。这些条件最终会被按照逻辑或操作组合起来。 **未指定或空的节点选择算符条件不会匹配任何对象。各个条件最少是按逻辑与运算组合到一起的。 TopologySelectorTerm 类型实现了 NodeSelectorTerm 的一个子集。** - **nodeSelector.nodeSelectorTerms.matchExpressions** ([]}}">NodeSelectorRequirement) **原子性:将在合并期间被替换** 基于节点标签的节点选择算符要求的列表。 - **nodeSelector.nodeSelectorTerms.matchFields** ([]}}">NodeSelectorRequirement) **原子性:将在合并期间被替换** 基于节点字段的节点选择算符要求的列表。 ## ResourceSliceList {#ResourceSliceList} ResourceSliceList 是 ResourceSlice 的集合。
- **apiVersion**: resource.k8s.io/v1alpha3 - **kind**: ResourceSliceList - **items** ([]}}">ResourceSlice),必需 items 是 ResourceSlice 资源的列表。 - **metadata** (}}">ListMeta) 标准的列表元数据。 ## 操作 {#Operations}
### `get` 读取指定的 ResourceSlice #### HTTP 请求 GET /apis/resource.k8s.io/v1alpha3/resourceslices/{name} #### 参数 - **name** (**路径参数**): string,必需 ResourceSlice 的名称。 - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">ResourceSlice): OK 401: Unauthorized ### `list` 列举或监视类别为 ResourceSlice 的对象 #### HTTP 请求 GET /apis/resource.k8s.io/v1alpha3/resourceslices #### 参数 - **allowWatchBookmarks** (**查询参数**): boolean }}">allowWatchBookmarks - **continue** (**查询参数**): string }}">continue - **fieldSelector** (**查询参数**): string }}">fieldSelector - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds - **watch** (**查询参数**): boolean }}">watch #### 响应 200 (}}">ResourceSliceList): OK 401: Unauthorized ### `create` 创建 ResourceSlice #### HTTP 请求 POST /apis/resource.k8s.io/v1alpha3/resourceslices #### 参数 - **body**: }}">ResourceSlice,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">ResourceSlice): OK 201 (}}">ResourceSlice): Created 202 (}}">ResourceSlice): Accepted 401: Unauthorized ### `update` 替换指定的 ResourceSlice #### HTTP 请求 PUT /apis/resource.k8s.io/v1alpha3/resourceslices/{name} #### 参数 - **name** (**路径参数**): string,必需 ResourceSlice 的名称。 - **body**: }}">ResourceSlice,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">ResourceSlice): OK 201 (}}">ResourceSlice): Created 401: Unauthorized ### `patch` 部分更新指定的 ResourceSlice #### HTTP 请求 PATCH /apis/resource.k8s.io/v1alpha3/resourceslices/{name} #### 参数 - **name** (**路径参数**): string,必需 ResourceSlice 的名称。 - **body**: }}">Patch,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **force** (**查询参数**): boolean }}">force - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">ResourceSlice): OK 201 (}}">ResourceSlice): Created 401: Unauthorized ### `delete` 删除 ResourceSlice #### HTTP 请求 DELETE /apis/resource.k8s.io/v1alpha3/resourceslices/{name} #### 参数 - **name** (**路径参数**): string,必需 ResourceSlice 的名称。 - **body**: }}">DeleteOptions - **dryRun** (**查询参数**): string }}">dryRun - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy #### 响应 200 (}}">ResourceSlice): OK 202 (}}">ResourceSlice): Accepted 401: Unauthorized ### `deletecollection` 删除 ResourceSlice 的集合 #### HTTP 请求 DELETE /apis/resource.k8s.io/v1alpha3/resourceslices #### 参数 - **body**: }}">DeleteOptions - **continue** (**查询参数**): string }}">continue - **dryRun** (**查询参数**): string }}">dryRun - **fieldSelector** (**查询参数**): string }}">fieldSelector - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds #### 响应 200 (}}">Status): OK 401: Unauthorized