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

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

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

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

考量事項

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

  • 如果您要先建立自我管理節點群組,再讓容量保留變成作用中,請將所需的容量設定為 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 設定為自我管理節點群組適用的使用者資料

      以下是建立以容量區塊為目標的啟動範本的 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 管理主控台 說明。

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

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

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

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

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

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