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

協助改善此頁面

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

想要為此使用者指南做出貢獻? 選擇 GitHub 上的編輯此頁面連結,該連結位於每個頁面的右窗格中。您的貢獻將幫助我們的使用者指南更適合每個人。

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

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

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

考量事項

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

  • 容量區塊目前無法與 搭配使用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 設定為自我管理節點群組適用的使用者資料

      以下是 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 範本,您可以在建立適用於工作負載的範例 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 能夠識別節點。如需詳細資訊,請參閱建立自我管理的 Amazon Linux 節點中 AWS Management Console 的指示。

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

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

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

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

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

    如果您未設定節點終止處理常式,建議您先開始Pods手動耗盡您的 ,然後再按下 30 分鐘的時段,以便有足夠的時間可以正常耗盡。