更新集群的托管式节点组 - Amazon EKS

更新集群的托管式节点组

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

在几种情况下,需要更新 Amazon EKS 托管节点组的版本或配置:

  • 您已更新 Amazon EKS 集群的 Kubernetes 版本,并且您希望更新节点以使用相同 Kubernetes 版本。

  • 新 AMI 发行版本可用于您的托管节点组。有关 AMI 版本的更多信息,请参阅以下章节:

  • 您希望调整托管节点组中的最少、最多或所需实例数。

  • 您希望对托管节点组中的实例添加或删除 Kubernetes 标签。

  • 您希望对托管节点组添加或删除 AWS 标签。

  • 您需要部署包含配置更改(如更新的自定义 AMI)的最新版本启动模板。

  • 您已部署了版本 1.9.0 或更高版本的 Amazon VPC CNI 附加组件,启用了前缀委派附加组件,并希望节点组中的新 AWS Nitro System 实例支持显著增加的 Pods 数量。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址

  • 您已为 Windows 节点启用了 IP 前缀委派,并希望节点组中的新 AWS Nitro System 实例支持数量显著增加的 Pods。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址

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

如果托管节点组中的节点因扩缩操作或更新而终止,将会先耗尽该节点中的 Pods。有关更多信息,请参阅 了解节点更新的各个阶段

更新节点组版本

您可以使用以下任一方式更新节点组版本:

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

eksctl

使用 eksctl 更新托管节点组

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

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

如果要将使用启动模板部署的节点组升级到新的启动模板版本,请将 --launch-template-version version-number 添加到上述命令。启动模板必须满足使用启动模板自定义托管节点中所述的要求。如果启动模板包含自定义 AMI,则 AMI 必须满足指定 AMI 中的要求。将节点组升级到启动模板的更新版本后,将回收所有节点,以匹配指定的启动模板版本的新配置。

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

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

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

AWS Management Console

要使用 AWS Management Console创建托管节点组

  1. 打开 Amazon EKS console 控制台

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

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

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

    1. 创建 AMI 的新版本。

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

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

  4. Update node group version(更新节点组版本)对话框中,激活或停用以下选项:

    • Update node group version(更新节点组版本):如果您部署了自定义 AMI,或者您的 Amazon EKS 优化版 AMI 当前位于集群的最新版本上,则此选项不可用。

    • Change launch template version(更改启动模板版本):如果部署节点组时没有使用自定义启动模板,则此选项不可用。您只能更新已使用自定义启动模板部署的节点组的启动模板版本。选择要将节点组更新到的 Launch template version(启动模板版本)。如果您的节点组配置了自定义 AMI,则您选择的版本还必须指定 AMI。升级到更新版本的启动模板后,所有节点都会被回收,以匹配指定的启动模板版本的新配置。

  5. 对于 Update strategy(更新策略),选择下列选项之一:

    • 滚动更新 – 此选项会考虑集群的 Pod 中断预算。如果 Pod 中断预算问题导致 Amazon EKS 无法正常耗尽在此节点组上运行的 Pods,则更新将失败。

    • 强制更新 – 此选项不考虑Pod中断预算。通过强制节点重新启动,无论是否存在 Pod 中断预算问题,都会进行更新。

  6. 选择更新

编辑节点组配置

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

  1. 打开 Amazon EKS console 控制台

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

  3. 选择计算选项卡。

  4. 选择要编辑的节点组,然后选择 Edit(编辑)。

  5. (可选)在编辑节点组页面上,执行以下操作:

    1. 编辑 Node group scaling configuration(节点组扩展配置)。

      • 所需大小 – 指定托管节点组应当维持的当前节点数量。

      • 最小大小 – 指定托管节点组可以横向缩减到的最小节点数量。

      • 最大大小 – 指定托管节点组可以横向扩展到的最大节点数量。有关节点组中支持的最大节点数,请参阅 查看和管理 Amazon EKS 和 Fargate 服务配额

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

    3. (可选)向节点组中的节点添加或删除 Kubernetes 污点。添加的污点可以具有 NoSchedule NoExecute PreferNoSchedule 效果。有关更多信息,请参阅 防止在特定节点上调度 Pods

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

    5. (可选)编辑节点组更新配置。选择数字百分比

      • Number(数字)– 选择并指定节点组中可以并行更新的节点数。这些节点在更新过程中将不可用。

      • Percentage(百分比)– 选择并指定节点组中可并行更新的节点的百分比。这些节点在更新过程中将不可用。如果您的节点组中有大量节点,这将非常有用。

    6. 编辑完成后,选择保存更改

重要

更新节点组配置时,修改 NodegroupScalingConfig不会考虑Pod中断预算(PDB)。与更新节点组进程(在升级阶段耗尽节点并考虑 PDB)不同,更新扩展配置会导致通过自动扩缩组(ASG)缩减调用立即终止节点。这种情况在不考虑 PDB 的情况下发生,无论缩减到什么目标大小。这意味着,当您减少 Amazon EKS 托管节点组的 desiredSize 时,只要节点终止,Pods 就会立即被驱逐,而不考虑任何 PDB。