ResourceClaim v1beta1

ResourceClaim 描述對叢集中資源的存取請求,供工作負載使用。

apiVersion: resource.k8s.io/v1beta1

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

ResourceClaim

ResourceClaim 描述對叢集中資源的存取請求,供工作負載使用。例如,如果工作負載需要具有特定屬性的加速器裝置,則這是表達該請求的方式。狀態段落追蹤此宣告是否已滿足以及已配置哪些特定資源。

這是 Alpha 類型,需要啟用 DynamicResourceAllocation 功能閘道。


  • apiVersion: resource.k8s.io/v1beta1

  • kind: ResourceClaim

  • metadata (ObjectMeta)

    標準物件中繼資料

  • spec (ResourceClaimSpec), 必要

    Spec 描述正在請求的內容以及如何配置它。規格是不可變的。

  • status (ResourceClaimStatus)

    Status 描述宣告是否已準備好使用以及已配置的內容。

ResourceClaimSpec

ResourceClaimSpec 定義 ResourceClaim 中正在請求的內容以及如何配置它。


  • controller (字串)

    Controller 是 DRA 驅動程式的名稱,旨在處理此宣告的配置。如果為空,則在排程 Pod 時由排程器處理配置。

    必須是 DNS 子網域,並且應以驅動程式供應商擁有的 DNS 網域結尾。

    這是 Alpha 欄位,需要啟用 DRAControlPlaneController 功能閘道。

  • devices (DeviceClaim)

    Devices 定義如何請求裝置。

    DeviceClaim 定義如何使用 ResourceClaim 請求裝置。

    • devices.config ([]DeviceClaimConfiguration)

      Atomic:將在合併期間被取代

      此欄位包含多個潛在驅動程式的組態,這些驅動程式可以滿足此宣告中的請求。在配置宣告時會忽略它。

      DeviceClaimConfiguration 用於 DeviceClaim 中的組態參數。

      • devices.config.opaque (OpaqueDeviceConfiguration)

        Opaque 提供驅動程式特定的組態參數。

        OpaqueDeviceConfiguration 包含驅動程式供應商定義格式的驅動程式組態參數。

        • devices.config.opaque.driver (字串), 必要

          Driver 用於判斷哪個 kubelet 外掛程式需要傳遞這些組態參數。

          驅動程式開發人員提供的許可策略可以使用它來決定是否需要驗證它們。

          必須是 DNS 子網域,並且應以驅動程式供應商擁有的 DNS 網域結尾。

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

          Parameters 可以包含任意資料。驅動程式開發人員有責任處理驗證和版本控制。通常,這包括自我識別和版本 ("kind" + "apiVersion" 用於 Kubernetes 類型),以及不同版本之間的轉換。

          *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)到內部結構中。runtime 套件的 DefaultScheme 安裝了轉換函式,這些函式會解壓縮儲存在 RawExtension 中的 JSON,將其轉換為正確的物件類型,並將其儲存在 Object 中。(待辦事項:如果物件是未知類型,則會建立並儲存 runtime.Unknown 物件。)*

      • devices.config.requests ([]string)

        Atomic:將在合併期間被取代

        Requests 列出套用組態的請求名稱。如果為空,則套用至所有請求。

    • devices.constraints ([]DeviceConstraint)

      Atomic:將在合併期間被取代

      這些約束條件必須由為宣告配置的裝置集合滿足。

      DeviceConstraint 除了 Requests 之外,必須正好設定一個欄位。

      • devices.constraints.matchAttribute (string)

        MatchAttribute 要求相關的所有裝置都必須具有此屬性,且這些裝置的屬性類型和值必須相同。

        例如,如果您指定了 "dra.example.com/numa"(一個假設的範例!),則只會選擇在同一個 NUMA 節點中的裝置。沒有該屬性的裝置將不會被選擇。所有裝置都應使用相同類型的值來表示此屬性,因為這是其規格的一部分,但如果有一個裝置沒有,則該裝置也不會被選擇。

        必須包含網域限定詞。

      • devices.constraints.requests ([]string)

        Atomic:將在合併期間被取代

        Requests 是此宣告中一個或多個請求的列表,這些請求必須共同滿足此約束條件。如果一個請求由多個裝置滿足,則所有裝置都必須滿足該約束條件。如果未指定,則此約束條件適用於此宣告中的所有請求。

    • devices.requests ([]DeviceRequest)

      Atomic:將在合併期間被取代

      Requests 代表對不同裝置的個別請求,所有這些請求都必須被滿足。如果為空,則不需要配置任何裝置。

      *DeviceRequest 是對宣告所需裝置的請求。這通常是對單一資源(如裝置)的請求,但也可能請求多個相同的裝置。

      目前需要 DeviceClassName。用戶端必須檢查它是否已確實設定。它的缺失表示某些變更以用戶端尚不支援的方式發生,在這種情況下,用戶端必須拒絕處理請求。*

      • devices.requests.deviceClassName (string), required

        DeviceClassName 參考特定的 DeviceClass,它可以定義額外的組態和選取器,以供此請求繼承。

        類別是必要的。哪些類別可用取決於叢集。

        管理員可以使用此功能來限制可以請求哪些裝置,方法是僅安裝具有允許裝置選取器的類別。如果使用者可以自由請求任何東西而沒有限制,則管理員可以建立一個空的 DeviceClass 以供使用者參考。

      • devices.requests.name (string), required

        Name 可用於在 pod.spec.containers[].resources.claims 條目和宣告的約束條件中參考此請求。

        必須是 DNS 標籤。

      • devices.requests.adminAccess (boolean)

        AdminAccess 表示這是對裝置管理員存取權的宣告。具有 AdminAccess 的宣告預期用於裝置的監控或其他管理服務。它們忽略所有對裝置的普通宣告,包括存取模式和任何資源配置。

      • devices.requests.allocationMode (string)

        AllocationMode 及其相關欄位定義如何配置裝置以滿足此請求。支援的值為

        • ExactCount:此請求針對特定數量的裝置。這是預設值。確切的數字在 count 欄位中提供。

        • All:此請求針對集區中所有符合條件的裝置。如果某些裝置已配置,則配置將會失敗,除非請求了 adminAccess。

        如果未指定 AlloctionMode,則預設模式為 ExactCount。如果模式為 ExactCount 且未指定 count,則預設計數為 1。任何其他請求都必須指定此欄位。

        未來可能會新增更多模式。用戶端必須拒絕處理具有未知模式的請求。

      • devices.requests.count (int64)

        Count 僅在計數模式為 "ExactCount" 時使用。必須大於零。如果 AllocationMode 為 ExactCount 且未指定此欄位,則預設值為 1。

      • devices.requests.selectors ([]DeviceSelector)

        Atomic:將在合併期間被取代

        Selectors 定義特定裝置必須滿足的條件,才能將該裝置視為此請求的候選裝置。裝置必須滿足所有選取器才能被考慮。

        DeviceSelector 必須正好設定一個欄位。

        • devices.requests.selectors.cel (CELDeviceSelector)

          CEL 包含用於選取裝置的 CEL 表達式。

          CELDeviceSelector 包含用於選取裝置的 CEL 表達式。

          • devices.requests.selectors.cel.expression (string), required

            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)
            

ResourceClaimStatus

ResourceClaimStatus 追蹤資源是否已配置以及配置結果。


  • allocation (AllocationResult)

    Allocation 在宣告已成功配置後設定。

    AllocationResult 包含已配置資源的屬性。

    • allocation.controller (string)

      Controller 是處理配置的 DRA 驅動程式的名稱。該驅動程式也負責解除宣告配置。當可以在不涉及驅動程式的情況下解除宣告配置時,此欄位為空。

      驅動程式可以配置其他驅動程式提供的裝置,因此此處的驅動程式名稱可能與結果中列出的驅動程式名稱不同。

      這是 Alpha 欄位,需要啟用 DRAControlPlaneController 功能閘道。

    • allocation.devices (DeviceAllocationResult)

      Devices 是配置裝置的結果。

      DeviceAllocationResult 是配置裝置的結果。

      • allocation.devices.config ([]DeviceAllocationConfiguration)

        Atomic:將在合併期間被取代

        此欄位是所有宣告和類別組態參數的組合。驅動程式可以根據標誌區分它們。

        這包括結果中沒有已配置裝置的驅動程式的組態參數,因為這取決於驅動程式支援哪些組態參數。它們可以靜默地忽略未知的組態參數。

        DeviceAllocationConfiguration 嵌入在 AllocationResult 中。

        • allocation.devices.config.source (string), required

          Source 記錄組態是來自類別(因此普通使用者無法設定)還是來自宣告。

        • allocation.devices.config.opaque (OpaqueDeviceConfiguration)

          Opaque 提供驅動程式特定的組態參數。

          OpaqueDeviceConfiguration 包含驅動程式供應商定義格式的驅動程式組態參數。

          • allocation.devices.config.opaque.driver (string), required

            Driver 用於判斷哪個 kubelet 外掛程式需要傳遞這些組態參數。

            驅動程式開發人員提供的許可策略可以使用它來決定是否需要驗證它們。

            必須是 DNS 子網域,並且應以驅動程式供應商擁有的 DNS 網域結尾。

          • allocation.devices.config.opaque.parameters (RawExtension), required

            Parameters 可以包含任意資料。驅動程式開發人員有責任處理驗證和版本控制。通常,這包括自我識別和版本 ("kind" + "apiVersion" 用於 Kubernetes 類型),以及不同版本之間的轉換。

            *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)到內部結構中。runtime 套件的 DefaultScheme 安裝了轉換函式,這些函式會解壓縮儲存在 RawExtension 中的 JSON,將其轉換為正確的物件類型,並將其儲存在 Object 中。(待辦事項:如果物件是未知類型,則會建立並儲存 runtime.Unknown 物件。)*

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

          Atomic:將在合併期間被取代

          Requests 列出套用組態的請求名稱。如果為空,則套用至所有請求。

      • allocation.devices.results ([]DeviceRequestAllocationResult)

        Atomic:將在合併期間被取代

        Results 列出所有已配置的裝置。

        DeviceRequestAllocationResult 包含一個請求的配置結果。

        • allocation.devices.results.device (string), required

          Device 通過其在驅動程式資源池中的名稱來參考一個裝置實例。它必須是 DNS 標籤。

        • allocation.devices.results.driver (string), required

          Driver 指定 DRA 驅動程式的名稱,一旦節點上需要宣告,就應調用該驅動程式的 kubelet 外掛程式來處理配置。

          必須是 DNS 子網域,並且應以驅動程式供應商擁有的 DNS 網域結尾。

        • allocation.devices.results.pool (string), required

          此名稱與驅動程式名稱和裝置名稱欄位一起識別配置了哪個裝置 (\<driver name>/\<pool name>/\<device name>)。

          長度不得超過 253 個字元,並且可以包含一個或多個以斜線分隔的 DNS 子網域。

        • allocation.devices.results.request (string), required

          Request 是宣告中導致配置此裝置的請求名稱。每個請求可能已配置多個裝置。

    • allocation.nodeSelector (NodeSelector)

      NodeSelector 定義了已配置資源可用的位置。如果未設定,則它們在任何地方都可用。

      節點選取器表示一組節點上一個或多個標籤查詢結果的聯集;也就是說,它表示節點選取器術語所表示的選取器的 OR 運算。

      • allocation.nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm), required

        Atomic:將在合併期間被取代

        必要欄位。節點選取器術語的列表。這些術語是 OR 運算。

        空值或空的節點選取器術語不匹配任何物件。它們的需求是 AND 運算。TopologySelectorTerm 類型實作了 NodeSelectorTerm 的子集。

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

          Atomic:將在合併期間被取代

          節點標籤的節點選取器需求列表。

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

          Atomic:將在合併期間被取代

          節點欄位的節點選取器需求列表。

  • deallocationRequested (boolean)

    表示請求解除宣告配置。當設定此項時,不得將新的消費者新增至 ReservedFor。

    這僅在需要 DRA 驅動程式解除宣告配置時使用。然後,該驅動程式必須解除宣告配置並重設欄位,同時清除 Allocation 欄位。

    這是 Alpha 欄位,需要啟用 DRAControlPlaneController 功能閘道。

  • reservedFor ([]ResourceClaimConsumerReference)

    Patch 策略:在索引鍵 uid 上合併

    Map:在合併期間,將保留索引鍵 uid 上的唯一值

    ReservedFor 表示目前允許哪些實體使用宣告。Pod 參考未為該 Pod 保留的 ResourceClaim 將不會啟動。正在使用或可能正在使用中的宣告(因為它已被保留)不得被解除宣告配置。

    在具有多個排程器實例的叢集中,兩個 Pod 可能會由不同的排程器同時排程。當它們參考已達到其最大消費者數量的同一個 ResourceClaim 時,只能排程一個 Pod。

    兩個排程器都嘗試將其 Pod 新增至 claim.status.reservedFor 欄位,但只有先到達 API 伺服器的更新才會被儲存。另一個更新會失敗並出現錯誤,發出該更新的排程器知道它必須將 Pod 放回佇列中,等待 ResourceClaim 再次變得可用。

    最多可以有 32 個此類保留。未來可能會增加,但不會減少。

    ResourceClaimConsumerReference 包含足夠的資訊,讓您找到 ResourceClaim 的消費者。使用者必須是與 ResourceClaim 位於相同命名空間中的資源。

    • reservedFor.name (string), required

      Name 是被參考資源的名稱。

    • reservedFor.resource (string), required

      Resource 是被參考資源的類型,例如 "pods"。

    • reservedFor.uid (string), required

      UID 準確地識別資源的一個實例。

    • reservedFor.apiGroup (string)

      APIGroup 是被參考資源的群組。對於核心 API,此欄位為空。這與建立資源時使用的 APIVersion 中的群組相符。

ResourceClaimList

ResourceClaimList 是宣告的集合。


  • apiVersion: resource.k8s.io/v1beta1

  • kind: ResourceClaimList

  • metadata (ListMeta)

    標準列表 Metadata

  • items ([]ResourceClaim), required

    Items 是資源宣告的列表。

Operations


get 讀取指定的 ResourceClaim

HTTP Request

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

Parameters

  • name (in path): string, required

    ResourceClaim 的名稱

  • namespace (in path): string, required

    命名空間

  • pretty (in query): string

    pretty

Response

200 (ResourceClaim): OK

401: Unauthorized

get 讀取指定 ResourceClaim 的狀態

HTTP Request

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

Parameters

  • name (in path): string, required

    ResourceClaim 的名稱

  • namespace (in path): string, required

    命名空間

  • pretty (in query): string

    pretty

Response

200 (ResourceClaim): OK

401: Unauthorized

list 列出或監看 ResourceClaim 類型的物件

HTTP Request

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

Parameters

Response

200 (ResourceClaimList): OK

401: Unauthorized

list 列出或監看 ResourceClaim 類型的物件

HTTP Request

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

Parameters

Response

200 (ResourceClaimList): OK

401: Unauthorized

create 建立 ResourceClaim

HTTP Request

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

Parameters

Response

200 (ResourceClaim): OK

201 (ResourceClaim): Created

202 (ResourceClaim): Accepted

401: Unauthorized

update 取代指定的 ResourceClaim

HTTP Request

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

Parameters

Response

200 (ResourceClaim): OK

201 (ResourceClaim): Created

401: Unauthorized

update 取代指定 ResourceClaim 的狀態

HTTP Request

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

Parameters

Response

200 (ResourceClaim): OK

201 (ResourceClaim): Created

401: Unauthorized

patch 部分更新指定的 ResourceClaim

HTTP Request

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

Parameters

  • name (in path): string, required

    ResourceClaim 的名稱

  • namespace (in path): string, required

    命名空間

  • body: Patch, required

  • 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

Response

200 (ResourceClaim): OK

201 (ResourceClaim): Created

401: Unauthorized

patch 部分更新指定 ResourceClaim 的狀態

HTTP Request

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

Parameters

  • name (in path): string, required

    ResourceClaim 的名稱

  • namespace (in path): string, required

    命名空間

  • body: Patch, required

  • 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

Response

200 (ResourceClaim): OK

201 (ResourceClaim): Created

401: Unauthorized

delete 刪除 ResourceClaim

HTTP Request

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

Parameters

Response

200 (ResourceClaim): OK

202 (ResourceClaim): Accepted

401: Unauthorized

deletecollection 刪除 ResourceClaim 的集合

HTTP Request

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

Parameters

Response

200 (Status): OK

401: Unauthorized

本頁為自動產生。

如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。修正可能需要在 Kubernetes 專案中的其他地方進行。

上次修改時間為 2024 年 11 月 19 日上午 11:15 PST:DRA:包含 v1beta1 API 參考 (26b5da0885)