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), 必需
Spec 定义可以分配的内容以及如何配置它。
这是可变的。消费者必须为类随时更改做好准备,无论是被更新还是被替换。声明分配是基于分配时类中设置的内容一次性完成的。
更改 spec 会自动递增 metadata.generation 数字。
DeviceClassSpec
DeviceClassSpec 用于 [DeviceClass] 中,以定义可以分配的内容以及如何配置它。
config ([]DeviceClassConfiguration)
原子性:将在合并期间被替换
Config 定义适用于通过此类声明的每个设备的配置参数。有些类可能由多个驱动程序满足,因此供应商配置的每个实例都只适用于一个驱动程序。
它们被传递给驱动程序,但在分配声明时不被考虑。
DeviceClassConfiguration 用于 DeviceClass 中。
config.opaque (OpaqueDeviceConfiguration)
Opaque 提供驱动程序特定的配置参数。
OpaqueDeviceConfiguration 包含驱动程序配置参数,其格式由驱动程序供应商定义。
config.opaque.driver (string), 必需
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", }, }
那么会发生什么呢?解码首先使用 json 或 yaml 将序列化数据解组到您的外部 MyAPIObject 中。这会导致存储原始 JSON,但不会解包。下一步是复制(使用 pkg/conversion)到内部结构中。runtime 包的 DefaultScheme 安装了转换函数,这些函数将解包 RawExtension 中存储的 JSON,将其转换为正确的对象类型,并将其存储在 Object 中。(TODO:如果对象类型未知,则会创建并存储 runtime.Unknown 对象。)*
selectors ([]DeviceSelector)
原子性:将在合并期间被替换
每个选择器必须由通过此类声明的设备满足。
selectors.cel (CELDeviceSelector)
CEL 包含用于选择设备的 CEL 表达式。
CELDeviceSelector 包含用于选择设备的 CEL 表达式。
selectors.cel.expression (string), 必需
Expression 是一个 CEL 表达式,它评估单个设备。当所考虑的设备满足所需的条件时,它必须评估为 true,而当不满足条件时,它必须评估为 false。任何其他结果都是错误,并导致设备分配中止。
表达式的输入是一个名为 "device" 的对象,它具有以下属性
- driver (string):定义此设备的驱动程序的名称。
- 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)
当尝试查找适合 Pod 的节点时,只有与选择器匹配的节点才会被调度程序考虑,前提是该 Pod 使用了尚未分配的声明并且该声明通过控制平面控制器分配。当声明不使用控制平面控制器进行分配时,则忽略此字段。
设置此字段是可选的。如果未设置,则所有节点都是候选节点。
这是一个 Alpha 字段,需要启用 DRAControlPlaneController 特性门控。
节点选择器表示一组节点上的一个或多个标签查询结果的并集;也就是说,它表示由节点选择器项表示的选择器的 OR。
suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), 必需
原子性:将在合并期间被替换
必需。节点选择器项的列表。这些项是 OR 关系。
空或空的节点选择器项不匹配任何对象。它们的要求是 AND 关系。TopologySelectorTerm 类型实现了 NodeSelectorTerm 的子集。
suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
原子性:将在合并期间被替换
按节点的标签列出的节点选择器要求列表。
suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
原子性:将在合并期间被替换
按节点的字段列出的节点选择器要求列表。
DeviceClassList
DeviceClassList 是类的集合。
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClassList
metadata (ListMeta)
标准列表元数据
items ([]DeviceClass), 必需
Items 是资源类的列表。
操作
get
读取指定的 DeviceClass
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
name (在路径中): string, 必需
DeviceClass 的名称
pretty (在查询中): string
响应
200 (DeviceClass): 正常
401: 未授权
list
列出或监视 DeviceClass 类型的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
allowWatchBookmarks (查询参数): 布尔值
continue (查询参数): 字符串
fieldSelector (查询参数): 字符串
labelSelector (查询参数): 字符串
limit (查询参数): 整数
pretty (在查询中): string
resourceVersion (查询参数): 字符串
resourceVersionMatch (查询参数): 字符串
sendInitialEvents (查询参数): 布尔值
timeoutSeconds (查询参数): 整数
watch (查询参数): 布尔值
响应
200 (DeviceClassList): 成功
401: 未授权
create
创建一个 DeviceClass
HTTP 请求
POST /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
body: DeviceClass, 必填
dryRun (查询参数): 字符串
fieldManager (查询参数): 字符串
fieldValidation (查询参数): 字符串
pretty (在查询中): string
响应
200 (DeviceClass): 正常
201 (DeviceClass): 已创建
202 (DeviceClass): 已接受
401: 未授权
update
替换指定的 DeviceClass
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
name (在路径中): string, 必需
DeviceClass 的名称
body: DeviceClass, 必填
dryRun (查询参数): 字符串
fieldManager (查询参数): 字符串
fieldValidation (查询参数): 字符串
pretty (在查询中): string
响应
200 (DeviceClass): 正常
201 (DeviceClass): 已创建
401: 未授权
patch
部分更新指定的 DeviceClass
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
name (在路径中): string, 必需
DeviceClass 的名称
body: Patch, 必填
dryRun (查询参数): 字符串
fieldManager (查询参数): 字符串
fieldValidation (查询参数): 字符串
force (查询参数): 布尔值
pretty (在查询中): string
响应
200 (DeviceClass): 正常
201 (DeviceClass): 已创建
401: 未授权
delete
删除一个 DeviceClass
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
name (在路径中): string, 必需
DeviceClass 的名称
body: DeleteOptions
dryRun (查询参数): 字符串
gracePeriodSeconds (查询参数): 整数
pretty (在查询中): string
propagationPolicy (查询参数): 字符串
响应
200 (DeviceClass): 正常
202 (DeviceClass): 已接受
401: 未授权
deletecollection
删除 DeviceClass 的集合
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
body: DeleteOptions
continue (查询参数): 字符串
dryRun (查询参数): 字符串
fieldSelector (查询参数): 字符串
gracePeriodSeconds (查询参数): 整数
labelSelector (查询参数): 字符串
limit (查询参数): 整数
pretty (在查询中): string
propagationPolicy (查询参数): 字符串
resourceVersion (查询参数): 字符串
resourceVersionMatch (查询参数): 字符串
sendInitialEvents (查询参数): 布尔值
timeoutSeconds (查询参数): 整数
响应
200 (Status): 成功
401: 未授权
此页面为自动生成。
如果您计划报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。