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

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

本主题介绍如何使用新 AMI 更新现有 Amazon CloudFormation 自行管理的节点堆栈。在集群更新后,可以使用此过程将节点更新为新版本的 Kubernetes。或者,您可以更新到针对现有 Kubernetes 版本的最新 Amazon EKS 优化 AMI。

重要

本主题介绍适用于自行管理的节点的节点更新。有关使用 托管节点组 的信息,请参阅更新托管节点组

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

注意

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

更新现有节点组

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

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

    输出如下所示。此集群使用 coredns 解析 DNS,但您的集群可能会返回 kube-dns

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

    kubectl scale deployments/coredns --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. 在左侧导航窗格中,选择 Launch Configurations(启动配置),然后记下现有节点启动配置的实例类型。

    3. 在左侧导航窗格中,选择 Auto Scaling Groups(Auto Scaling 组),并记下现有节点 Auto Scaling 组的 Desired(所需)实例计数。

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

  6. 选择您的节点组堆栈,然后选择 Update(更新)

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

  8. 对于 Amazon S3 URL,请将以下 URL 粘贴到文本区域中以确保您使用的是最新版本的节点 Amazon CloudFormation 模板。接下来,选择 Next(下一步):

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

    • NodeAutoScalingGroupDesiredCapacity - 输入在上一步记录的所需实例计数。或者输入更新堆栈时要扩展到的所需节点数目。

    • NodeAutoScalingGroupMaxSize:输入您的节点 Auto Scaling 组可横向扩展到的最大节点数。此值必须比所需容量多至少一个节点。这样更新期间可以对节点进行滚动更新而不会减少节点数。

    • NodeInstanceType - 选择在上一步记录的实例类型。也可以为节点选择不同的实例类型。在选择其他实例类型之前,请查看 选择 Amazon EC2 实例类型。每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),每个 ENI 都支持最大数量的 IP 地址。由于为每个工作线程节点和 Pod(一组容器)分配了自己的 IP 地址,因此请务必选择一个实例类型,该实例类型可以支持您希望在每个工作线程节点上运行的最大数量的 Pod(一组容器)。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型的每个网络接口的 IP 地址数。例如,m5.large 实例类型最多支持工作线程节点和 Pod 的 30 个 IP 地址。

      注意

      最新版本适用于 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在 GitHub 上的 vpc_ip_resource_limit.go 中显示。您可能需要更新 CNI 版本以使用最新的受支持实例类型。有关更多信息,请参阅 更新 Amazon VPC CNI 自行管理附加组件

      重要

      并非所有实例类型在所有 Amazon Web Services 区域中都可用。

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

      /aws/service/eks/optimized-ami/1.21/amazon-linux-2/recommended/image_id

      可以将 1.21 替换为支持的 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 的值为空白。

    • DisableIMDSv1 - 每个节点默认支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2。但可以禁用 IMDSv1。如果不希望节点组中计划的任何节点或任何 Pod 使用 IMDSv1,请选择 true。有关 IMDS 的更多信息,请参阅配置实例元数据服务。如果已为服务账户实施 IAM 角色,请将所需权限直接分配给需要访问 Amazon 服务的所有 Pod(一组容器)。这样集群中没有任何 Pod(一组容器)需要出于其他原因(例如检索当前 Amazon Web Services 区域)访问 IMDS。然后,对于不使用主机网络的 Pod(一组容器),您还可以禁用 IMDSv2 的访问权限。有关更多信息,请参阅限制对分配给工作节点的实例配置文件的访问

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

  11. Review(审核)页面上审核您的信息,确认堆栈可创建 IAM 资源,然后选择 Update stack(更新堆栈)

    注意

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

  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 版本以使用最新的受支持实例类型。有关更多信息,请参阅 更新 Amazon VPC CNI 自行管理附加组件