在叢集中設定 DRA

特性狀態: Kubernetes v1.34 [穩定] (預設啟用:true)

本頁面介紹如何在 Kubernetes 叢集中配置**動態資源分配 (DRA)**,方法是啟用 API 組並配置裝置類別。這些說明適用於叢集管理員。

關於 DRA

一項 Kubernetes 功能,允許你在 Pod 之間請求和共享資源。這些資源通常是連線的裝置,例如硬體加速器。

透過 DRA,裝置驅動程式和叢集管理員定義可用於工作負載中**宣告**的裝置**類別**。Kubernetes 將匹配的裝置分配給特定的宣告,並將相應的 Pod 放置在可以訪問所分配裝置的節點上。

請確保你熟悉 DRA 的工作原理以及 DRA 術語,例如 DeviceClassesResourceClaimsResourceClaimTemplates。有關詳細資訊,請參閱動態資源分配 (DRA)

準備工作

你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一

你的 Kubernetes 伺服器版本必須是 v1.34。

要檢查版本,請輸入 kubectl version

  • 直接或間接將裝置連線到你的叢集。為避免驅動程式出現潛在問題,請在為叢集設定 DRA 功能後再安裝驅動程式。

可選:啟用舊版 DRA API 組

DRA 在 Kubernetes 1.34 中已升級到穩定版,並預設啟用。一些較舊的 DRA 驅動程式或工作負載可能仍需要 Kubernetes 1.30 中的 v1beta1 API 或 Kubernetes 1.32 中的 v1beta2。如果且僅當需要支援這些版本時,才啟用以下API 組

* `resource.k8s.io/v1beta1`
* `resource.k8s.io/v1beta2`

有關更多資訊,請參閱啟用或停用 API 組

驗證 DRA 是否已啟用

要驗證叢集配置是否正確,請嘗試列出 DeviceClasses

kubectl get deviceclasses

如果元件配置正確,則輸出類似於以下內容

No resources found

如果 DRA 未正確配置,則上述命令的輸出類似於以下內容

error: the server doesn't have a resource type "deviceclasses"

嘗試以下故障排除步驟

  1. 重新配置並重新啟動 `kube-apiserver` 元件。

  2. 如果完整的 `.spec.resourceClaims` 欄位從 Pod 中移除,或者 Pod 在不考慮 ResourceClaims 的情況下進行排程,請驗證 `DynamicResourceAllocation` 功能門控沒有在 kube-apiserver、kube-controller-manager、kube-scheduler 或 kubelet 中關閉。

安裝裝置驅動程式

為叢集啟用 DRA 後,你可以為連線的裝置安裝驅動程式。有關說明,請查閱裝置所有者或維護裝置驅動程式的專案的文件。你安裝的驅動程式必須與 DRA 相容。

要驗證你安裝的驅動程式是否按預期工作,請列出叢集中的 ResourceSlices

kubectl get resourceslices

輸出類似於以下內容

NAME                                                  NODE                DRIVER               POOL                             AGE
cluster-1-device-pool-1-driver.example.com-lqx8x      cluster-1-node-1    driver.example.com   cluster-1-device-pool-1-r1gc     7s
cluster-1-device-pool-2-driver.example.com-29t7b      cluster-1-node-2    driver.example.com   cluster-1-device-pool-2-446z     8s

嘗試以下故障排除步驟

  1. 檢查 DRA 驅動程式的健康狀況,並在其日誌輸出中查詢有關釋出 ResourceSlices 的錯誤訊息。驅動程式的供應商可能提供進一步的安裝和故障排除說明。

建立 DeviceClasses

你可以透過建立DeviceClasses來定義應用程式操作員可以在工作負載中宣告的裝置類別。一些裝置驅動程式提供商可能還會在驅動程式安裝期間指示你建立 DeviceClasses。

驅動程式釋出的 ResourceSlices 包含有關驅動程式管理的裝置的資訊,例如容量、元資料和屬性。你可以使用Common Expression Language篩選 DeviceClasses 中的屬性,這可以使工作負載操作員更容易找到裝置。

  1. 要查詢可以使用 CEL 表示式在 DeviceClasses 中選擇的裝置屬性,請獲取 ResourceSlice 的規範

    kubectl get resourceslice <resourceslice-name> -o yaml
    

    輸出類似於以下內容

    apiVersion: resource.k8s.io/v1
    kind: ResourceSlice
    # lines omitted for clarity
    spec:
      devices:
      - attributes:
          type:
            string: gpu
        capacity:
          memory:
            value: 64Gi
        name: gpu-0
      - attributes:
          type:
            string: gpu
        capacity:
          memory:
            value: 64Gi
        name: gpu-1
      driver: driver.example.com
      nodeName: cluster-1-node-1
    # lines omitted for clarity
    

    你還可以查閱驅動程式提供商的文件,瞭解可用的屬性和值。

  2. 檢視以下 DeviceClass 示例清單,它選擇由 `driver.example.com` 裝置驅動程式管理的任何裝置

    apiVersion: resource.k8s.io/v1
    kind: DeviceClass
    metadata:
      name: example-device-class
    spec:
      selectors:
      - cel:
          expression: |-
            device.driver == "driver.example.com"        
    
  3. 在叢集中建立 DeviceClass

    kubectl apply -f https://k8s.io/examples/dra/deviceclass.yaml
    

清理

要刪除在此任務中建立的 DeviceClass,請執行以下命令

kubectl delete -f https://k8s.io/examples/dra/deviceclass.yaml

下一步

上次修改時間:2025 年 7 月 2 日下午 6:43(太平洋標準時間):DRA:核心更新,適用於 1.34 (36162b1107)