更新托管节点组 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

更新托管节点组

在多种情况下,更新 Amazon EKS 托管节点组的版本或配置会很有用:

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

  • 新 AMI 发行版本可用于您的托管节点组。有关 AMI 版本的更多信息,请参阅Amazon EKS 优化的 Amazon Linux AMI 版本

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

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

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

  • 您需要部署具有配置更改的启动模板的新版本,如更新的自定义 AMI。

如果您的托管节点组的 Kubernetes 版本具有较新的 AMI 发行版,则可以更新节点组的版本以使用较新的 AMI 版本。同样,如果您的集群运行的 Kubernetes 版本高于节点组,则可以更新节点组以使用最新的 AMI 发行版来匹配集群的 Kubernetes 版本。

注意

您无法将节点组回滚到较早的 Kubernetes 版本或 AMI 版本。

当托管节点组中的节点因扩展操作或更新而终止时,将会先耗尽该节点中的 Pod。有关更多信息,请参阅托管节点更新行为

更新节点组版本

您可以使用 AWS 管理控制台 或 eksctl 更新节点组版本。

使用 AWS 管理控制台 更新节点组版本

  1. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署缩减至零个副本以避免冲突的扩展操作。

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  2. https://console.amazonaws.cn/eks/home#/clusters 处打开 Amazon EKS 控制台。

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

  4. 如果至少有一个使用 Amazon EKS 优化型 AMI 部署的节点组有可用的更新,您将在集群名称下看到一条通知。通知可让您了解有多少节点组具有可用的更新。在 Configuration (配置) 选项卡的 Compute (计算) 选项卡上的 Node Groups (节点组) 表中,您将看到这些值右侧的 Update now (立即更新)

    • 具有 优化 AMI 更新的每个节点组的 AMI 发行版Amazon EKS列中的值。如果使用自定义 AMI 部署节点组,则不会显示此选项。如果节点是使用自定义 AMI 部署的,则应执行以下步骤来部署新的已更新的自定义 AMI。首先,创建 AMI 的新版本,然后使用新的 AMI ID 创建新的启动模板版本,最后将节点升级到新版本的启动模板。为此,请为要更新的节点组选择 Update now (立即更新)

    • 使用启动模板部署的每个节点组的 Launch template (启动模板) 列中的值。为要更新其启动模板版本的节点组选择 Update now (立即更新)

    如果您从表中选择一个节点组,并且它有一个可用更新,您将在 Node Group configuration (节点组配置) 页面上收到一条通知。在此页面上,您可以选择 Update now (立即更新)

  5. Update Node Group version (更新节点组版本) 页面上,选择:

    • Update Node Group version (更新节点组版本) 如果您部署了自定义 AMI 或者您的 EKS 优化 AMI 已在集群的最新版本上,则此选项不可用。–

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

  6. 对于 Update strategy (更新策略),选择以下选项之一,然后选择 Update (更新)

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

    • 强制更新 – 此选项不考虑 Pod 中断预算。强制重新启动节点以进行更新,而不考虑 Pod 中断预算问题。

  7. (可选)如果您使用 Kubernetes Cluster Autoscaler,请将部署扩展回所需数量的副本。

    kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system

使用 eksctl 更新节点组版本

  1. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署缩减至零个副本以避免冲突的扩展操作。

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  2. 使用以下命令将托管节点组升级到节点上当前部署的相同 Kubernetes 版本的最新 AMI 版本。

    eksctl upgrade nodegroup --name=<node-group-name> --cluster=<cluster-name>
    注意

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

    您无法直接将在没有启动模板的情况下部署的节点组升级到新的启动模板版本。相反,您必须使用启动模板部署新的节点组,以将节点组更新为新的启动模板版本。

    您可以将节点组升级到比节点组的当前 Kubernetes 版本高一个次要版本的版本,但该版本不能晚于集群的 Kubernetes 版本。例如,如果您的集群运行 Kubernetes 1.18,则可以使用以下命令将当前运行 Kubernetes 1.17 的节点升级到版本 1.18。

    eksctl upgrade nodegroup --name=<node-group-name> --cluster=<cluster-name> --kubernetes-version=<1.18>
  3. (可选)如果您使用 Kubernetes Cluster Autoscaler,请将部署扩展回所需数量的副本。

    kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system

编辑节点组配置

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

编辑节点组配置

  1. https://console.amazonaws.cn/eks/home#/clusters 处打开 Amazon EKS 控制台。

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

  3. 选择 Configuration (配置) 选项卡。在 Compute (计算) 选项卡上,选择要编辑的节点组,然后选择 Edit (编辑)

  4. (可选)在 Edit node group (编辑节点组) 页面上,编辑 Group configuration (组配置)

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

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

  5. (可选)在 Edit node group (编辑节点组) 页面上,编辑 Group size (组大小)

    • Minimum size (最小大小) – 指定托管节点组可以缩减到的最小节点数。

    • 最大大小 – 指定托管节点组可扩展到的最大节点数。默认情况下,托管节点组最多支持 100 个节点。

    • Desired size (所需大小) – 指定托管节点组应保留的当前节点数。

  6. 完成编辑后,选择 Save changes (保存更改)