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

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

更新现有自行管理的节点组

本主题将帮助您更新现有Amazon CloudFormation使用新 AMI 的自行管理的节点堆栈。您可以使用此过程在集群更新后将节点更新为 Kubernetes 的新版本,也可以为现有 Kubernetes 版本更新为最新的 Amazon EKS 经优化的 AMI。

重要

本主题介绍适用于自行管理节点的节点更新。如果您正在使用 托管节点组,请参阅更新托管节点组

最新的默认亚马逊 EKS 节点Amazon CloudFormation模板将配置为使用新 AMI 在集群中启动实例,然后再删除旧 AMI,一次删除一个。此配置可确保您在滚动更新期间始终具有 Auto Scaling 组所需的集群中活动实例计数。

注意

使用创建的节点组不支持此方法eksctl。如果您使用创建了集群或节点组eksctl,请参阅迁移到新的节点组

更新现有节点组

  1. 确定集群的 DNS 提供商。

    kubectl get deployments -l k8s-app=kube-dns -n kube-system

    输出(此集群使用的是适用于 DNS 解析的 kube-dns,但您的集群可能会改为返回 coredns):

    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE <kube-dns> 1 1 1 1 31m
  2. 如果您的当前部署所运行的副本少于 2 个,请将部署扩展到 2 个副本。如果您的上一个命令输出返回了该项,请用 coredns 替换 kube-dns

    kubectl scale deployments/<kube-dns> --replicas=2 -n kube-system
  3. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署向下扩展到 0 个副本以避免相互冲突的扩展操作。

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  4. 确定当前节点组的实例类型和所需的实例计数。稍后,您在更新该组的 Amazon CloudFormation 模板时将输入这些值。

    1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

    2. 选择启动配置,然后记下现有节点启动配置的实例类型。

    3. 选择Auto Scaling 组在左侧导航窗格中,请注意预期数量现有节点 Auto Scaling 组的实例计数。

  5. 打开 Amazon CloudFormation 控制台,网址:https://console.aws.amazon.com/cloudformation

  6. 选择节点组堆栈,然后选择更新

  7. 选择替换当前模板,然后选择 Amazon S3 URL

  8. 适用于Amazon S3 URL中,将以下 URL 粘贴到文本区域中以确保您使用的是最新版本的节点Amazon CloudFormation模板,然后选择下一步

    https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
  9. Specify stack details (指定堆栈详细信息) 页面上,填写以下参数,然后选择 Next (下一步)

    • NodeAutoScalingGroupDesiredCapacity— 输入所需的实例计数,您在上一步,或者输入新的所需节点数目以在更新堆栈时扩展到的所需节点数。

    • NodeAutoScalingGroupMaxSize— 输入节点 Auto Scaling 组可扩展到的最大节点数。此值必须至少比所需容量大 1 个节点,以便您在更新期间对节点进行滚动更新而不会减少节点数。

    • NodeInstanceType— 选择您在上一步,或为节点选择不同的实例类型。每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),每个 ENI 都支持最大数量的 IP 地址。由于为每个工作节点和容器分配了自己的 IP 地址,因此选择一个实例类型,该类型将支持您希望在每个工作节点上运行的最大容量的容器。有关实例类型支持的 ENI 和 IP 地址数的列表,请参阅每种实例类型的每个网络接口的 IP 地址数。例如,m5.large实例类型最多支持 30 个工作线程节点和容器的 IP 地址。某些实例类型可能并非在所有区域都可用。

      注意

      最新版本的适用于 Kubernetes 的 Amazon VPC CNI 插件已显示此处。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅 手动更新亚马逊 VPC CNI 加载项

      重要

      某些实例类型可能并非在所有区域都可用。

    • NodeImageIdSSMParam— 您要更新到的 AMI ID 的 Amazon EC2 Systems Manager 参数。以下值为 Kubernetes 1.20 版本使用最新的 Amazon EKS 优化的 AMI。

      /aws/service/eks/optimized-ami/<1.20>/<amazon-linux-2>/recommended/image_id

      您可以替换<1.20>(包括<>),其中包含支持的 Kubernetes 版本,或者最多比在控制平面上运行的 Kubernetes 版本早一个版本。我们建议您将节点保持在与控制平面相同的版本。如果要使用 Amazon EKS 优化的加速 AMI,请将<amazon-linux-2>替换为<amazon-linux-2-gpu>

      注意

      使用 Amazon EC2 Systems Manager 参数让您可以在以后更新节点而无需查找和指定 AMI ID。如果您的Amazon CloudFormation堆栈使用此值,则任何堆栈更新将为您指定的 Kubernetes 版本始终启动最新推荐的 Amazon EKS 优化 AMI,即使您未更改模板中的任何值。

    • NodeImageId – 要使用您的自定义 AMI,请输入要使用的 AMI 的 ID。

      重要

      此值覆盖为 NodeImageIdSSMParam 指定的任意值。如果您要使用 NodeImageIdSSMParam 值,请确保 NodeImageId 的值为空白。

    • 禁用数据库— 默认情况下,每个节点都支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2,但您可以禁用 IMDSv1。Selecttrue如果您不希望节点组中的任何节点或节点组中节点上计划的任何窗格使用 IMDSv1。有关 IMDS 的更多信息,请参阅配置实例元数据服务。如果您已经为服务账户实现了 IAM 角色,则已将必要的权限直接分配给需要访问Amazon服务,并且群集中没有容器需要访问 IMDS 的其他原因(例如检索当前区域),那么您还可以禁用不使用主机网络的容器对 IMDSv2 的访问。有关更多信息,请参阅 限制对 IMDS 和 Amazon EC2 实例配置文件证书的访问权限

  10. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择 Next (下一步)

  11. 在存储库的审核页面上,审核您的信息,确认堆栈可创建 IAM 资源,然后选择更新堆栈

    注意

    集群中每个节点的更新需要几分钟时间。等待所有节点更新完成,然后再执行后续步骤。

  12. 如果您的集群的 DNS 提供商是 kube-dns,请将 kube-dns 部署缩减为 1 个副本。

    kubectl scale deployments/kube-dns --replicas=1 -n kube-system
  13. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署缩减为所需数量的副本。

    kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system
  14. (可选)确认您使用的是最新版本的适用于 Kubernetes 的 Amazon VPC CNI 插件。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅 手动更新亚马逊 VPC CNI 加载项