

 **帮助改进此页面** 

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

# 更新集群的托管式节点组
<a name="update-managed-node-group"></a>

启动托管节点组更新后，Amazon EKS 会自动更新您的节点，完成[了解节点更新的各个阶段](managed-node-update-behavior.md)中列出的步骤。如果您使用的是 Amazon EKS 优化版 AMI，Amazon EKS 会自动将最新的安全补丁和操作系统更新应用到您的节点，作为最新 AMI 版本的一部分。

在几种情况下，需要更新 Amazon EKS 托管节点组的版本或配置：
+ 您已更新 Amazon EKS 集群的 Kubernetes 版本，并且您希望更新节点以使用相同 Kubernetes 版本。
+ 新 AMI 发行版本可用于您的托管节点组。有关 AMI 版本的更多信息，请参阅以下章节：
  +  [检索 Amazon Linux AMI 版本信息](eks-linux-ami-versions.md) 
  +  [使用优化版 Bottlerocket AMI 创建节点](eks-optimized-ami-bottlerocket.md) 
  +  [检索 Windows AMI 版本信息](eks-ami-versions-windows.md) 
+ 您希望调整托管节点组中的最少、最多或所需实例数。
+ 您希望对托管节点组中的实例添加或删除 Kubernetes 标签。
+ 您希望对托管节点组添加或删除 AWS 标签。
+ 您需要部署包含配置更改（如更新的自定义 AMI）的最新版本启动模板。
+ 您已部署了版本 `1.9.0` 或更高版本的 Amazon VPC CNI 附加组件，启用了前缀委派附加组件，并希望节点组中的新 AWS Nitro 实例支持数量显著增加的容器组（pod）。有关更多信息，请参阅 [为带前缀的 Amazon EKS 节点分配更多 IP 地址](cni-increase-ip-addresses.md)。
+ 您已为 Windows 节点启用了 IP 前缀委派，并希望节点组中的新 AWS Nitro System 实例支持数量显著增加的容器组（pod）。有关更多信息，请参阅 [为带前缀的 Amazon EKS 节点分配更多 IP 地址](cni-increase-ip-addresses.md)。

如果有相比您托管节点组的 Kubernetes 版本更新的 AMI 发行版，则可以将您节点组的版本更新为使用较新的 AMI 版本。同理，如果集群运行的 Kubernetes 版本比节点组更新，则可以将节点组更新为使用与集群 Kubernetes 版本匹配的最新 AMI 发行版。

如果托管节点组中的节点因扩展操作或更新而终止，则会先耗尽该节点中的容器组（pod）。有关更多信息，请参阅 [了解节点更新的各个阶段](managed-node-update-behavior.md)。

## 更新节点组版本
<a name="mng-update"></a>

您可以使用以下任一方式更新节点组版本：
+  [`eksctl`](#eksctl_update_managed_nodegroup) 
+  [AWS 管理控制台](#console_update_managed_nodegroup) 

您更新到的版本不能高于控制面板的版本。

## `eksctl`
<a name="eksctl_update_managed_nodegroup"></a>

 **使用 `eksctl` 更新托管节点组** 

使用以下命令，将托管节点组更新到节点上当前部署的相同 Kubernetes 版本的最新 AMI 版本。将所有 *example value* 替换为您自己的值。

```
eksctl upgrade nodegroup \
  --name=node-group-name \
  --cluster=my-cluster \
  --region=region-code
```

**注意**  
如果要将使用启动模板部署的节点组升级到新的启动模板版本，请将 `--launch-template-version version-number ` 添加到上述命令。启动模板必须满足[使用启动模板自定义托管节点](launch-templates.md)中所述的要求。如果启动模板包含自定义 AMI，则 AMI 必须满足[指定 AMI](launch-templates.md#launch-template-custom-ami) 中的要求。将节点组升级到启动模板的更新版本后，将回收所有节点，以匹配指定的启动模板版本的新配置。

您不能将未使用启动模板部署的节点组直接升级到新的启动模板版本。相反，您必须使用启动模板部署新的节点组，以将节点组更新为新的启动模板版本。

您可以将节点组升级到与控制面板的 Kubernetes 版本相同的版本。例如，如果您的集群运行 Kubernetes `1.35`，则您可以使用以下命令，将当前运行 Kubernetes `1.34` 的节点升级到版本 `1.35`。

```
eksctl upgrade nodegroup \
  --name=node-group-name \
  --cluster=my-cluster \
  --region=region-code \
  --kubernetes-version=1.35
```

## AWS 管理控制台
<a name="console_update_managed_nodegroup"></a>

 **要使用 AWS 管理控制台创建托管节点组** 

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 选择包含要更新的节点组的集群。

1. 如果至少有一个节点组具有可用更新，则页面顶部将出现一个提示框，通知存在可用的更新。如果选择**计算**选项卡，则在具有可用更新的节点组的**节点组**表中，**AMI 发行版本**列会显示**立即更新**。要更新节点组，请选择 **Update now**（立即更新）。

   对于使用自定义 AMI 部署的节点组，不会显示通知。如果您的节点是使用自定义 AMI 部署的，请完成以下步骤以部署更新的自定义 AMI。

   1. 创建 AMI 的新版本。

   1. 使用新 AMI ID 创建新的启动模板版本。

   1. 将节点升级到新版本的启动模板。

1. 在 **Update node group version**（更新节点组版本）对话框中，激活或停用以下选项：
   +  **Update node group version**（更新节点组版本）：如果您部署了自定义 AMI，或者您的 Amazon EKS 优化版 AMI 当前位于集群的最新版本上，则此选项不可用。
   +  **Change launch template version**（更改启动模板版本）：如果部署节点组时没有使用自定义启动模板，则此选项不可用。您只能更新已使用自定义启动模板部署的节点组的启动模板版本。选择要将节点组更新到的 **Launch template version**（启动模板版本）。如果您的节点组配置了自定义 AMI，则您选择的版本还必须指定 AMI。升级到更新版本的启动模板后，所有节点都会被回收，以匹配指定的启动模板版本的新配置。

1. 对于 **Update strategy**（更新策略），选择下列选项之一：
   +  **滚动更新** – 此选项会考虑集群的容器组（pod）中断预算。如果容器组（pod）中断预算问题导致 Amazon EKS 无法正常耗尽在此节点组上运行的容器组（pod），则更新将失败。
   +  **强制更新** – 此选项不考虑容器组（pod）中断预算。通过强制节点重新启动，无论是否存在容器组（pod）中断预算问题，都会发生更新。

1. 选择**更新**。

## 编辑节点组配置
<a name="mng-edit"></a>

您可以修改托管节点组的某些配置。

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 选择包含要编辑的节点组的集群。

1. 选择**计算**选项卡。

1. 选择要编辑的节点组，然后选择 **Edit**（编辑）。

1. （可选）在**编辑节点组**页面上，执行以下操作：

   1. 编辑 **Node group scaling configuration**（节点组扩展配置）。
      +  **所需大小** – 指定托管节点组应当维持的当前节点数量。
      +  **最小大小** – 指定托管节点组可以横向缩减到的最小节点数量。
      +  **最大大小** – 指定托管节点组可以横向扩展到的最大节点数量。有关节点组中支持的最大节点数，请参阅 [查看和管理 Amazon EKS 和 Fargate 服务配额](service-quotas.md)。

   1. （可选）向节点组中的节点添加或删除 **Kubernetes 标签**。此处显示的标签仅为已应用于 Amazon EKS 的标签。节点上可能存在此处未显示的其它标签。

   1. （可选）向节点组中的节点添加或删除 **Kubernetes 污点**。添加的污点可以具有 ` NoSchedule `、` NoExecute ` 或 ` PreferNoSchedule ` 效果。有关更多信息，请参阅 [方案：防止在特定节点上调度容器组（pod）](node-taints-managed-node-groups.md)。

   1. （可选）向节点组资源添加或删除 **Tags**（标签）。这些标签仅应用于 Amazon EKS 节点组。这些标签不会传播到其它资源，例如节点组中的子网或 Amazon EC2 实例。

   1. （可选）编辑**节点组更新配置**。选择**数字**或**百分比**。
      +  **Number**（数字）– 选择并指定节点组中可以并行更新的节点数。这些节点在更新过程中将不可用。
      +  **Percentage**（百分比）– 选择并指定节点组中可并行更新的节点的百分比。这些节点在更新过程中将不可用。如果您的节点组中有大量节点，这将非常有用。

   1. 编辑完成后，选择**保存更改**。

**重要**  
更新节点组配置时，修改 [https://docs.aws.amazon.com/eks/latest/APIReference/API_NodegroupScalingConfig.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_NodegroupScalingConfig.html) 不会考虑容器组（pod）中断预算（PDB）。与[更新节点组](managed-node-update-behavior.md)进程（在升级阶段耗尽节点并考虑 PDB）不同，更新扩展配置会导致通过自动扩缩组（ASG）缩减调用立即终止节点。这种情况在不考虑 PDB 的情况下发生，无论缩减到什么目标大小。这意味着，当您减少 Amazon EKS 托管节点组的 `desiredSize` 时，只要节点终止，容器组（pod）就会立即被驱逐，而不考虑任何 PDB。