

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon EKS 上管理硬體裝置
<a name="device-management"></a>

Amazon EKS 支援兩種 Kubernetes 機制來管理 EKS 叢集中的特殊硬體裝置：*動態資源分配 (DRA)* 和*裝置外掛程式*。這兩種機制都可讓工作負載存取 NVIDIA GPUs 和 AWS Trainium 晶片等硬體加速器，以及 Elastic Fabric Adapter (EFA) 等高效能網路裝置。使用 EKS 受管節點群組或自我管理節點時，建議將 DRA 驅動程式用於 Kubernetes 1.34 版和更新版本的新部署，因為 DRA 提供更豐富的裝置選擇、拓撲感知排程和裝置共用功能，這些功能是裝置外掛程式無法實現的。

如需這兩個 Kubernetes 功能的一般資訊，請參閱[動態資源分配](https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/)和[裝置外掛程式](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)的 Kubernetes 文件。

## 動態資源分配與裝置外掛程式的比較
<a name="_dynamic_resource_allocation_vs_device_plugins"></a>

Kubernetes 裝置外掛程式是向 Kubernetes 工作負載公開專用硬體的主要機制。裝置外掛程式會將裝置公告為您在容器資源請求和限制中請求的延伸資源 （例如 `nvidia.com/gpu`或 `aws.amazon.com/neuroncore`)。雖然裝置外掛程式受到廣泛支援和使用，但它們具有限制：
+ 系統會將裝置請求為不透明整數計數，而沒有屬性型篩選。
+ 不支援容器或 Pod 之間的裝置共用。
+ 沒有跨裝置類型的表達式拓撲感知配置。
+ 智慧型置放通常需要自訂排程器延伸。

動態資源分配 (DRA) 是 Kubernetes 1.34 版中普遍提供的 Kubernetes 功能，可解決這些限制。透過 DRA，裝置驅動程式會透過 `ResourceSlice` 物件將豐富的裝置屬性發佈至 Kubernetes 排程器。您可以使用 `ResourceClaim`和參考`DeviceClass`類別的`ResourceClaimTemplate`物件來請求裝置。

DRA 啟用：
+ 使用[通用表達式語言 (CEL)](https://kubernetes.io/docs/reference/using-api/cel/) 表達式的屬性型裝置選擇。
+ 拓撲感知配置，可確保裝置位於相同的 PCIe 交換器或 NUMA 網域上。
+ 透過共用`ResourceClaim`參考在多個容器或 Pod 之間共用裝置。
+ 符合不同裝置類型的限制型排程

## Amazon EKS 的 DRA 驅動程式
<a name="_dra_drivers_for_amazon_eks"></a>

下列 DRA 驅動程式通常用於管理 Amazon EKS 叢集中的特殊硬體裝置。

EFA DRA 驅動程式  
EFA DRA 驅動程式 ([DRANET](https://github.com/kubernetes-sigs/dranet)) 使用拓撲感知排程來管理 Elastic Fabric Adapter (EFA) 裝置配置，將 EFA 介面與其拓撲本機 GPUs 或 Neuron 裝置配對，並支援 Pod 之間的裝置共用。如需詳細資訊，請參閱[在 Amazon EKS 上管理 EFA 裝置](device-management-efa.md)。

Neuron DRA 驅動程式  
Neuron DRA 驅動程式使用拓撲感知排程、連線裝置子集配置和邏輯 NeuronCore (LNC) 組態來管理 AWS Trainium 和 AWS Inferentia2 裝置配置，而不需要自訂排程器延伸。

NVIDIA DRA 驅動程式  
[適用於 GPUs 的 NVIDIA DRA 驅動程式](https://github.com/kubernetes-sigs/nvidia-dra-driver-gpu)可靈活配置和動態重新設定 NVIDIA GPUs，包括支援 EC2 Grace-Blackwell 執行個體上多節點 NVLink (MNNVL) 工作負載`ComputeDomain`的資源。如需`ComputeDomains`搭配 EC2 Grace-Blackwell 執行個體使用 的詳細資訊，請參閱 [搭配 Amazon EKS 使用 P6e-GB200 UltraServers](ml-eks-nvidia-ultraserver.md)。

## Amazon EKS 的裝置外掛程式
<a name="_device_plugins_for_amazon_eks"></a>

下列裝置外掛程式通常用於管理 Amazon EKS 叢集中的特殊硬體裝置。

EFA 裝置外掛程式  
EFA 裝置外掛程式會探索每個節點上所有可用的 EFA 裝置，並將 EFA 裝置公告為`vpc.amazonaws.com/efa`延伸資源。

Neuron 裝置外掛程式  
[Neuron 裝置外掛程式](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/tutorials/k8s-setup.html)會將 Neuron 硬體公開為 `aws.amazon.com/neuroncore`和`aws.amazon.com/neuron`延伸資源。它會探索每個節點上可用的 Neuron 裝置、將它們公告為可配置的資源，並管理其生命週期。

NVIDIA 裝置外掛程式  
[NVIDIA 裝置外掛程式](https://github.com/NVIDIA/k8s-device-plugin)會將 NVIDIA GPUs 公告為`nvidia.com/gpu`延伸資源，並追蹤 GPUs 的運作狀態。

## 考量事項
<a name="_considerations"></a>

在 Amazon EKS 上使用 DRA 驅動程式之前，請檢閱下列考量事項：
+ DRA 可在具有 Kubernetes 1.33 版和更新版本的 Amazon EKS 上使用，但由於上游 [Kubernetes 問題](https://github.com/kubernetes/kubernetes/issues/133920)，建議用於 Kubernetes 1.34 版和更新版本。您的叢集控制平面和節點必須執行支援 DRA 的 Kubernetes 版本。
+ DRA 目前與 Karpenter 或 EKS Auto Mode 佈建運算不相容。您必須使用 EKS 受管節點群組或自我管理節點搭配 DRA 驅動程式。
+ 相同裝置類型的 DRA 驅動程式和裝置外掛程式**不得**同時在相同節點上執行。在安裝對應的 DRA 驅動程式之前，請先解除安裝裝置外掛程式，或將其部署在不同的節點上。如需 DRA 驅動程式和裝置外掛程式相容性的更新，請參閱上游 Kubernetes [KEP-5004](https://github.com/kubernetes/enhancements/issues/5004)。
+ DRA 使用與裝置外掛程式 (`ResourceClaim`、`DeviceClass`) `ResourceClaimTemplate`不同的 Kubernetes API 資源 (`resource.limits`、、)`resource.requests`。從裝置外掛程式遷移到 DRA 需要更新您的工作負載規格。
+ 所有 Kubernetes 版本都完全支援裝置外掛程式。如果您的叢集執行早於 1.34 的 Kubernetes 版本，或者您使用 Karpenter 或 EKS Auto 模式，請繼續使用裝置外掛程式。Bottlerocket 不支援 NVIDIA DRA 驅動程式；在 Bottlerocket 節點上使用 NVIDIA 裝置外掛程式。Bottlerocket 支援 EFA 和 Neuron DRA 驅動程式。

## DRA ResourceClaim 與 ResourceClaimTemplate
<a name="_dra_resourceclaim_vs_resourceclaimtemplate"></a>

使用 DRA 時，您可以透過 `ResourceClaim`或 `ResourceClaimTemplate` 物件請求裝置。這兩種資源類型具有不同的用途，並具有不同的生命週期行為。

ResourceClaim  
`ResourceClaim` 是您獨立於任何 Pod 建立的具名 Kubernetes 物件。您可以使用 `resourceClaimName` 欄位，在 Pod 規格中依名稱加以參考。`ResourceClaim` 具有下列特性：  
+ 在建立任何參考叢集的 Pod 之前，它必須存在於叢集中。如果宣告不存在，Pod 會保持待定狀態。
+ 它會持續存在，直到您明確刪除它為止，無論是否有任何 Pod 參考它。
+ 多個 Pod 可以參考相同的 `ResourceClaim`，以啟用裝置共用。所有參考相同宣告的 Pod 都會共用相同配置裝置的存取權，並排程到相同的節點。

  `ResourceClaim` 當您需要多個 Pod 來共用對相同裝置的存取權，或需要宣告在單一 Pod 的生命週期之後存在時，請使用 。

ResourceClaimTemplate  
`ResourceClaimTemplate` 定義 Kubernetes 用來為每個 Pod 自動產生唯一 `ResourceClaim`的範本。您可以使用 `resourceClaimTemplateName` 欄位在 Pod 規格中參考它。`ResourceClaimTemplate` 本身不繫結至任何 Pod，它是可重複使用的範本，可獨立保留。`ResourceClaimTemplate` 具有下列特性：  
+ Kubernetes 會`ResourceClaim`為每個參考範本的 Pod 建立新的 。每個 Pod 都會取得自己的個別裝置集。
+ 每個產生的 `ResourceClaim` 都會繫結至觸發其建立的 Pod 生命週期。刪除 Pod 時，`ResourceClaim`也會刪除產生的關聯 。`ResourceClaimTemplate` 本身不受影響，並繼續為未來的 Pod 產生新的宣告。

  當工作負載中的每個 Pod 需要具有類似組態的專屬裝置`ResourceClaimTemplate`時，請使用 。例如，`ResourceClaimTemplate`針對使用平行執行的任務中的 Pod，使用 ，其中每個 Pod 都需要自己的 GPU 或 EFA 裝置。

下表摘要說明 `ResourceClaim`和 之間的差異`ResourceClaimTemplate`。


| Behavior (行為) | ResourceClaim | ResourceClaimTemplate | 
| --- | --- | --- | 
| 建立 | 您在 Pod 參考它之前手動建立它 | Kubernetes 會根據 Pod 自動產生宣告 | 
| 生命週期 | 持續到您刪除為止 | 範本會持續存在，直到您刪除為止。產生的每個 `ResourceClaim` 都會繫結至觸發其建立的 Pod。 | 
| 在 Pod 之間共用裝置 | 支援。多個 Pod 可以參考相同的宣告。 | 不支援。每個 Pod 都會取得個別的宣告。 | 
| Pod 規格欄位 |  `resourceClaimName`  |  `resourceClaimTemplateName`  | 

如需使用`ResourceClaim`物件在 Pod 之間共用 EFA 裝置的範例，請參閱 [在多個 Pod 之間共用 EFA 裝置](device-management-efa.md#efa-dra-share)。如需搭配拓撲感知配置使用`ResourceClaimTemplate`物件的範例，請參閱 [拓撲感知 EFA 和 GPU/Neuron 裝置配置](device-management-efa.md#efa-dra-topology-aware)。

## 主題
<a name="_topics"></a>
+  [在 Amazon EKS 上管理 EFA 裝置](device-management-efa.md) 
+  [在 Amazon EKS 上管理 Neuron 裝置](device-management-neuron.md) 
+  [在 Amazon EKS 上管理 NVIDIA GPU 裝置](device-management-nvidia.md) 