本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 節點。
-
建立適用於工作負載的啟動範本。如需詳細資訊,請參閱 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
設定為適用的 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
由於容量區塊為區域性,因此您必須在進行保留的可用區域中傳遞子網路。
-
-
使用啟動範本建立自我管理節點群組。如果您在容量保留變為作用中之前執行此操作,請將所需的容量設定為
0
。建立節點群組時,請確定您只為保留容量的可用區域指定個別子網路。以下是範例 CloudFormation 範本,您可以在建立適用於工作負載的範例Word 範本時參考。此範例會取得上一個步驟中所示
AWS::Amazon EC2::LaunchTemplate
資源Version
的LaunchTemplateId
和 。這個範例也會取得在相同範本中其他位置宣告的DesiredCapacity
、MaxSize
、MinSize
和VPCZoneIdentifier
值。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
-
成功建立節點群組之後,請務必記錄所建立節點群組的
NodeInstanceRole
。您需要此功能,以確保在擴展節點群組時,新節點會加入叢集,並 Kubernetes 能夠識別節點。如需詳細資訊,請參閱建立自我管理的 Amazon Linux 節點中 AWS Management Console 的指示。 -
建議您根據容量區塊的保留時間,為 Auto Scaling 群組建立排程擴展政策。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的 Amazon Word Auto Scaling 的排程擴展。 EC2 Auto Scaling
在容量區塊結束時間的 30 分鐘前,您保留的所有執行個體都可以使用。屆時仍在執行的執行個體將會開始終止。為了能有足夠的時間正常耗盡節點,建議您在容量區塊保留結束前預留 30 分鐘以上,排程擴展至零。
如果您想要在容量保留變成 時手動擴展
Active
,則需要在容量區塊保留開始時更新 Auto Scaling 群組所需的容量。然後,您還需要在容量區塊保留結束前預留 30 分鐘以上手動縮減規模。 -
節點群組現已準備好用於工作負載和 Pods 要排程。
-
為了讓您的 Pods 若要正常耗盡,建議您設定 AWS Node Termination Handler。此處理常式將能夠監控來自 Amazon ASG Auto Scaling 的「EC2 Scale-in」生命週期事件, EventBridge 並允許 Kubernetes 控制平面,以在執行個體無法使用之前採取必要的動作。否則,您的 Pods 以及 Kubernetes 物件將卡在待定狀態。如需詳細資訊,請參閱 AWS Node Termination Handler
on GitHub。 如果您未設定節點終止處理常式,建議您開始耗盡您的 Pods 在達到 30 分鐘時段之前手動執行,以便他們有足夠的時間可以正常耗盡。