使用 ML 的容量區塊建立自我管理節點 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 ML 的容量區塊建立自我管理節點

機器學習 (ML) 的容量區塊可讓您在未來日期保留 GPU 執行個體,以支援您的短期 ML 工作負載。如需詳細資訊,請參閱 Amazon EC2 Linux 執行個體使用者指南中的 ML 的容量區塊

考量事項

重要
  • 容量區塊僅適用於特定 Amazon EC2 執行個體類型和 AWS 區域。如需相容性資訊,請參閱適用於 Linux 執行個體的 Amazon EC2 使用者指南中的使用容量區塊先決條件

  • 容量區塊目前無法與 搭配使用 Karpenter.

  • 如果您在容量保留變為作用中之前建立自我管理節點群組,請將所需的容量設定為 0

  • 為了能有足夠的時間正常耗盡節點,建議您在容量區塊保留結束前預留 30 分鐘以上,排程擴展至零。

  • 為了讓您的 Pods 若要正常耗盡,建議您如範例步驟所述設定 AWS Node Termination Handler。

搭配自我管理節點使用容量區塊

您可以使用容量區塊搭配 Amazon EKS 來佈建和擴展自我管理節點。下列步驟提供一般範例概觀。 AWS CloudFormation 範本範例並未涵蓋生產工作負載中所需的每個層面。通常,您也需要引導指令碼將節點加入叢集、指定 Amazon EKS 加速 AMI,以及適當的執行個體設定檔以加入叢集。如需詳細資訊,請參閱建立自我管理的 Amazon Linux 節點

  1. 建立適用於工作負載的啟動範本。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的使用機器學習工作負載的容量區塊

    請確定 LaunchTemplateData包含下列項目:

    • InstanceMarketOptions 並將 MarketType 設為 "capacity-block"

    • CapacityReservationSpecification: CapacityReservationTargetCapacityReservationId 設定為容量區塊 cr-02168da1478b509e0 (例如:)

    • IamInstanceProfileArn設定為適用的 iam-instance-profile-arn

    • ImageId 設定為適用的 image-id

    • InstanceType 設定為支援容量區塊的執行個體類型 (例如:p5.48xlarge)

    • SecurityGroupIds 設定為適用的 IDs (例如:sg-05b1d815d1EXAMPLE)

    • UserData 設定為適用的 user-data 適用於自我管理節點群組

      以下是 a 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 範本,您可以在建立適用於工作負載的範例Word 範本時參考。此範例會取得上一個步驟中所示 AWS::Amazon EC2::LaunchTemplate資源VersionLaunchTemplateId和 。這個範例也會取得在相同範本中其他位置宣告的 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. 建議您根據容量區塊的保留時間,為 Auto Scaling 群組建立排程擴展政策。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的 Amazon Word Auto Scaling 的排程擴展。 EC2 Auto Scaling

    在容量區塊結束時間的 30 分鐘前,您保留的所有執行個體都可以使用。屆時仍在執行的執行個體將會開始終止。為了能有足夠的時間正常耗盡節點,建議您在容量區塊保留結束前預留 30 分鐘以上,排程擴展至零。

    如果您想要在容量保留變成 時手動擴展Active,則需要在容量區塊保留開始時更新 Auto Scaling 群組所需的容量。然後,您還需要在容量區塊保留結束前預留 30 分鐘以上手動縮減規模。

  5. 節點群組現已準備好用於工作負載和 Pods 要排程。

  6. 為了讓您的 Pods 若要正常耗盡,建議您設定 AWS Node Termination Handler。此處理常式將能夠監控來自 Amazon ASG Auto Scaling 的「EC2 Scale-in」生命週期事件, EventBridge 並允許 Kubernetes 控制平面,以在執行個體無法使用之前採取必要的動作。否則,您的 Pods 以及 Kubernetes 物件將卡在待定狀態。如需詳細資訊,請參閱 AWS Node Termination Handler on GitHub。

    如果您未設定節點終止處理常式,建議您開始耗盡您的 Pods 在達到 30 分鐘時段之前手動執行,以便他們有足夠的時間可以正常耗盡。