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

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

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

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

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

考量事項

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

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

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

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

  • 為了使您的優雅排空,我們建議您按照示例Pods步驟中的說明設置 AWS 節點終止處理程序。

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

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

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

    確保LaunchTemplateData包括以下內容:

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

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

    • IamInstanceProfile與設Arn置為適用的 iam-instance-profile-arn

    • ImageId設定為適用 影像識別碼

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

    • SecurityGroupIds設定為適用的 IDs (例如: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資源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 能夠識別節點。如需詳細資訊,請參閱中的 AWS Management Console 指示建立自我管理的 Amazon Linux 節點

  4. 建議您根據容量區塊的保留時間,為 Auto Scaling 群組建立排程擴展政策。如需詳細資訊,請參閱 Amazon EC2 自動擴展使用者指南中的 Amazon EC2 Auto Scaling 的排程擴展。

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

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

  5. 節點群組現在已準備就緒,可供工作負載和 Pods 進行排程。

  6. 為了Pods使您的正常排空,我們建議您設置 AWS 節點終止處理程序。此處理常式將能夠使用 Amazon Auto ASG Scaling 監視來自 Amazon EC2 Auto Scaling 的「擴展」生命週期事件, EventBridge並允許Kubernetes控制平面在執行個體無法使用之前採取必要的動作。否則,您的 Pods 和 Kubernetes 物件都會卡在待處理狀態。如需詳細資訊,請參閱上的AWS 節點終止處理常式 GitHub。

    如果您未設定節點終止處理常式,建議您在接近 30 分鐘前開始手動耗盡 Pods,以便它們有足夠的時間正常耗盡。