帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
在 Amazon EKS 上管理硬件设备
Amazon EKS 支持两种 Kubernetes 机制来管理 EKS 集群中的专用硬件设备:动态资源分配 (DRA) 和设备插件。这两种机制都使工作负载能够访问硬件加速器(如 NVIDIA GPU 和 AWS Trainium 芯片)以及高性能网络设备(如 Elastic Fabric Adapter(EFA))。对于使用 Kubernetes 1.34 及更高版本的新部署,如果使用 EKS 托管节点组或自行管理的节点,建议使用 DRA 驱动程序,因为 DRA 提供了更丰富的设备选择、拓扑感知安排和设备共享功能,而这些是设备插件无法实现的。
有关这两个 Kubernetes 功能的通用信息,请参阅 Kubernetes 文档中的动态资源分配
动态资源分配与设备插件
Kubernetes 设备插件一直是向 Kubernetes 工作负载公开专用硬件的主要机制。设备插件将设备作为扩展资源(例如 nvidia.com/gpu 或 aws.amazon.com/neuroncore)进行发布,您可以在容器的资源请求和限制中请求这些资源。尽管设备插件得到广泛支持和使用,但仍存在以下限制:
-
设备以不透明整数计数的形式请求,无法基于属性进行筛选。
-
不支持容器之间或容器组(pod)之间的设备共享。
-
无法跨设备类型进行表达性的拓扑感知分配。
-
通常需要自定义调度器扩展才能实现智能放置。
动态资源分配(DRA)是 Kubernetes 的一项功能,在 Kubernetes 1.34 版本中正式发布,它解决了上述限制。借助 DRA,设备驱动程序通过 ResourceSlice 对象向 Kubernetes 调度器发布丰富的设备属性。您使用引用 DeviceClass 类别的 ResourceClaim 和 ResourceClaimTemplate 对象请求设备。
DRA 支持:
-
使用通用表达式语言(CEL)
表达式进行基于属性的设备选择。 -
拓扑感知分配,确保设备位于同一 PCIe 交换机或 NUMA 域内。
-
通过共享
ResourceClaim引用在多个容器或容器组(pod)之间共享设备。 -
基于约束的调度,可协调不同类型的设备。
适用于 Amazon EKS 的 DRA 驱动程序
以下 DRA 驱动程序通常用于在 Amazon EKS 集群中管理专用硬件设备。
- EFA DRA 驱动程序
-
EFA DRA 驱动程序(DRANET
)通过拓扑感知安排来管理 Elastic Fabric Adapter(EFA)设备分配,将 EFA 接口与其拓扑邻近的 GPU 或 Neuron 设备配对,并支持在容器组(pod)之间进行设备共享。有关更多信息,请参阅 管理 Amazon EKS 上的 EFA 设备。 - Neuron DRA 驱动程序
-
Neuron DRA 驱动程序管理 AWS Trainium 和 AWS Inferentia2 设备的分配,支持拓扑感知安排、连接设备子集分配以及逻辑 NeuronCore(LNC)配置,无需自定义调度器扩展。
- NVIDIA DRA 驱动程序
-
GPU NVIDIA DRA 驱动程序
支持 NVIDIA GPU 的灵活分配和动态重配置,包括在 EC2 Grace-Blackwell 实例上为多节点 NVLink(MNNVL)工作负载提供 ComputeDomain资源支持。有关在 EC2 Grace-Blackwell 实例上使用ComputeDomains的更多信息,请参阅 将 P6e-GB200 UltraServer 与 Amazon EKS 搭配使用。
Amazon EKS 设备插件
以下设备插件通常用于管理 Amazon EKS 集群中的专用硬件设备。
- EFA 设备插件
-
EFA 设备插件可发现每个节点上所有可用的 EFA 设备,并将 EFA 设备作为
vpc.amazonaws.com/efa扩展资源发布。 - Neuron 设备插件
-
Neuron 设备插件
将 Neuron 硬件作为 aws.amazon.com/neuroncore和aws.amazon.com/neuron扩展资源发布。该插件可发现每个节点上可用的 Neuron 设备,将其发布为可分配资源,并管理其生命周期。 - NVIDIA 设备插件
-
NVIDIA 设备插件
将 NVIDIA GPU 作为 nvidia.com/gpu扩展资源发布,并跟踪 GPU 的运行状况。
注意事项
在 Amazon EKS 上使用 DRA 驱动程序之前,请先了解以下注意事项:
-
DRA 在 Kubernetes 1.33 及以上版本的 Amazon EKS 上可用,但由于上游的 Kubernetes 问题
,建议在 Kubernetes 1.34 及更高版本上使用。您的集群控制面板和节点必须运行支持 DRA 的 Kubernetes 版本。 -
DRA 目前与 Karpenter 或 EKS Auto Mode 配置的计算不兼容。您必须将 DRA 驱动程序与 EKS 托管节点组或自管理节点配合使用。
-
同一设备类型的 DRA 驱动程序和设备插件不得在同一节点上同时运行。在安装对应的 DRA 驱动程序之前,请卸载设备插件,或将它们部署在不同的节点上。有关 DRA 驱动程序和设备插件兼容性的更新,请参阅上游 Kubernetes KEP-5004
。 -
DRA 使用的 Kubernetes API 资源(
ResourceClaim、ResourceClaimTemplate、DeviceClass)与设备插件使用的资源(resource.limits、resource.requests)不同。从设备插件迁移到 DRA 需要更新您的工作负载规格。 -
设备插件在所有 Kubernetes 版本中仍将获得全面支持。如果集群运行的 Kubernetes 版本低于 1.34,或者您使用了 Karpenter 或 EKS 自动模式,请继续使用设备插件。Bottlerocket 不支持 NVIDIA DRA 驱动程序;请在 Bottlerocket 节点上使用 NVIDIA 设备插件。Bottlerocket 支持 EFA 和 Neuron DRA 驱动程序。
DRA ResourceClaim 与 ResourceClaimTemplate
使用 DRA 时,您可以通过 ResourceClaim 或 ResourceClaimTemplate 对象请求设备。这两种资源类型的用途不同,生命周期行为也不同。
- ResourceClaim
-
ResourceClaim是一个 Kubernetes 命名对象,您可以在任何容器组(pod)之外独立创建它。您可以在容器组(pod)规格中通过resourceClaimName字段按名称引用它。ResourceClaim具有以下特性:-
在创建任何引用它的容器组(pod)之前,它必须存在于集群中。如果 Claim 不存在,容器组(pod)将保持待处理状态。
-
无论是否有任何容器组(pod)引用它,ResourceClaim 都会一直存在,直到您明确删除它。
-
多个容器组(pod)可以引用同一个
ResourceClaim,从而实现设备共享。所有引用同一 Claim 的容器组(pod)会共享对同一组已分配设备的访问权限,并被调度到同一个节点。如果需要多个容器组(pod)来共享对同一组设备的访问权限,或需要 Claim 在单个容器组(pod)的生命周期之外存在时,可以使用
ResourceClaim。
-
- ResourceClaimTemplate
-
ResourceClaimTemplate定义了一个模板,Kubernetes 会使用该模板为每个容器组(pod)自动生成一个唯一的ResourceClaim。您可以在容器组(pod)规格中通过resourceClaimTemplateName字段引用它。ResourceClaimTemplate本身不绑定到任何容器组(pod),它是一个独立存在的可重用模板。ResourceClaimTemplate具有以下特性:-
Kubernetes 会为每个引用该模板的容器组(pod)创建一个新的
ResourceClaim。每个容器组(pod)都有自己的一组独立设备。 -
每个生成的
ResourceClaim都会绑定到触发其创建的容器组(pod)的生命周期。删除容器组(pod)时,与之关联的生成的ResourceClaim也会被删除。ResourceClaimTemplate本身不受影响,并且会继续为将来的容器组(pod)生成新的 Claim。当工作负载中的每个容器组(pod)都需要具有相似配置的专用设备时,请使用
ResourceClaimTemplate。例如,如果 Job 中的容器组(pod)使用并行执行功能,且每个都需要自己的 GPU 或 EFA 设备,则可使用ResourceClaimTemplate。
-
下表总结了 ResourceClaim 与 ResourceClaimTemplate 之间的差异。
| 行为 | ResourceClaim | ResourceClaimTemplate |
|---|---|---|
|
创建 |
在容器组(pod)引用之前手动创建 |
Kubernetes 会为每个容器组(pod)自动生成 Claim |
|
生命周期 |
一直存在,直至您将其删除 |
模板一直存在,直至您将其删除。每个生成的 |
|
容器组(pod)间设备共享 |
支持。多个容器组(pod)可以引用同一 Claim。 |
不支持。每个容器组(pod)会获得独立的 Claim。 |
|
容器组(pod)规格字段 |
|
|
有关使用 ResourceClaim 对象在容器组(pod)之间共享 EFA 设备的示例,请参阅在多个容器组(pod)之间共享 EFA 设备。有关将 ResourceClaimTemplate 对象与拓扑感知分配结合使用的示例,请参阅拓扑感知的 EFA 和 GPU/Neuron 设备分配。