使用 EKS 自动模式控制将工作负载部署到容量预留中 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

使用 EKS 自动模式控制将工作负载部署到容量预留中

您可以控制工作负载在容量预留中的部署。EKS 自动模式支持 EC2 按需容量预留(ODCR)和适用于机器学习的 EC2 容量块。

提示

默认情况下,EKS 自动模式会在开放式 ODCR 和机器学习容量块中自动启动。在 NodeClass 定义中使用 capacityReservationSelectorTerms 时,EKS 自动模式将不再自动使用任何开放容量预留。

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。您还可以选择按拥有预留的 Amazon 账户进行筛选,这在跨账户场景或使用共享容量预留时特别有用。

适用于机器学习的 EC2 容量块

机器学习容量块允许您在未来预留基于 GPU 的加速型计算实例,以支持短期机器学习(ML)工作负载。在容量块内运行的实例会自动紧密放置在 Amazon EC2 UltraClusters 中,以实现低延迟、PB 级非阻塞联网。

有关受支持的平台和实例类型的更多信息,请参阅《EC2 用户指南》中的 ML 容量块

您可以创建使用机器学习容量块的 EKS 自动模式 NodeClass,类似于 ODCR(如前所述)。

以下示例定义创建了三个资源:

  1. 引用容量块预留的 NodeClass

  2. 使用 NodeClass 并应用污点的 NodePool

  3. 可以容忍污点并请求 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