帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
使用 EKS 自动模式控制将工作负载部署到容量预留中
您可以控制工作负载在容量预留中的部署。EKS 自动模式支持 EC2 按需容量预留(ODCR)和适用于机器学习的 EC2 容量块。
提示
默认情况下,EKS Auto Mode 可以通过开放匹配在开放 ODCR 中启动实例,但不会优先考虑这些 ODCR。通过开放匹配启动的实例会被标记为 karpenter.sh/capacity-type: on-demand,而不是 reserved。要优先使用 ODCR 并标记实例 karpenter.sh/capacity-type: reserved,请在 NodeClass 定义中配置 capacityReservationSelectorTerms。机器学习容量块始终需要 capacityReservationSelectorTerms,并且不会自动使用。
EC2 按需容量预留(ODCR)
通过使用 EC2 按需容量预留(ODCR),您可以在特定可用区中为 Amazon EC2 实例预留计算容量达任意持续时间。使用 EKS 自动模式时,您可能想要控制是否将 Kubernetes 工作负载部署到这些预留实例上,以最大限度地利用预先购买的容量,或确保关键工作负载能够访问有保障的资源。
默认情况下,EKS 自动模式会在开放式 ODCR 中自动启动。但是,通过在 NodeClass 上配置 capacityReservationSelectorTerms,您可以显式控制工作负载使用的 ODCR。使用已配置的 ODCR 预置的节点将具有 karpenter.sh/capacity-type: reserved 并优先于按需和竞价型节点。启用此功能后,EKS 自动模式将不再自动使用开放式 ODCR – 其必须由 NodeClass 显式选择,这样您就可以精确控制集群中的容量预留使用情况。
警告
如果在集群中的 NodeClass 上配置了 capacityReservationSelectorTerms,则 EKS 自动模式将不再为集群中的任何 NodeClass 自动使用开放式 ODCR。
示例 NodeClass
apiVersion: eks.amazonaws.com/v1 kind: NodeClass spec: # Optional: Selects upon on-demand capacity reservations and capacity blocks # for EKS Auto Mode to prioritize. capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03 # Alternative Approaches - tags: app: "my-app" # Optional owning account ID filter owner: "012345678901"
此示例 NodeClass 演示了两种选择 ODCR 的方法。第一种方法通过其 ID(cr-56fac701cc1951b03)直接引用特定 ODCR。第二种方法使用基于标签的选择,目标是带有标签 Name: "targeted-odcr" 的 ODCR。您还可以选择按拥有预留的 AWS 账户进行筛选,这在跨账户场景或使用共享容量预留时特别有用。
适用于机器学习的 EC2 容量块
机器学习容量块允许您在未来预留基于 GPU 的加速型计算实例,以支持短期机器学习(ML)工作负载。在容量块内运行的实例会自动紧密放置在 Amazon EC2 UltraClusters 中,以实现低延迟、PB 级非阻塞联网。
有关受支持的平台和实例类型的更多信息,请参阅《EC2 用户指南》中的 ML 容量块。
您可以创建使用机器学习容量块的 EKS 自动模式 NodeClass,类似于 ODCR(如前所述)。
以下示例定义创建了三个资源:
-
引用容量块预留的 NodeClass
-
使用 NodeClass 并应用污点的 NodePool
-
可以容忍污点并请求 GPU 资源的容器组(pod)规范
示例 NodeClass
此 NodeClass 通过其预留 ID 来引用特定机器学习容量块。您可以从 EC2 控制台获取此 ID。
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: gpu spec: # Specify your Capacity Block reservation ID capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03
有关更多信息,请参阅 为 Amazon EKS 创建节点类。
示例 NodePool
此 NodePool 引用 gpu NodeClass 并指定重要的配置:
-
其仅通过设置
karpenter.sh/capacity-type: reserved来使用预留容量 -
其请求适用于机器学习工作负载的特定 GPU 实例系列
-
其应用
nvidia.com/gpu污点,确保只在这些节点上调度 GPU 工作负载
apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: template: spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: gpu requirements: - key: eks.amazonaws.com/instance-family operator: In values: - g6 - p4d - p4de - p5 - p5e - p5en - p6 - p6-b200 - key: karpenter.sh/capacity-type operator: In values: - reserved # Enable other capacity types # - on-demand # - spot taints: - effect: NoSchedule key: nvidia.com/gpu
有关更多信息,请参阅 为 EKS 自动模式创建节点池。
示例容器组(pod)
此示例容器组(pod)演示了如何将工作负载配置为在容量块节点上运行:
-
其使用 nodeSelector 来定位特定的 GPU 类型(在本例中为 H200 GPU)
-
其包括对 NodePool 应用的
nvidia.com/gpu污点的容忍度 -
其使用
nvidia.com/gpu资源类型明确请求 GPU 资源
apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: nodeSelector: # Select specific GPU type - uncomment as needed # eks.amazonaws.com/instance-gpu-name: l4 # eks.amazonaws.com/instance-gpu-name: a100 eks.amazonaws.com/instance-gpu-name: h200 # eks.amazonaws.com/instance-gpu-name: b200 eks.amazonaws.com/compute-type: auto restartPolicy: OnFailure containers: - name: nvidia-smi image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal args: - "nvidia-smi" resources: requests: # Uncomment if needed # memory: "30Gi" # cpu: "3500m" nvidia.com/gpu: 1 limits: # Uncomment if needed # memory: "30Gi" nvidia.com/gpu: 1 tolerations: - key: nvidia.com/gpu effect: NoSchedule operator: Exists
有关更多信息,请参阅 Kubernetes 文档中的 Pod
相关资源
-
《Amazon EC2 用户指南》中的 ML 容量块
-
《Amazon EC2 用户指南》中的查找和购买容量块
-
《EKS 最佳实践指南》中的 GPU 资源优化和成本管理