AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何为我的 Amazon EKS 集群规划升级?
升级 Amazon Elastic Kubernetes Service (Amazon EKS) 集群时,我想要遵循最佳实践。
解决方法
了解升级的效果
新版本的 Kubernetes 对 Amazon EKS 集群进行了大幅更改。集群升级后便无法再降级。
如果您升级到更高的 Kubernetes 版本,则无需执行就地集群升级。相反,您可以迁移到新集群。如果您迁移到新集群,则最佳做法是使用集群备份和恢复工具,例如 Velero。有关详细信息,请参阅 GitHub 网站上的 Velero。
有关 Kubernetes 的当前和早期版本,请参阅 Amazon EKS Kubernetes 发布日历。
满足升级要求
要升级集群,必须满足以下要求:
- 您必须拥有创建集群时指定的子网的五个可用 IP 地址。
- 您的 AWS 账户中必须存在集群的 AWS Identity and Access Management (IAM) 角色和安全组。
- 如果激活密钥加密,则集群 IAM 角色必须具备 AWS Key Management Service (AWS KMS) 密钥权限。
查看 Amazon EKS 和 Kubernetes 的重大更新
执行以下操作:
- 查看升级版所有已记录的更改,然后记下必需的升级步骤。
- 请注意 Amazon EKS 托管集群的所有特定要求或程序。
有关 Amazon EKS 集群平台版本和 Kubernetes 版本的重大更新的信息,请参阅以下文档:
有关 Kubernetes 上游版本和重大更新的信息,请参阅以下文档:
- Kubernetes 网站上的 Kubernetes release notes(Kubernetes 发行说明)
- GitHub 网站上的 Kubernetes changelog(Kubernetes 变更日志)
了解并检查已停用的 API
当 Kubernetes 升级 API 时,Kubernetes 也会移除之前的 API。
要管理已停用的 API,请执行以下操作:
- 要了解 Kubernetes 如何在更高版本的 Kubernetes 中停用 API,请参阅 Kubernetes 网站上的 Kubernetes 弃用策略。
- 要检查集群中是否存在已停用的 API 版本,请使用 Kube No Trouble (kubent) 工具。有关详细信息,请参阅 GitHub 网站上的 kube-no-trouble。如使用的是已停用的 API 版本,请先升级工作负载,然后再升级 Kubernetes 集群。
- 要在不同的 API 版本之间转换 Kubernetes 清单文件,请使用 kubectl convert 插件。有关详细信息,请参阅 Kubernetes 网站上的安装 kubectl convert 插件。
了解 Kubernetes 的升级过程是怎样的
如果您升级集群,Amazon EKS 会使用升级后的 Kubernetes 版本启动新的 API 服务器节点来替换现有节点。Amazon EKS 还进行了一系列内部检查。如果检查失败,则 Amazon EKS 会回滚基础设施部署,集群将保留在先前的 Kubernetes 版本上。回滚不会影响正在运行的应用程序,您可以恢复集群。
**注意:**升级过程中,可能会遇到轻微的服务中断。
升级控制面板和数据面板
要升级集群,必须更新控制面板和数据面板。
要更新这些面板,请选择以下方法之一:
- 就地集群升级
- 蓝/绿或金丝雀升级
- 托管节点组升级
就地集群升级
**重要事项:**就地升级时,只能升级到下一个最高的 Kubernetes 次要版本。如果您当前的集群版本和目标版本之间有多个版本,则必须依次升级到每个版本。
每次就地升级 Kubernetes 集群时,请完成以下步骤:
- 更新您的 Kubernetes 清单和已停用的 API。
- 升级集群控制面板。
- 升级集群中的节点。
- 更新您的 Kubernetes 插件和自定义控制器。
有关详细信息,请参阅 Planning Kubernetes upgrades with Amazon EKS(使用 Amazon EKS 规划 Kubernetes 升级)中的 Planning and executing Kubernetes version upgrades in Amazon EKS(在 Amazon EKS 中规划和执行 Kubernetes 版本升级)。另请参阅集群升级的最佳实践。
蓝/绿或金丝雀升级
要完成蓝/绿或金丝雀升级,请参阅 Blue/green or canary Amazon EKS clusters migration for stateless ArgoCD workloads(无状态 ArgoCD 工作负载的蓝/绿或金丝雀 Amazon EKS 集群迁移)。
托管节点组升级
**重要事项:**节点的 Kubelet 不能比 kube-apiserver 更新。另外,kubelet 也不能比 kube-apiserver 低两个以上的次要版本。例如,如果 kube-apiserver 的版本为 1.24,则 Amazon EKS 仅支持 1.24、1.23 和 1.22 版本的 kubelet。
要升级托管节点组,请更新托管节点组中的节点。
迁移到 Amazon EKS 托管节点组
如果使用的是自主管理型节点组,则可以在不停机的情况下将工作负载迁移到 Amazon EKS 托管节点组。
识别和升级下游依赖项
集群可以包含第三方插件和工具,例如入口控制器、持续交付系统、监控工具和其他工作流。如果您更新集群,还必须更新插件和第三方工具。请务必了解插件与集群的配合使用方式以及更新方式。
**注意:**最佳做法是使用托管插件而不是自主管理型插件。
请参阅以下常见插件及其相关升级文档示例:
- 确定用于每个集群版本的 Amazon 虚拟私有云容器网络接口 (Amazon VPC CNI) 插件。有关详细信息,请参阅使用 Amazon VPC CNI 为容器组分配 IP 地址。另请参阅配置 Amazon VPC CNI 插件以将 IAM 角色用于服务账户 (IRSA)。
- 对于自行管理的 kube-proxy 插件,请更新到每个集群版本的最新可用的 kube-proxy 容器映像版本。有关详细信息,请参阅在 Amazon EKS 集群中管理 kube-proxy。
- 对于 CoreDNS,请将各集群版本的 CoreDNS 容器映像更新到最新可用版本。有关详细信息,请参阅在 Amazon EKS 集群中管理 CoreDNS for DNS。
- AWS 负载均衡器控制器版本 2.5.0 或更高版本需要 Kubernetes 版本 1.22 或更高版本。有关详细信息,请参阅 GitHub 网站上的 AWS Load Balancer Controller releases(AWS 负载均衡器控制器版本)。有关安装信息,请参阅使用 AWS 负载均衡器控制器路由互联网流量。
- Amazon Elastic Block Store (Amazon EBS) CSI 驱动程序版本 1.25.0 或更高版本需要 Kubernetes 版本 1.23 或更高版本。有关详细信息,请参阅 GitHub 网站上的 aws-ebs-csi-driver。有关安装和升级信息,请参阅步骤 2: 获取 Amazon EBS CSI 驱动程序。
- Amazon Elastic File System (Amazon EFS) CSI 驱动程序版本 1.5.8 或更高版本需要 Kubernetes 版本 1.22 或更高版本。有关详细信息,请参阅 GitHub 网站上的 aws-efs-csi-driver。有关安装和升级信息,请参阅将弹性文件系统存储与 Amazon EFS 结合使用。
升级 Fargate 节点
要更新 AWS Fargate 节点,请完成以下步骤:
- 删除您的节点代表的容器组。
- 更新您的控制面板。
- 重新部署容器组。
在 Fargate 上启动的新容器组现在都有与集群版本匹配的 kubelet 版本。升级不会影响现有的 Fargate 容器组。
**注意:**Amazon EKS 必须定期修补 Fargate 容器组以保持容器组的安全。在更新容器组时,Amazon EKS 会最大限度地减少补丁的影响。如果 Amazon EKS 无法移除容器组,则 Amazon EKS 会删除容器组。为了最大限度地减少中断,请参阅为 AWS Fargate 操作系统补丁事件设置操作。
升级 Karpenter 创建的非托管节点
您为 ttlSecondsUntilExpired 设置的值将激活节点过期。在节点达到规定的寿命(以秒为单位)后,Amazon EKS 会将其删除。即使 Amazon EKS 工作负载或应用程序使用节点,也会发生删除操作。使用 ttlSecondsUntilExpired 将节点替换为新配置的实例,以便您可以升级实例。Karpenter 将最新的 Amazon EKS 优化的亚马逊机器映像 (AMI) 用于替换的节点。有关 Karpenter 如何中断节点的详细信息,请参阅 Karpenter 网站上的 Disruption(中断)。
以下示例显示了一个已取消预置 ttlSecondsUntilExpired 的节点,然后替换为升级后的实例:
apiVersion: karpenter.sh/v1alpha5kind: Provisioner metadata: name: default spec: requirements: - key: karpenter.sh/capacity-type # optional, set to on-demand by default, spot if both are listed operator: In values: ["spot"] limits: resources: cpu: 1000 # optional, recommended to limit total provisioned CPUs memory: 1000Gi ttlSecondsAfterEmpty: 30 # optional, but never scales down if not set ttlSecondsUntilExpired: 2592000 # optional, nodes are recycled after 30 days but never expires if not set provider: subnetSelector: karpenter.sh/discovery/CLUSTER_NAME: '*' securityGroupSelector: kubernetes.io/cluster/CLUSTER_NAME: '*'
**注意:**Karpenter 不会自动向 ttlSecondsUntilExpired 值添加抖动。如果您在短时间内创建多个实例,则这些实例会同时过期。为防止工作负载过度中断,请设置容器组中断预算。有关详细信息,请参阅 Kubernetes 网站上的为应用程序指定中断预算。
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 3 年前