在叢集中設定 DRA
Kubernetes v1.34 [穩定]
(預設啟用:true)本頁面介紹如何在 Kubernetes 叢集中配置**動態資源分配 (DRA)**,方法是啟用 API 組並配置裝置類別。這些說明適用於叢集管理員。
關於 DRA
一項 Kubernetes 功能,允許你在 Pod 之間請求和共享資源。這些資源通常是連線的裝置,例如硬體加速器。
透過 DRA,裝置驅動程式和叢集管理員定義可用於工作負載中**宣告**的裝置**類別**。Kubernetes 將匹配的裝置分配給特定的宣告,並將相應的 Pod 放置在可以訪問所分配裝置的節點上。
請確保你熟悉 DRA 的工作原理以及 DRA 術語,例如 DeviceClasses、ResourceClaims 和 ResourceClaimTemplates。有關詳細資訊,請參閱動態資源分配 (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"
嘗試以下故障排除步驟
重新配置並重新啟動 `kube-apiserver` 元件。
如果完整的 `.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
嘗試以下故障排除步驟
- 檢查 DRA 驅動程式的健康狀況,並在其日誌輸出中查詢有關釋出 ResourceSlices 的錯誤訊息。驅動程式的供應商可能提供進一步的安裝和故障排除說明。
建立 DeviceClasses
你可以透過建立DeviceClasses來定義應用程式操作員可以在工作負載中宣告的裝置類別。一些裝置驅動程式提供商可能還會在驅動程式安裝期間指示你建立 DeviceClasses。
驅動程式釋出的 ResourceSlices 包含有關驅動程式管理的裝置的資訊,例如容量、元資料和屬性。你可以使用Common Expression Language篩選 DeviceClasses 中的屬性,這可以使工作負載操作員更容易找到裝置。
要查詢可以使用 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
你還可以查閱驅動程式提供商的文件,瞭解可用的屬性和值。
檢視以下 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"
在叢集中建立 DeviceClass
kubectl apply -f https://k8s.io/examples/dra/deviceclass.yaml
清理
要刪除在此任務中建立的 DeviceClass,請執行以下命令
kubectl delete -f https://k8s.io/examples/dra/deviceclass.yaml