选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用适用于机器学习的容量块创建自行管理的节点

聚焦模式
使用适用于机器学习的容量块创建自行管理的节点 - Amazon EKS

帮助改进此页面

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

帮助改进此页面

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

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

注意事项

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

  • 容量块目前不支持与 Karpenter 结合使用。

  • 如果您在容量预留变为活动状态之前创建自行管理的节点组,请将所需容量设置为 0

  • 为了留出足够的时间来正常地耗尽节点,我们建议您在容量块预留结束时间前 30 分钟计划扩展至零。

  • 为确保能正常耗尽容器组(pod),我们建议按照示例步骤中的说明设置 AWS 节点终止处理程序。

将容量块与自行管理的节点配合使用

您可以将容量块与 Amazon EKS 配合使用来预置和扩展自己的自行管理节点。以下步骤给出了一般的示例概述。AWS CloudFormation 模板示例并未涵盖生产工作负载所需的各个方面。通常,您还需要一个引导脚本才能将节点加入集群,其中应指定一个由 Amazon EKS 加速的 AMI,以及用于加入集群的适当实例配置文件。有关更多信息,请参阅 创建自行管理的 Amazon Linux 节点

  1. 创建适合工作负载的启动模板。有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的将容量块用于机器学习工作负载

    确保 LaunchTemplateData 包含以下内容:

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

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

    • IamInstanceProfile,将 Arn 设置为适用的 iam-instance-profile-arn

    • ImageId 设置为适用的 image-id

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

    • SecurityGroupIds 设置为适用的 ID(例如:sg-05b1d815d1EXAMPLE

    • UserData 设置您自行管理的节点组的适用 user-data

      以下 CloudFormation 模板节选将创建一个以容量块为目标的启动模板。

      NodeLaunchTemplate: Type: "aws::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" IamInstanceProfile: Arn: iam-instance-profile-arn ImageId: image-id InstanceType: p5.48xlarge KeyName: key-name SecurityGroupIds: - sg-05b1d815d1EXAMPLE UserData: user-data

      由于容量块是区域性的,因此必须将子网传递到进行预留的可用区。

  2. 使用启动模板创建自行管理的节点组。如果您在容量预留变为活动状态之前执行此操作,请将所需容量设置为 0。创建节点组时,请确保仅为预留容量的可用区指定相应的子网。

    您在创建适合工作负载的模板时可以参考以下 CloudFormation 模板示例。此示例会获取上一步骤中所示 AWS::Amazon EC2::LaunchTemplate 资源的 LaunchTemplateIdVersion。它还会获取 DesiredCapacityMaxSizeMinSizeVPCZoneIdentifier 的值,这些内容在同一模板的其他位置声明。

    NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned
  3. 成功创建节点组后,请务必记录已创建节点组的 NodeInstanceRole。您需要此信息以确保在扩展节点组时,新节点会加入集群,并且 Kubernetes 能够识别节点。有关更多信息,请参阅创建自行管理的 Amazon Linux 节点中的 AWS Management Console说明。

  4. 我们建议您为自动扩缩组创建与容量块预留时间保持一致的计划扩缩策略。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Amazon EC2 Auto Scaling 的计划扩展

    您可以在容量块结束时间前 30 分钟使用预留的所有实例。那时仍在运行的实例将开始终止。为了留出足够的时间来正常地耗尽节点,我们建议您在容量块预留结束时间前 30 分钟计划扩展至零。

    如果您想改为在容量预留变为 Active 时手动纵向扩展,则需要在容量块预留开始时更新自动扩缩组的所需容量。然后,您还需要在容量块预留结束前 30 多分钟手动缩减。

  5. 节点组现已准备就绪,可供计划工作负载和容器组(pod)。

  6. 为确保能正常耗尽容器组(pod),我们建议设置 AWS 节点终止处理程序。该处理程序将能够使用 EventBridge 监控来自 Amazon EC2 Auto Scaling 的“ASG 横向缩减”生命周期事件,并允许 Kubernetes 控制面板在实例不可用之前执行所需的操作。否则,容器组(pod)和 Kubernetes 对象将卡在待处理状态。有关更多信息,请参阅 GitHub 上的 AWS 节点终止处理程序

    如果您没有设置节点终止处理程序,我们建议您在到达 30 分钟时段之前开始手动耗尽容器组(pod),这样就有充足的时间正常耗尽这些容器组。

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。