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

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

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

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

重要

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

最新的默认 Amazon EKS 节点 AWS 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,请将部署缩减至零个副本以避免冲突的扩展操作。

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

    1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

    2. 在左侧导航窗格中选择 Launch Configurations (启动配置),然后记下现有节点启动配置的实例类型。

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

  5. https://console.amazonaws.cn/cloudformation 打开 AWS CloudFormation 控制台。

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

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

  8. 对于 Amazon S3 URL,将与集群所在的区域对应的 URL 粘贴到文本区域中,以确保您使用的是节点 AWS CloudFormation 模板的最新版本,然后选择 Next (下一步)

    • 和 中国(北京) 之外的所有区域中国 (宁夏)

      https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
    • 中国(北京) 和 中国 (宁夏)

      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 组可扩展到的最大节点数。此值必须至少大于所需容量的一个节点,以便您可以在更新期间对节点执行滚动更新,而不会减少节点数。

    • NodeInstanceType – 选择您在上一步中记录的实例类型,或者为节点选择其他实例类型。每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),而每个 ENI 支持最大数量的 IP 地址。由于每个工作线程节点和 Pod 都分配有自己的 IP 地址,因此必须选择一种实例类型,以支持您希望在每个工作线程节点上运行的最大数量的 Pod。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型、每个网络接口的 IP 地址。例如,对于工作线程节点和 Pod,m5.large 实例类型最多支持 30 个 IP 地址。某些实例类型可能并非在所有区域都可用。

      注意

      最新版本的 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在此处.显示。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅 Amazon VPC适用于 Kubernetes 的 CNI 插件升级.

      重要

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

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

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

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

      注意

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

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

      重要

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

    • DisableIMDSv1 每个节点都默认支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2,但您可以禁用 IMDSv1。–如果您不希望节点组中的任何节点或节点组中的节点上计划的任何 Pod 使用 IMDSv1,请选择 true。有关 IMDS 的更多信息,请参阅配置实例元数据服务。如果您已为服务账户实施 IAM 角色,已直接向需要访问 AWS 服务的所有 Pod 分配必要的权限,并且集群中的任何 Pod 出于其他原因(如检索当前区域)需要访问 IMDS,则您还可以为不使用主机联网的 Pod 禁用对 IMDSv2 的访问。有关更多信息,请参阅 限制对 IMDS 和 Amazon EC2 实例配置文件凭证的访问.

  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适用于 Kubernetes 的 CNI 插件升级.