

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 将暖池与托管节点组配合使用来减少启动时间较长的应用程序的延迟
<a name="warm-pools-managed-node-groups"></a>

当应用程序初始化或启动时间较长时，横向扩展事件可能会导致延迟，新节点必须完全启动并加入集群后，才能在其上调度容器组（pod）。在流量激增或快速扩展事件期间，此延迟可能会影响应用程序可用性。暖池通过维护一个由已完成启动过程的预初始化 EC2 实例组成的池来解决此问题。在横向扩展事件期间，实例会直接从暖池移动到集群，从而绕过耗时的初始化步骤，并大大缩短新容量可用所需的时间。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[使用暖池减少启动时间较长的应用程序的延迟](https://docs.amazonaws.cn/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html)。

Amazon EKS 托管节点组支持 Amazon EC2 Auto Scaling 暖池。暖池将预初始化的 EC2 实例与您的自动扩缩组一起保存，它们在横向扩展事件期间可以快速加入您的集群。暖池中的实例已完成了启动初始化过程，可以保持在 `Stopped`、`Running` 或 `Hibernated` 状态。

Amazon EKS 使用 `AWSServiceRoleForAmazonEKSNodegroup` 服务相关角色在整个节点组生命周期中管理暖池，以创建、更新和删除暖池资源。

## 工作原理
<a name="warm-pools-how-it-works"></a>

当您配置暖池时，Amazon EKS 会创建一个附加到您的节点组的自动扩缩组的 EC2 Auto Scaling 暖池。实例启动到暖池，完成启动初始化过程，并在需要之前保持配置状态（`Running`、`Stopped` 或 `Hibernated`）。在横向扩展事件期间，实例会从暖池移动到自动扩缩组，完成 Amazon EKS 初始化过程以加入集群，并变为可用于容器组（pod）调度。启用实例重用后，实例可以在横向缩减事件期间返回到暖池。

**重要**  
请务必使用 `create-nodegroup` 或 `update-nodegroup-config` 通过 Amazon EKS API 配置暖池。请勿使用 EC2 Auto Scaling API 手动修改暖池设置，因为这可能会导致与 Amazon EKS 资源管理发生冲突。

## 注意事项
<a name="warm-pools-considerations"></a>

**重要**  
在配置暖池之前，请查看《Amazon EC2 Auto Scaling 用户指南》**中的 [Amazon EC2 Auto Scaling 的暖池](https://docs.amazonaws.cn/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html)中的先决条件和限制。并非所有实例类型、AMI 或配置均受支持。
+  **IAM 权限**：`AWSServiceRoleForAmazonEKSNodegroup` 服务相关角色（使用第一个托管节点组自动创建）包括必要的暖池管理权限。
+  **AMI 限制**：暖池不支持自定义 AMI。您必须使用 Amazon EKS 优化 AMI。
+  **Bottlerocket 限制**：如果使用 Bottlerocket AMI，则不支持 `Hibernated` 池状态。仅使用 `Stopped` 或 `Running` 池状态。此外，Bottlerocket AMI 不支持 `reuseOnScaleIn` 功能。
+  **休眠支持**：仅特定实例类型支持 `Hibernated` 池状态。有关支持的实例类型，请参阅《Amazon EC2 用户指南》**中的[休眠先决条件](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)。
+  **成本影响**：在不需要的情况下创建暖池可能会导致不必要的成本。
+  **容量规划**：根据扩展模式调整暖池规模以平衡成本和可用性。从预期峰值容量的 10-20% 开始。
+  **VPC 网络**：确保为自动扩缩组和暖池实例提供足够的 IP 地址。

## 配置暖池
<a name="warm-pools-configuration"></a>

您可以在创建新的托管节点组时配置暖池，或者更新现有的托管节点组以添加暖池支持。

### 配置参数
<a name="warm-pools-parameters"></a>
+  **enabled**：（布尔值）表示您打算将暖池附加到托管节点组。启用暖池支持所必需的。
+  **maxGroupPreparedCapacity**：（整数）暖池和自动扩缩组的最大实例总数。
+  **minSize**：（整数）要在暖池中维护的最少实例数。默认值：`0`。
+  **poolState**：（字符串）暖池实例的状态。默认值：`Stopped`。
+  **reuseOnScaleIn**：（布尔值）实例在横向缩减事件期间是否返回到暖池，而不是终止它们。默认值：`false`。Bottlerocket AMI 不支持。

### 使用 Amazon CLI
<a name="warm-pools-create-cli"></a>

您可以在创建托管节点组时配置暖池，或将其添加到现有的节点组中。

 **创建带有暖池的节点组** 

```
aws eks create-nodegroup \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --node-role arn:aws:iam::111122223333:role/AmazonEKSNodeRole \
  --subnets subnet-12345678 subnet-87654321 \
  --region us-east-1 \
  --scaling-config minSize=2,maxSize=10,desiredSize=3 \
  --warm-pool-config enabled=true,maxGroupPreparedCapacity=8,minSize=2,poolState=Stopped,reuseOnScaleIn=true
```

 **向现有节点组添加暖池** 

```
aws eks update-nodegroup-config \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --region us-east-1 \
  --warm-pool-config enabled=true,maxGroupPreparedCapacity=8,minSize=2,poolState=Stopped,reuseOnScaleIn=true
```

## 更新配置
<a name="warm-pools-update"></a>

随时使用 `update-nodegroup-config` 更新暖池设置。现有暖池实例不会立即受到影响；新设置适用于更新后进入暖池的实例。

```
aws eks update-nodegroup-config \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --region us-east-1 \
  --warm-pool-config enabled=true,maxGroupPreparedCapacity=10,minSize=3,poolState=Running,reuseOnScaleIn=true
```

要禁用附加到节点组的暖池，请设置 `enabled=false`：

```
aws eks update-nodegroup-config \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --region us-east-1 \
  --warm-pool-config enabled=false
```

## 其他资源
<a name="warm-pools-additional-resources"></a>
+  《Amazon EC2 Auto Scaling 用户指南》**中的 [Amazon EC2 Auto Scaling 的暖池](https://docs.amazonaws.cn/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html) 
+  [使用托管节点组简化节点生命周期](managed-node-groups.md) 