--- api_metadata: apiVersion: "resource.k8s.io/v1alpha3" import: "k8s.io/api/resource/v1alpha3" kind: "DeviceTaintRule" content_type: "api_reference" description: "DeviceTaintRule 添加一个污点到与选择算符匹配的所有设备上。" title: "DeviceTaintRule v1alpha3" weight: 15 --- `apiVersion: resource.k8s.io/v1alpha3` `import "k8s.io/api/resource/v1alpha3"` ## DeviceTaintRule {#DeviceTaintRule} DeviceTaintRule 添加一个污点到与选择算符匹配的所有设备上。 这与通过 DRA 驱动直接在 ResourceSlice 中指定污点具有同样的效果。
- **apiVersion**: resource.k8s.io/v1alpha3 - **kind**: DeviceTaintRule - **metadata** (}}">ObjectMeta) 标准的对象元数据。 - **spec** (}}">DeviceTaintRuleSpec),必需 spec 指定选择算符和一个污点。 自动更改 spec 会让 metadata.generation 数值加一。 ## DeviceTaintRuleSpec {#DeviceTaintRuleSpec} DeviceTaintRuleSpec 指定选择算符和一个污点。
- **taint** (DeviceTaint),必需 应用到匹配设备的污点。 **挂接了此污点的设备会对任何不容忍此污点的申领产生“影响”,并通过此申领影响使用申领的 Pod。** - **taint.effect** (string),必需 对不容忍此污点的申领及使用此申领的 Pod 所产生的影响。 有效值包括 `NoSchedule` 和 `NoExecute`。 节点上常用的 `PreferNoSchedule` 在此无效。 - **taint.key** (string),必需 应用到某设备的污点键。必须是标签名称。 - **taint.timeAdded** (Time) timeAdded 表示添加污点的时间。如果未设置,意味着在创建或更新期间自动添加。 **Time 是 time.Time 的包装器,它支持对 YAML 和 JSON 的正确编组。 time 包的许多工厂方法提供了包装器。** - **taint.value** (string) 与污点键对应的污点值。必须是标签值。 - **deviceSelector** (DeviceTaintSelector) deviceSelector 定义污点应用到哪些设备上。 对于要匹配的设备,必须满足所有选择算符条件。 空选择算符匹配所有设备。如果没有选择算符,则不匹配任何设备。 **DeviceTaintSelector 定义 DeviceTaintRule 应用到哪些设备。 空选择算符匹配所有设备。如果没有选择算符,则不匹配任何设备。** - **deviceSelector.device** (string) 如果设置了 device,则仅选择具有该名称的设备。 此字段对应 `slice.spec.devices[].name`。 为避免歧义,也可以设置 driver 和 pool,但不是必需的。 - **deviceSelector.deviceClassName** (string) 如果设置了 deviceClassName,则设备必须满足其中定义的选择算符条件才会被选中。 此字段对应 `class.metadata.name`。 - **deviceSelector.driver** (string) 如果设置了 driver,则仅选择来自该驱动的设备。此字段对应于 `slice.spec.driver`。 - **deviceSelector.pool** (string) 如果设置了 pool,则仅选择属于该资源池的设备。 同时设置 driver 名称可能有助于避免不同驱动使用相同的池名称所带来的歧义,但这不是必需的。 因为从不同驱动中选择池也是有意义的,例如当使用节点本地设备的驱动以节点名称作为 pool 名称时。 - **deviceSelector.selectors** ([]DeviceSelector) **原子性:将在合并期间被替换** selectors 包含与 ResourceClaim 相同的选择条件。目前支持 CEL 表达式。 必须满足所有这些选择算符。 **DeviceSelector 必须有且仅有一个字段被设置。** - **deviceSelector.selectors.cel** (CELDeviceSelector) cel 包含一个用于选择设备的 CEL 表达式。 **CELDeviceSelector 包含一个用于选择设备的 CEL 表达式。** - **deviceSelector.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):设备的容量,按前缀分组。 示例:考虑一个驱动为 "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 字段可用于检查特定驱动,既可以作为高层次的前提条件(即你只想考虑来自此驱动的设备), 也可以作为考虑来自不同驱动的设备的多子句表达式的一部分。 attribute 中每个元素的值类型由设备定义,编写这些表达式的用户必须查阅其特定驱动的文档。 capacity 中元素的值类型为 Quantity。 如果在 device.attributes 或 device.capacity 中使用未知前缀进行查找, 将返回一个空映射。对未知字段的任何引用将导致评估错误和分配中止。 一个健壮的表达式应在引用属性之前检查其是否存在。 为了方便使用,cel.bind() 函数被启用,此函数可用于简化访问同一域的多个属性的表达式。例如: ``` cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool) ``` 此表达式的长度必须小于或等于 10 Ki。其求值的计算成本也会根据预估的逻辑步骤数进行限制。 ## DeviceTaintRuleList {#DeviceTaintRuleList} DeviceTaintRuleList 是 DeviceTaintRules 的集合。
- **apiVersion**: resource.k8s.io/v1alpha3 - **kind**: DeviceTaintRuleList - **metadata** (}}">ListMeta) 标准的列表元数据。 - **items** ([]}}">DeviceTaintRule),必需 items 是 DeviceTaintRules 的列表。 ## 操作 {#Operations}
### `get` 读取指定的 DeviceTaintRule #### HTTP 请求 GET /apis/resource.k8s.io/v1alpha3/devicetaintrules/{name} #### 参数 - **name** (**路径参数**): string,必需 DeviceTaintRule 的名称。 - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">DeviceTaintRule): OK 401: Unauthorized ### `list` 列举或监视类别为 DeviceTaintRule 的对象 #### HTTP 请求 GET /apis/resource.k8s.io/v1alpha3/devicetaintrules #### 参数 - **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 (}}">DeviceTaintRuleList): OK 401: Unauthorized ### `create` 创建 DeviceTaintRule #### HTTP 请求 POST /apis/resource.k8s.io/v1alpha3/devicetaintrules #### 参数 - **body**: }}">DeviceTaintRule,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">DeviceTaintRule): OK 201 (}}">DeviceTaintRule): Created 202 (}}">DeviceTaintRule): Accepted 401: Unauthorized ### `update` 替换指定的 DeviceTaintRule #### HTTP 请求 PUT /apis/resource.k8s.io/v1alpha3/devicetaintrules/{name} #### 参数 - **name** (**路径参数**): string,必需 DeviceTaintRule 的名称。 - **body**: }}">DeviceTaintRule,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">DeviceTaintRule): OK 201 (}}">DeviceTaintRule): Created 401: Unauthorized ### `patch` 部分更新指定的 DeviceTaintRule #### HTTP 请求 PATCH /apis/resource.k8s.io/v1alpha3/devicetaintrules/{name} #### 参数 - **name** (**路径参数**): string,必需 DeviceTaintRule 的名称。 - **body**: }}">Patch,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **force** (**查询参数**): boolean }}">force - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">DeviceTaintRule): OK 201 (}}">DeviceTaintRule): Created 401: Unauthorized ### `delete` 删除 DeviceTaintRule #### HTTP 请求 DELETE /apis/resource.k8s.io/v1alpha3/devicetaintrules/{name} #### 参数 - **name** (**路径参数**): string,必需 DeviceTaintRule 的名称。 - **body**: }}">DeleteOptions - **dryRun** (**查询参数**): string }}">dryRun - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **ignoreStoreReadErrorWithClusterBreakingPotential** (**查询参数**): boolean }}">ignoreStoreReadErrorWithClusterBreakingPotential - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy #### 响应 200 (}}">DeviceTaintRule): OK 202 (}}">DeviceTaintRule): Accepted 401: Unauthorized ### `deletecollection` 删除 DeviceTaintRule 的集合 #### HTTP 请求 DELETE /apis/resource.k8s.io/v1alpha3/devicetaintrules #### 参数 - **body**: }}">DeleteOptions - **continue** (**查询参数**): string }}">continue - **dryRun** (**查询参数**): string }}">dryRun - **fieldSelector** (**查询参数**): string }}">fieldSelector - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **ignoreStoreReadErrorWithClusterBreakingPotential** (**查询参数**): boolean }}">ignoreStoreReadErrorWithClusterBreakingPotential - **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