创建带适用于机器学习的容量块的托管式节点组 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

创建带适用于机器学习的容量块的托管式节点组

机器学习(ML)容量块允许您在未来某个日期预留 GPU 实例,从而支持您的短期 ML 工作负载。有关更多信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的适用于 ML 的容量块

注意事项

重要
  • 容量块仅适用于某些 Amazon EC2 实例类型和 AWS 区域。有关兼容性信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的使用容量块

  • 有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的将容量块用于机器学习工作负载

  • 带有容量块的托管式节点组只能使用自定义启动模板创建。

  • 升级带有容量块的托管式节点组时,请务必将所需的节点组大小设置为 0

创建带有 Amazon EC2 容量块的托管式节点组

您可以将容量块与 Amazon EKS 托管式节点组配合使用来预置和扩展由 GPU 加速的 Worker 节点。下面的 AWS CloudFormation 模板示例并未涵盖生产集群所需的各个方面。通常,您还需要一个引导脚本来将节点加入集群,并指定由 Amazon EKS 加速的 AMI。有关更多信息,请参阅 为集群创建托管式节点组

  1. 创建适合工作负载并且可与 Amazon EKS 托管式节点组配合使用的启动模板。有关更多信息,请参阅 使用启动模板自定义托管式节点

    除了上述过程中的要求外,还要确保 LaunchTemplateData 包括以下内容:

    • 对于 InstanceMarketOptions,将 MarketType 设置为 "capacity-block"

    • CapacityReservationSpecification: CapacityReservationTarget,将 CapacityReservationId 设置为该容量块(例如:cr-02168da1478b509e0

    • InstanceType 设置为支持容量块的实例类型(例如:p5.48xlarge

    以下 CloudFormation 模板节选将创建一个以容量块为目标的启动模板。要创建自定义 AMI 托管式节点组,您还可以添加 ImageIdUserData 参数。

    NodeLaunchTemplate: Type: "AWS::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" InstanceType: p5.48xlarge
  2. 使用启动模板创建托管式节点组。

    以下是容量块的创建节点组命令示例。请将 example-values 替换为适用于集群的相应值。

    创建容量块托管式节点组时,请执行以下操作:

    • capacity-type 设置为 "CAPACITY_BLOCK"。如果容量类型未设置为 "CAPACITY_BLOCK" 或者缺失上述任何其他必需的启动模板值,则创建请求将被拒绝。

    • 在创建请求中指定 subnets 时,请确保仅在与容量预留相同的可用区中指定子网。

    • 如果在创建请求中指定某个非零 desiredSize,Amazon EKS 将在创建自动扩缩组(ASG)时遵守该值。但是,如果创建请求是在容量预留激活之前发出的,则在容量预留处于活动状态之前,ASG 将无法启动 Amazon EC2 实例。这样,ASG 扩缩活动将出现启动错误。每当预留变为活动状态时,实例将会成功启动,并且 ASG 将纵向扩展至创建时提到的 desiredSize

    aws eks create-nodegroup \ --cluster-name my-cluster \ --nodegroup-name my-mng \ --node-role node-role-arn \ --region region-code \ --subnets subnet-id \ --scaling-config minSize=node-group-min-size,maxSize=node-group-max-size,desiredSize=node-group-desired-size \ --capacity-type "CAPACITY_BLOCK" \ --launch-template id="lt-id",version=1
  3. 请确保节点在纵向扩展后加入。使用带容量块的托管式节点组时,Amazon EKS 集群不会验证启动的实例确实已经加入并注册到集群。

  4. 如果您在创建时将 desiredSize 设置为 0,则在容量预留变为活动状态时,您可通过不同的选项来纵向扩展节点组:

    • 为 ASG 创建与容量块预留时间保持一致的计划扩缩策略。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Amazon EC2 Auto Scaling 的计划扩展

    • 使用 Amazon EKS 控制台或 eks update-nodegroup-config 更新扩缩配置并设置所需的节点组大小。

    • 使用 Kubernetes Cluster Autoscaler。有关更多信息,请参阅 AWS 上的 Cluster Autoscaler

  5. 节点组现在已准备好计划工作负载和 Pods。

  6. 为确保能够在预留结束之前正常耗尽 Pods,Amazon EKS 使用计划扩缩策略将节点组大小缩减到 0。此计划扩缩策略的名称将设置为 Amazon EKS Node Group Capacity Scaledown Before Reservation End。我们建议不要编辑或删除此操作。

    Amazon EC2 会在预留结束前 30 分钟开始关闭实例。因此,Amazon EKS 将在预留结束前 40 分钟设置节点组计划缩减,以便确保能够安全、正常地退出 Pods。