ResourceClaim v1beta2

ResourceClaim 描述了对集群中资源的访问请求,供工作负载使用。

apiVersion: resource.k8s.io/v1beta2

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

ResourceClaim

ResourceClaim 描述了对集群中资源的访问请求,供工作负载使用。例如,如果工作负载需要具有特定属性的加速设备,则通过此方式表达该请求。status 节跟踪此声明是否已满足以及已分配了哪些特定资源。

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


  • apiVersion: resource.k8s.io/v1beta2

  • kind: ResourceClaim

  • metadata (ObjectMeta)

    标准的元数据

  • spec (ResourceClaimSpec),必需

    Spec 描述了正在请求的内容以及如何配置它。此规约是不可变的。

  • status (ResourceClaimStatus)

    Status 描述了该声明是否已准备好使用以及已分配了什么。

ResourceClaimSpec

ResourceClaimSpec 定义了在 ResourceClaim 中请求的内容以及如何配置它。


  • devices (DeviceClaim)

    Devices 定义了如何请求设备。

    DeviceClaim 定义了如何在 ResourceClaim 中请求设备。

    • devices.config ([]DeviceClaimConfiguration)

      原子性:在合并时将被替换

      此字段为多个潜在驱动程序保存配置,这些驱动程序可以满足此声明中的请求。在分配声明时会忽略此字段。

      DeviceClaimConfiguration 用于 DeviceClaim 中的配置参数。

      • devices.config.opaque (OpaqueDeviceConfiguration)

        Opaque 提供驱动程序特定的配置参数。

        OpaqueDeviceConfiguration 包含驱动程序的配置参数,其格式由驱动程序供应商定义。

        • devices.config.opaque.driver (string),必需

          Driver 用于确定哪些 kubelet 插件需要传递这些配置参数。

          驱动程序开发者提供的准入策略可以使用此字段来决定是否需要验证它们。

          必须是 DNS 子域,并且应以驱动程序供应商拥有的 DNS 域结尾。

        • devices.config.opaque.parameters (RawExtension),必需

          Parameters 可以包含任意数据。驱动程序开发者负责处理验证和版本控制。通常这包括自识别和版本(Kubernetes 类型使用 "kind" + "apiVersion"),以及不同版本之间的转换。

          原始数据的长度必须小于或等于 10 Ki。

          *RawExtension 用于在外部版本中保存扩展。

          要使用此字段,请在外部版本化结构中创建一个类型为 RawExtension 的字段,并在内部结构中创建一个类型为 Object 的字段。你还需要注册各种插件类型。

          // 内部包

          type MyAPIObject struct {
          	runtime.TypeMeta `json:",inline"`
          	MyPlugin runtime.Object `json:"myPlugin"`
          }
          
          type PluginA struct {
          	AOption string `json:"aOption"`
          }
          

          // 外部包

          type MyAPIObject struct {
          	runtime.TypeMeta `json:",inline"`
          	MyPlugin runtime.RawExtension `json:"myPlugin"`
          }
          
          type PluginA struct {
          	AOption string `json:"aOption"`
          }
          

          // 在线路上,JSON 将看起来像这样

          {
          	"kind":"MyAPIObject",
          	"apiVersion":"v1",
          	"myPlugin": {
          		"kind":"PluginA",
          		"aOption":"foo",
          	},
          }
          

          那么会发生什么?Decode 首先使用 json 或 yaml 将序列化数据反序列化到外部 MyAPIObject 中。这将导致原始 JSON 被存储,但未解包。下一步是将数据(使用 pkg/conversion)复制到内部结构中。运行时包的 DefaultScheme 安装了转换函数,这些函数将解包存储在 RawExtension 中的 JSON,将其转换为正确的对象类型,并存储在 Object 中。(待办:如果对象是未知类型,将创建并存储 runtime.Unknown 对象。)*

      • devices.config.requests ([]string)

        原子性:在合并时将被替换

        Requests 列出了配置适用的请求名称。如果为空,则适用于所有请求。

        子请求的引用必须包含主请求的名称,并且可以使用 <主请求>[/<子请求>] 格式包含子请求。如果只给定主请求,则配置适用于所有子请求。

    • devices.constraints ([]DeviceConstraint)

      原子性:在合并时将被替换

      分配给此声明的设备集必须满足这些约束。

      DeviceConstraint 必须除了 Requests 字段外,只设置一个字段。

      • devices.constraints.matchAttribute (string)

        MatchAttribute 要求所有相关设备都具有此属性,并且其类型和值在这些设备之间是相同的。

        例如,如果你指定了 "dra.example.com/numa"(一个假设的例子!),那么只会选择同一 NUMA 节点中的设备。没有该属性的设备将不会被选中。所有设备都应为此属性使用相同类型的值,因为这是其规范的一部分,但如果某个设备不使用,则它也不会被选中。

        必须包含域限定符。

      • devices.constraints.requests ([]string)

        原子性:在合并时将被替换

        Requests 是此声明中一个或多个必须共同满足此约束的请求列表。如果一个请求由多个设备满足,那么所有这些设备都必须满足该约束。如果未指定此字段,则此约束适用于此声明中的所有请求。

        子请求的引用必须包含主请求的名称,并且可以使用 <主请求>[/<子请求>] 格式包含子请求。如果只给定主请求,则约束适用于所有子请求。

    • devices.requests ([]DeviceRequest)

      原子性:在合并时将被替换

      Requests 表示对必须全部满足的不同设备的单独请求。如果为空,则无需分配任何内容。

      DeviceRequest 是对声明所需设备的请求。这通常是对单个资源(如设备)的请求,但也可以请求多个相同的设备。使用 FirstAvailable 还可以提供按优先级排序的请求列表。

      • devices.requests.name (string),必需

        Name 可用于在 pod.spec.containers[].resources.claims 条目和声明的约束中引用此请求。

        当 Exactly 字段被设置时,使用 DeviceRequest 中的名称进行引用将唯一标识一个请求。当 FirstAvailable 字段被设置时,对 DeviceRequest 名称的引用将匹配调度器选择的任何子请求。

        必须是 DNS 标签。

      • devices.requests.exactly (ExactDeviceRequest)

        Exactly 指定了必须精确满足的单个请求的详细信息,以便请求得以满足。

        Exactly 或 FirstAvailable 必须设置其中一个。

        ExactDeviceRequest 是对一个或多个相同设备的请求。

        • devices.requests.exactly.deviceClassName (string),必需

          DeviceClassName 引用一个特定的 DeviceClass,后者可以定义此请求将继承的其他配置和选择器。

          DeviceClassName 是必需的。

          管理员可以使用此字段来限制哪些设备可以被请求,只需安装带有允许设备选择器的类即可。如果用户可以自由请求任何内容而不受限制,那么管理员可以为用户创建一个空的 DeviceClass 供引用。

        • devices.requests.exactly.adminAccess (boolean)

          AdminAccess 表示这是一个对设备进行管理访问的声明。带有 AdminAccess 的声明预计将用于设备的监控或其他管理服务。它们会忽略所有关于访问模式和任何资源分配的普通设备声明。

          这是一个 Alpha 字段,需要启用 DRAAdminAccess 特性门控。如果此字段未设置或设置为 false,则禁用管理访问;否则,启用管理访问。

        • devices.requests.exactly.allocationMode (string)

          AllocationMode 及其相关字段定义了如何分配设备来满足此请求。支持的值有:

          • ExactCount:此请求针对特定数量的设备。这是默认值。确切数量在 count 字段中提供。

          • All:此请求针对池中所有匹配的设备。节点上必须至少存在一个设备,分配才能成功。如果某些设备已被分配,分配将失败,除非请求了 adminAccess。

          如果未指定 AllocationMode,则默认模式为 ExactCount。如果模式为 ExactCount 且未指定 count,则默认数量为一。任何其他请求都必须指定此字段。

          未来可能会添加更多模式。客户端必须拒绝处理具有未知模式的请求。

        • devices.requests.exactly.count (int64)

          Count 仅在计数模式为 "ExactCount" 时使用。必须大于零。如果 AllocationMode 是 ExactCount 且未指定此字段,则默认值为一。

        • devices.requests.exactly.selectors ([]DeviceSelector)

          原子性:在合并时将被替换

          Selectors 定义了特定设备必须满足的标准,以便将其考虑用于此请求。设备必须满足所有选择器才能被考虑。

          DeviceSelector 必须只设置一个字段。

          • devices.requests.exactly.selectors.cel (CELDeviceSelector)

            CEL 包含一个用于选择设备的 CEL 表达式。

            CELDeviceSelector 包含一个用于选择设备的 CEL 表达式。

            • devices.requests.exactly.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 字段可用于检查特定驱动程序,既可以作为高级前置条件(即,你只想考虑来自此驱动程序的设备),也可以作为多子句表达式的一部分,用于考虑来自不同驱动程序的设备。

              每个属性的值类型由设备定义定义,编写这些表达式的用户必须查阅其特定驱动程序的文档。每个容量的值类型为 Quantity。

              如果在 device.attributes 或 device.capacity 中使用未知前缀进行查找,将返回一个空映射。任何对未知字段的引用都将导致评估错误并中止分配。

              一个健壮的表达式应在引用属性之前检查其是否存在。

              为了便于使用,启用了 cel.bind() 函数,可用于简化访问同一域中多个属性的表达式。例如:

              cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
              

              表达式的长度必须小于或等于 10 Ki。评估成本也根据逻辑步骤的估计数量受到限制。

        • devices.requests.exactly.tolerations ([]DeviceToleration)

          原子性:在合并时将被替换

          如果指定,则为请求的容忍度。

          对于 NoSchedule 的容忍度是分配具有该效果污点的设备所必需的。NoExecute 也是如此。

          此外,如果在分配后,任何已分配设备被施加了 NoExecute 污点且该效果不被容忍,则所有使用此 ResourceClaim 的 Pod 都将被删除以驱逐它们。调度器不会允许新 Pod 在声明拥有这些带污点的设备时预留该声明。一旦所有 Pod 被驱逐,该声明将被释放。

          容忍度的最大数量为 16。

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

          附着此 DeviceToleration 的 ResourceClaim 容忍使用匹配操作符 <operator> 匹配三元组 <key,value,effect> 的任何污点。

          • devices.requests.exactly.tolerations.effect (string)

            Effect 指示要匹配的污点效果。为空表示匹配所有污点效果。如果指定,允许的值为 NoSchedule 和 NoExecute。

          • devices.requests.exactly.tolerations.key (string)

            Key 是容忍度适用的污点键。为空表示匹配所有污点键。如果键为空,operator 必须为 Exists;此组合表示匹配所有值和所有键。必须是标签名称。

          • devices.requests.exactly.tolerations.operator (string)

            Operator 表示键与值之间的关系。有效操作符为 Exists 和 Equal。默认为 Equal。Exists 等同于值的通配符,因此 ResourceClaim 可以容忍特定类别的所有污点。

          • devices.requests.exactly.tolerations.tolerationSeconds (int64)

            TolerationSeconds 表示容忍度容忍污点(必须是 NoExecute 效果,否则此字段被忽略)的时间段。默认情况下,它未设置,这意味着永远容忍污点(不驱逐)。系统将零和负值视为 0(立即驱逐)。如果大于零,则计算 Pod 需要被驱逐的时间为 <添加污点的时间> + <容忍秒数>。

          • devices.requests.exactly.tolerations.value (string)

            Value 是容忍度匹配的污点值。如果 operator 是 Exists,该值必须为空;否则,只是一个常规字符串。必须是标签值。

      • devices.requests.firstAvailable ([]DeviceSubRequest)

        原子性:在合并时将被替换

        FirstAvailable 包含子请求,调度器将从中选择恰好一个。它尝试按照此处列出的顺序来满足它们。因此,如果列表中有两个条目,调度器只有在确定第一个无法使用时才会检查第二个。

        DRA 尚未实现评分,因此调度器将选择满足声明中所有请求的第一组设备。如果可以在多个节点上满足要求,则其他调度特性将决定选择哪个节点。这意味着分配给声明的设备集可能不是集群中可用的最优设备集。评分将在以后实现。

        *DeviceSubRequest 描述了声明的 claim.spec.devices.requests[].firstAvailable 数组中提供的设备的请求。每个请求通常是针对单个资源(如设备)的请求,但也可以请求多个相同的设备。

        DeviceSubRequest 类似于 ExactDeviceRequest,但不暴露 AdminAccess 字段,因为该字段仅在请求特定设备时才支持。*

        • devices.requests.firstAvailable.deviceClassName (string),必需

          DeviceClassName 引用一个特定的 DeviceClass,后者可以定义此子请求将继承的其他配置和选择器。

          类是必需的。哪些类可用取决于集群。

          管理员可以使用此字段来限制哪些设备可以被请求,只需安装带有允许设备选择器的类即可。如果用户可以自由请求任何内容而不受限制,那么管理员可以为用户创建一个空的 DeviceClass 供引用。

        • devices.requests.firstAvailable.name (string),必需

          Name 可用于在声明的约束列表或配置列表中引用此子请求。引用必须使用 <主请求>/<子请求> 格式。

          必须是 DNS 标签。

        • devices.requests.firstAvailable.allocationMode (string)

          AllocationMode 及其相关字段定义了如何分配设备来满足此子请求。支持的值有:

          • ExactCount:此请求针对特定数量的设备。这是默认值。确切数量在 count 字段中提供。

          • All:此子请求针对池中所有匹配的设备。如果某些设备已被分配,分配将失败,除非请求了 adminAccess。

          如果未指定 AllocationMode,则默认模式为 ExactCount。如果模式为 ExactCount 且未指定 count,则默认数量为一。任何其他子请求都必须指定此字段。

          未来可能会添加更多模式。客户端必须拒绝处理具有未知模式的请求。

        • devices.requests.firstAvailable.count (int64)

          Count 仅在计数模式为 "ExactCount" 时使用。必须大于零。如果 AllocationMode 是 ExactCount 且未指定此字段,则默认值为一。

        • devices.requests.firstAvailable.selectors ([]DeviceSelector)

          原子性:在合并时将被替换

          Selectors 定义了特定设备必须满足的标准,以便将其考虑用于此子请求。设备必须满足所有选择器才能被考虑。

          DeviceSelector 必须只设置一个字段。

          • devices.requests.firstAvailable.selectors.cel (CELDeviceSelector)

            CEL 包含一个用于选择设备的 CEL 表达式。

            CELDeviceSelector 包含一个用于选择设备的 CEL 表达式。

            • devices.requests.firstAvailable.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 字段可用于检查特定驱动程序,既可以作为高级前置条件(即,你只想考虑来自此驱动程序的设备),也可以作为多子句表达式的一部分,用于考虑来自不同驱动程序的设备。

              每个属性的值类型由设备定义定义,编写这些表达式的用户必须查阅其特定驱动程序的文档。每个容量的值类型为 Quantity。

              如果在 device.attributes 或 device.capacity 中使用未知前缀进行查找,将返回一个空映射。任何对未知字段的引用都将导致评估错误并中止分配。

              一个健壮的表达式应在引用属性之前检查其是否存在。

              为了便于使用,启用了 cel.bind() 函数,可用于简化访问同一域中多个属性的表达式。例如:

              cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
              

              表达式的长度必须小于或等于 10 Ki。评估成本也根据逻辑步骤的估计数量受到限制。

        • devices.requests.firstAvailable.tolerations ([]DeviceToleration)

          原子性:在合并时将被替换

          如果指定,则为请求的容忍度。

          对于 NoSchedule 的容忍度是分配具有该效果污点的设备所必需的。NoExecute 也是如此。

          此外,如果在分配后,任何已分配设备被施加了 NoExecute 污点且该效果不被容忍,则所有使用此 ResourceClaim 的 Pod 都将被删除以驱逐它们。调度器不会允许新 Pod 在声明拥有这些带污点的设备时预留该声明。一旦所有 Pod 被驱逐,该声明将被释放。

          容忍度的最大数量为 16。

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

          附着此 DeviceToleration 的 ResourceClaim 容忍使用匹配操作符 <operator> 匹配三元组 <key,value,effect> 的任何污点。

          • devices.requests.firstAvailable.tolerations.effect (string)

            Effect 指示要匹配的污点效果。为空表示匹配所有污点效果。如果指定,允许的值为 NoSchedule 和 NoExecute。

          • devices.requests.firstAvailable.tolerations.key (string)

            Key 是容忍度适用的污点键。为空表示匹配所有污点键。如果键为空,operator 必须为 Exists;此组合表示匹配所有值和所有键。必须是标签名称。

          • devices.requests.firstAvailable.tolerations.operator (string)

            Operator 表示键与值之间的关系。有效操作符为 Exists 和 Equal。默认为 Equal。Exists 等同于值的通配符,因此 ResourceClaim 可以容忍特定类别的所有污点。

          • devices.requests.firstAvailable.tolerations.tolerationSeconds (int64)

            TolerationSeconds 表示容忍度容忍污点(必须是 NoExecute 效果,否则此字段被忽略)的时间段。默认情况下,它未设置,这意味着永远容忍污点(不驱逐)。系统将零和负值视为 0(立即驱逐)。如果大于零,则计算 Pod 需要被驱逐的时间为 <添加污点的时间> + <容忍秒数>。

          • devices.requests.firstAvailable.tolerations.value (string)

            Value 是容忍度匹配的污点值。如果 operator 是 Exists,该值必须为空;否则,只是一个常规字符串。必须是标签值。

ResourceClaimStatus

ResourceClaimStatus 跟踪资源是否已分配以及分配结果。


  • allocation (AllocationResult)

    一旦声明成功分配,就会设置 Allocation。

    AllocationResult 包含已分配资源的属性。

    • allocation.devices (DeviceAllocationResult)

      Devices 是设备分配的结果。

      DeviceAllocationResult 是设备分配的结果。

      • allocation.devices.config ([]DeviceAllocationConfiguration)

        原子性:在合并时将被替换

        此字段是所有声明和类配置参数的组合。驱动程序可以根据标志区分它们。

        这包括结果中没有分配设备但需要驱动程序支持配置参数的驱动程序的配置参数。它们可以静默忽略未知配置参数。

        DeviceAllocationConfiguration 嵌入在 AllocationResult 中。

        • allocation.devices.config.source (string),必需

          Source 记录配置是来自类(因此不是普通用户能够设置的)还是来自声明。

        • allocation.devices.config.opaque (OpaqueDeviceConfiguration)

          Opaque 提供驱动程序特定的配置参数。

          OpaqueDeviceConfiguration 包含驱动程序的配置参数,其格式由驱动程序供应商定义。

          • allocation.devices.config.opaque.driver (string),必需

            Driver 用于确定哪些 kubelet 插件需要传递这些配置参数。

            驱动程序开发者提供的准入策略可以使用此字段来决定是否需要验证它们。

            必须是 DNS 子域,并且应以驱动程序供应商拥有的 DNS 域结尾。

          • allocation.devices.config.opaque.parameters (RawExtension),必需

            Parameters 可以包含任意数据。驱动程序开发者负责处理验证和版本控制。通常这包括自识别和版本(Kubernetes 类型使用 "kind" + "apiVersion"),以及不同版本之间的转换。

            原始数据的长度必须小于或等于 10 Ki。

            *RawExtension 用于在外部版本中保存扩展。

            要使用此字段,请在外部版本化结构中创建一个类型为 RawExtension 的字段,并在内部结构中创建一个类型为 Object 的字段。你还需要注册各种插件类型。

            // 内部包

            type MyAPIObject struct { runtime.TypeMeta json:",inline" MyPlugin runtime.Object json:"myPlugin" }

            type PluginA struct { AOption string json:"aOption" }

            // 外部包

            type MyAPIObject struct { runtime.TypeMeta json:",inline" MyPlugin runtime.RawExtension json:"myPlugin" }

            type PluginA struct { AOption string json:"aOption" }

            // 在线路上,JSON 将看起来像这样

            { "kind":"MyAPIObject", "apiVersion":"v1", "myPlugin": { "kind":"PluginA", "aOption":"foo", }, }

            那么会发生什么?Decode 首先使用 json 或 yaml 将序列化数据反序列化到外部 MyAPIObject 中。这将导致原始 JSON 被存储,但未解包。下一步是将数据(使用 pkg/conversion)复制到内部结构中。运行时包的 DefaultScheme 安装了转换函数,这些函数将解包存储在 RawExtension 中的 JSON,将其转换为正确的对象类型,并存储在 Object 中。(待办:如果对象是未知类型,将创建并存储 runtime.Unknown 对象。)*

        • allocation.devices.config.requests ([]string)

          原子性:在合并时将被替换

          Requests 列出了配置适用的请求名称。如果为空,则适用于所有请求。

          子请求的引用必须包含主请求的名称,并且可以使用 <主请求>[/<子请求>] 格式包含子请求。如果只给定主请求,则配置适用于所有子请求。

      • allocation.devices.results ([]DeviceRequestAllocationResult)

        原子性:在合并时将被替换

        Results 列出了所有已分配的设备。

        DeviceRequestAllocationResult 包含单个请求的分配结果。

        • allocation.devices.results.device (string),必需

          Device 通过驱动程序资源池中的名称引用一个设备实例。它必须是 DNS 标签。

        • allocation.devices.results.driver (string),必需

          Driver 指定了 DRA 驱动程序的名称,当节点需要该声明时,将调用其 kubelet 插件来处理分配。

          必须是 DNS 子域,并且应以驱动程序供应商拥有的 DNS 域结尾。

        • allocation.devices.results.pool (string),必需

          此名称与驱动程序名称和设备名称字段一起标识分配的设备 (<驱动程序名称>/<池名称>/<设备名称>)。

          长度不能超过 253 个字符,并且可以包含一个或多个由斜杠分隔的 DNS 子域。

        • allocation.devices.results.request (string),必需

          Request 是声明中导致此设备被分配的请求的名称。如果它引用 DeviceRequest 中 firstAvailable 列表中的子请求,则此字段必须包含主请求和子请求的名称,使用 <主请求>/<子请求> 格式。

          每个请求可能已分配了多个设备。

        • allocation.devices.results.adminAccess (boolean)

          AdminAccess 表示此设备是为管理访问而分配的。有关模式的定义,请参阅相应的请求字段。

          这是一个 Alpha 字段,需要启用 DRAAdminAccess 特性门控。如果此字段未设置或设置为 false,则禁用管理访问;否则,启用管理访问。

        • allocation.devices.results.tolerations ([]DeviceToleration)

          原子性:在合并时将被替换

          设备分配时请求中指定的所有容忍度的副本。

          容忍度的最大数量为 16。

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

          附着此 DeviceToleration 的 ResourceClaim 容忍使用匹配操作符 <operator> 匹配三元组 <key,value,effect> 的任何污点。

          • allocation.devices.results.tolerations.effect (string)

            Effect 指示要匹配的污点效果。为空表示匹配所有污点效果。如果指定,允许的值为 NoSchedule 和 NoExecute。

          • allocation.devices.results.tolerations.key (string)

            Key 是容忍度适用的污点键。为空表示匹配所有污点键。如果键为空,operator 必须为 Exists;此组合表示匹配所有值和所有键。必须是标签名称。

          • allocation.devices.results.tolerations.operator (string)

            Operator 表示键与值之间的关系。有效操作符为 Exists 和 Equal。默认为 Equal。Exists 等同于值的通配符,因此 ResourceClaim 可以容忍特定类别的所有污点。

          • allocation.devices.results.tolerations.tolerationSeconds (int64)

            TolerationSeconds 表示容忍度容忍污点(必须是 NoExecute 效果,否则此字段被忽略)的时间段。默认情况下,它未设置,这意味着永远容忍污点(不驱逐)。系统将零和负值视为 0(立即驱逐)。如果大于零,则计算 Pod 需要被驱逐的时间为 <添加污点的时间> + <容忍秒数>。

          • allocation.devices.results.tolerations.value (string)

            Value 是容忍度匹配的污点值。如果 operator 是 Exists,该值必须为空;否则,只是一个常规字符串。必须是标签值。

    • allocation.nodeSelector (NodeSelector)

      NodeSelector 定义了已分配资源的可用位置。如果未设置,则随处可用。

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

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

        原子性:在合并时将被替换

        必需。节点选择器项的列表。各项之间是 OR 关系。

        一个 null 或空的节点选择器项不匹配任何对象。它们的条件之间是 AND 关系。TopologySelectorTerm 类型实现了 NodeSelectorTerm 的一个子集。

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

          原子性:在合并时将被替换

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

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

          原子性:在合并时将被替换

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

  • devices ([]AllocatedDeviceStatus)

    Map:在合并时将保留键 driver, device, pool 上的唯一值

    Devices 包含为此声明分配的每个设备的状态,由驱动程序报告。这可以包括驱动程序特定的信息。条目由各自的驱动程序拥有。

    AllocatedDeviceStatus 包含已分配设备的状态(如果驱动程序选择报告)。这可能包括驱动程序特定的信息。

    • devices.device (string),必需

      Device 通过驱动程序资源池中的名称引用一个设备实例。它必须是 DNS 标签。

    • devices.driver (string),必需

      Driver 指定了 DRA 驱动程序的名称,当节点需要该声明时,将调用其 kubelet 插件来处理分配。

      必须是 DNS 子域,并且应以驱动程序供应商拥有的 DNS 域结尾。

    • devices.pool (string),必需

      此名称与驱动程序名称和设备名称字段一起标识分配的设备 (<驱动程序名称>/<池名称>/<设备名称>)。

      长度不能超过 253 个字符,并且可以包含一个或多个由斜杠分隔的 DNS 子域。

    • devices.conditions ([]Condition)

      Map:在合并时将保留键 type 上的唯一值

      Conditions 包含设备状态的最新观察结果。如果设备已根据类和声明配置引用进行配置,则 Ready 条件应为 True。

      不能包含超过 8 个条目。

      Condition 包含此 API 资源当前状态的一个方面的详细信息。

      • devices.conditions.lastTransitionTime (Time),必需

        lastTransitionTime 是条件最后一次从一个状态转换为另一个状态的时间。这应该是底层条件发生变化的时候。如果不知道,则使用 API 字段发生变化的时间也是可以接受的。

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

      • devices.conditions.message (string),必需

        message 是人类可读的消息,指示关于过渡的详细信息。这可以是一个空字符串。

      • devices.conditions.reason (string),必需

        reason 包含一个程序化标识符,指示条件上次过渡的原因。特定条件类型的生产者可以为此字段定义预期的值和含义,以及这些值是否被视为有保证的 API。该值应为 CamelCase 字符串。此字段不能为空。

      • devices.conditions.status (string),必需

        条件的状态,取值为 True、False、Unknown 之一。

      • devices.conditions.type (string),必需

        条件的类型,使用 CamelCase 或 foo.example.com/CamelCase 格式。

      • devices.conditions.observedGeneration (int64)

        observedGeneration 表示条件基于的 .metadata.generation。例如,如果 .metadata.generation 当前是 12,但 .status.conditions[x].observedGeneration 是 9,则该条件与实例的当前状态相比已过期。

    • devices.data (RawExtension)

      Data 包含任意驱动程序特定的数据。

      原始数据的长度必须小于或等于 10 Ki。

      *RawExtension 用于在外部版本中保存扩展。

      要使用此字段,请在外部版本化结构中创建一个类型为 RawExtension 的字段,并在内部结构中创建一个类型为 Object 的字段。你还需要注册各种插件类型。

      // 内部包

      type MyAPIObject struct {
      	runtime.TypeMeta `json:",inline"`
      	MyPlugin runtime.Object `json:"myPlugin"`
      }
      
      type PluginA struct {
      	AOption string `json:"aOption"`
      }
      

      // 外部包

      type MyAPIObject struct {
      	runtime.TypeMeta `json:",inline"`
      	MyPlugin runtime.RawExtension `json:"myPlugin"`
      }
      
      type PluginA struct {
      	AOption string `json:"aOption"`
      }
      

      // 在线路上,JSON 将看起来像这样

      {
      	"kind":"MyAPIObject",
      	"apiVersion":"v1",
      	"myPlugin": {
      		"kind":"PluginA",
      		"aOption":"foo",
      	},
      }
      

      那么会发生什么?Decode 首先使用 json 或 yaml 将序列化数据反序列化到外部 MyAPIObject 中。这将导致原始 JSON 被存储,但未解包。下一步是将数据(使用 pkg/conversion)复制到内部结构中。运行时包的 DefaultScheme 安装了转换函数,这些函数将解包存储在 RawExtension 中的 JSON,将其转换为正确的对象类型,并存储在 Object 中。(待办:如果对象是未知类型,将创建并存储 runtime.Unknown 对象。)*

    • devices.networkData (NetworkDeviceData)

      NetworkData 包含特定于设备的网络相关信息。

      NetworkDeviceData 提供了已分配设备的网络相关详细信息。这些信息可以由驱动程序或其他组件填充,以便在网络环境中配置或标识设备。

      • devices.networkData.hardwareAddress (string)

        HardwareAddress 表示设备的网络接口的硬件地址(例如 MAC 地址)。

        长度不能超过 128 个字符。

      • devices.networkData.interfaceName (string)

        InterfaceName 指定与已分配设备关联的网络接口的名称。这可能是正在 Pod 中配置的物理或虚拟网络接口的名称。

        长度不能超过 256 个字符。

      • devices.networkData.ips ([]string)

        原子性:在合并时将被替换

        IPs 列出分配给设备网络接口的网络地址。这可以包括 IPv4 和 IPv6 地址。IP 地址采用 CIDR 表示法,其中包括地址和关联的子网掩码。例如:IPv4 为 "192.0.2.5/24",IPv6 为 "2001:db8::5/64"。

  • reservedFor ([]ResourceClaimConsumerReference)

    补丁策略:根据键 uid 合并

    映射:合并时将保留键 uid 对应的唯一值

    ReservedFor 指示当前允许哪些实体使用该 Claim。引用未为其保留的 ResourceClaim 的 Pod 将不会启动。正在使用或可能正在使用的(因为它已被保留)Claim 不得被释放。

    在具有多个调度器实例的集群中,两个 Pod 可能由不同的调度器同时调度。当它们引用已达到最大消费者数量的同一 ResourceClaim 时,只能调度其中一个 Pod。

    两个调度器都尝试将其 Pod 添加到 claim.status.reservedFor 字段,但只有第一个到达 API 服务器的更新才会被存储。另一个将因错误而失败,发出该更新的调度器知道它必须将 Pod 重新放入队列中,等待 ResourceClaim 再次可用。

    最多可以有 256 个这样的保留。将来可能会增加此限制,但不会减少。

    ResourceClaimConsumerReference 包含足够的信息,可以让你定位 ResourceClaim 的消费者。该用户必须与 ResourceClaim 位于同一命名空间中。

    • reservedFor.name (string),必需

      Name 是被引用资源的名称。

    • reservedFor.resource (string),必需

      Resource 是被引用资源的类型,例如 "pods"。

    • reservedFor.uid (string),必需

      UID 精确标识资源的某个具体版本。

    • reservedFor.apiGroup (string)

      APIGroup 是被引用资源的组。对于核心 API,此字段为空。这与创建资源时使用的 APIVersion 中的组匹配。

ResourceClaimList

ResourceClaimList 是 Claim 的集合。


  • apiVersion: resource.k8s.io/v1beta2

  • kind: ResourceClaimList

  • metadata (ListMeta)

    标准的列表元数据

  • items ([]ResourceClaim),必需

    Items 是资源 Claim 的列表。

操作


get 读取指定的 ResourceClaim

HTTP 请求

GET /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}

参数

  • name (在路径中): string,必需

    ResourceClaim 的名称

  • namespace (在路径中): string,必需

    命名空间

  • pretty (在查询中): string

    pretty

响应

200 (ResourceClaim): OK

401: 未授权

get 读取指定 ResourceClaim 的状态

HTTP 请求

GET /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}/status

参数

  • name (在路径中): string,必需

    ResourceClaim 的名称

  • namespace (在路径中): string,必需

    命名空间

  • pretty (在查询中): string

    pretty

响应

200 (ResourceClaim): OK

401: 未授权

list 列出或监视 ResourceClaim 类型的对象

HTTP 请求

GET /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims

参数

响应

200 (ResourceClaimList): OK

401: 未授权

list 列出或监视 ResourceClaim 类型的对象

HTTP 请求

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

参数

响应

200 (ResourceClaimList): OK

401: 未授权

create 创建一个 ResourceClaim

HTTP 请求

POST /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims

参数

响应

200 (ResourceClaim): OK

201 (ResourceClaim): 已创建

202 (ResourceClaim): 已接受

401: 未授权

update 替换指定的 ResourceClaim

HTTP 请求

PUT /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}

参数

响应

200 (ResourceClaim): OK

201 (ResourceClaim): 已创建

401: 未授权

update 替换指定 ResourceClaim 的状态

HTTP 请求

PUT /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}/status

参数

响应

200 (ResourceClaim): OK

201 (ResourceClaim): 已创建

401: 未授权

patch 部分更新指定的 ResourceClaim

HTTP 请求

PATCH /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}

参数

  • name (在路径中): string,必需

    ResourceClaim 的名称

  • namespace (在路径中): string,必需

    命名空间

  • body: Patch,必需

  • dryRun (在查询中): string

    dryRun

  • fieldManager (在查询中): string

    fieldManager

  • fieldValidation (在查询中): string

    fieldValidation

  • force (在查询中): boolean

    force

  • pretty (在查询中): string

    pretty

响应

200 (ResourceClaim): OK

201 (ResourceClaim): 已创建

401: 未授权

patch 部分更新指定 ResourceClaim 的状态

HTTP 请求

PATCH /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}/status

参数

  • name (在路径中): string,必需

    ResourceClaim 的名称

  • namespace (在路径中): string,必需

    命名空间

  • body: Patch,必需

  • dryRun (在查询中): string

    dryRun

  • fieldManager (在查询中): string

    fieldManager

  • fieldValidation (在查询中): string

    fieldValidation

  • force (在查询中): boolean

    force

  • pretty (在查询中): string

    pretty

响应

200 (ResourceClaim): OK

201 (ResourceClaim): 已创建

401: 未授权

delete 删除 ResourceClaim

HTTP 请求

DELETE /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims/{name}

参数

响应

200 (ResourceClaim): OK

202 (ResourceClaim): 已接受

401: 未授权

deletecollection 删除 ResourceClaim 集合

HTTP 请求

DELETE /apis/resource.k8s.io/v1beta2/namespaces/{namespace}/resourceclaims

参数

响应

200 (Status): OK

401: 未授权

此页面是自动生成的。

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

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