

 **協助改進此頁面** 

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

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

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

# 使用 ML 的容量區塊建立自我管理節點
<a name="capacity-blocks"></a>

機器學習 (ML) 的容量區塊可讓您指定未來日期保留 GPU 執行個體，以支援短期 ML 工作負載。如需詳細資訊，請參閱《*適用於 Linux 執行個體 的 Amazon EC2 使用者指南*》中 [ML 的容量區塊](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html)。

## 考量事項
<a name="capacity-blocks-considerations"></a>

**重要**  
容量區塊僅適用於特定 Amazon EC2 執行個體類型與 AWS 區域。如需相容性資訊，請參閱《*Amazon EC2 Linux 執行個體使用者指南*》中的[使用容量區塊的先決條件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html#capacity-blocks-prerequisites)。
如果您要先建立自我管理節點群組，再讓容量保留變成作用中，請將所需的容量設定為 `0`。
為了能有足夠的時間正常耗盡節點，建議您在容量區塊保留結束前預留 30 分鐘以上，排程擴展至零。
為了使您的 Pod 正常耗盡，建議您按照範例步驟中的說明，設定 AWS 節點終止處理常式。

## 在自行管理節點中使用容量區塊
<a name="capacity-blocks-procedure"></a>

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

1. 建立適用於您工作負載的啟動範本。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**的[使用容量區塊處理機器學習工作負載](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-template-capacity-blocks.html)。

   確保 `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
     ```

     由於容量區塊為區域性，因此您必須在進行保留的可用區域中傳遞子網路。

1. 使用啟動範本來建立自我管理節點群組。如果您在容量保留生效之前執行此操作，請將期望容量設定為 `0`。建立節點群組時，請確定您只為保留容量的可用區域指定個別子網路。

   以下是一個範例 CloudFormation 範本，您在建立適用於您工作負載的範本時可以參考。我們利用上一個步驟中所示的 ` AWS::Amazon EC2::LaunchTemplate` 資源，針對其中的 `LaunchTemplateId` 與 `Version` 來示範取得的值。這個範例也會取得在相同範本中其他位置宣告的 `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
   ```

1. 成功建立節點群組之後，請務必記錄所建立節點群組的 `NodeInstanceRole`。這麼做才能確保節點群組擴展時，新節點會加入叢集，且 Kubernetes 能夠識別節點。如需更多資訊，請參閱[建立自我管理的 Amazon Linux 節點](launch-workers.md)中的 AWS 管理主控台 說明。

1. 建議您根據容量區塊的保留時間，為 Auto Scaling 群組建立排程擴展政策。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的[為 Amazon EC2 Auto Scaling 排程擴展](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-scheduled-scaling.html)。

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

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

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

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

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