开发者工具

Amazon EKS 新增 Kubernetes 版本回滚:7 天窗口与 Auto Mode 注意事项

Amazon EKS 现在支持 Kubernetes 版本回滚:集群升级后,如果在七天内发现兼容性或依赖问题,可以将控制面退回升级前的 Kubernetes 次要版本,不需要重建集群。

这项功能解决的是 Kubernetes 控制面升级长期存在的“单向门”问题。原生 Kubernetes 并没有通用的控制面版本回滚机制,因此许多团队只能依靠长时间观察期、分批升级和人工审批来降低风险。EKS 的版本回滚为升级增加了一条明确的恢复路径,尤其适合管理大量集群或对变更恢复有严格要求的团队。

不过,它不是 Kubernetes 通用能力,也不是整个集群的备份恢复机制。最重要的区别是:所有 EKS 集群都支持控制面回滚,但节点回滚的明确支持范围是 EKS Auto Mode。

这项功能具体能回滚什么

项目 说明
回滚对象 所有 EKS 集群的 Kubernetes 控制面;EKS Auto Mode 还支持托管节点回滚。
版本跨度 一次只能回滚一个 Kubernetes 次要版本,例如从 1.35 回到 1.34,不能任意跨版本跳转。
发起窗口 升级完成后的七天内。
版本范围 集群运行的 Kubernetes 版本需要处于 EKS 标准支持或延长支持范围内。
区域与费用 AWS 称该功能已在提供 EKS 的全部商业 AWS 区域推出,不收取额外回滚费用,但标准 EKS 和计算资源费用仍会照常产生。

回滚的目标是此前在集群中运行过的版本,而不是某种临时模拟版本。也就是说,从 Kubernetes 1.34 升级到 1.35 后,如果发现问题,可以在窗口期内返回 1.34。AWS 将这种方式定位为对现有升级流程的“撤销”能力,而不是通过重新创建集群来恢复。

Upgrade Amazon EKS clusters with confidence using Kubernetes version rollbacks | Amazon Web Services
图片来源:原文

回滚前,先检查节点和附加组件依赖

EKS 会通过 Cluster Insights 评估集群是否具备回滚条件,并提示可能影响操作的问题。公告提到的检查项目包括节点版本兼容性和 EKS 附加组件依赖关系。

建议先处理这些提示,再决定是否继续。EKS 也提供了 --force 参数,用于在管理员已经完成风险评估、希望跳过检查时继续操作。但跳过检查只会绕过就绪性评估,并不会自动解决节点或附加组件的兼容性问题。

这里还需要区分控制面和节点。AWS 公告明确说明,控制面回滚适用于所有 EKS 集群,而节点回滚适用于 EKS Auto Mode。因此,对于普通托管节点组或自管理节点,不应默认认为控制面回滚会同步完成节点降级;节点版本、附加组件以及相关依赖需要按照实际架构单独核对。

EKS Auto Mode 的回滚为什么更复杂

EKS Auto Mode 同时管理计算、网络和存储基础设施。对这类集群来说,版本回滚不仅涉及控制面,也涉及托管节点,二者需要配合处理。

节点回滚会遵守工作负载设置的 PodDisruptionBudget(PDB)。PDB 用于限制同一时间可以被驱逐或中断的 Pod 数量,因此节点上的工作负载越难迁移,回滚过程可能持续越久。默认情况下,EKS 不会为了加快回滚而绕过 PDB。

如果节点回滚耗时过长,EKS 提供了取消接口,可以中止正在进行的节点回滚。管理员随后可以调整中断预算、重新安排操作,或选择其他处理路径。修改或移除 PDB 可能加快节点迁移,但也会降低工作负载的可用性保护,应在了解业务影响后进行。

通过控制台发起回滚的基本流程

  1. 选择集群:在 Amazon EKS 控制台打开近期完成 Kubernetes 版本升级的集群,并确认仍处于七天回滚窗口内。
  2. 查看回滚入口:进入集群配置页面,检查当前版本、可回滚的此前版本以及剩余回滚时间。
  3. 检查 Cluster Insights:阅读节点版本兼容性、附加组件依赖等提示,优先处理可能阻止回滚的问题。
  4. 确认并发起:在确认目标版本和风险后启动回滚。若使用支持的 API 或命令行调用方式,具体参数、权限要求和命令格式应以 EKS 正式文档为准。
  5. 观察回滚过程:持续关注控制面状态、节点状态、Pod 驱逐情况以及关键业务指标。对于 Auto Mode,还要观察 PDB 是否导致节点回滚停滞。

AWS 公告中的一个示例显示,控制面回滚耗时约 20 分钟,接近一次常规升级。但这只是公告示例,不能作为所有生产集群的时长承诺;Auto Mode 节点回滚还会受到 PDB 和工作负载配置影响。

回滚完成后仍需验证哪些内容

版本回滚主要改变 Kubernetes 控制面的版本,不应被当作应用发布撤销或数据恢复机制。它不会替代对 Kubernetes 资源、应用配置和持久化数据进行独立备份,也不会自动撤销升级期间发生的业务变更。

回滚完成后,至少应确认以下内容:

  • 控制面是否已经恢复到目标 Kubernetes 次要版本;
  • 节点是否处于预期版本并保持 Ready 状态;
  • EKS 附加组件及其依赖是否与回滚后的控制面兼容;
  • 关键工作负载、服务发现、网络和存储功能是否正常;
  • 准入控制、控制器和其他依赖 Kubernetes API 的组件是否能够继续工作。

对于非 Auto Mode 集群,尤其要单独检查普通托管节点组、自管理节点和附加组件的版本关系。对于 Auto Mode 集群,如果节点回滚因 PDB 长时间无法推进,可以使用取消接口停止操作,再根据业务可用性要求调整中断预算后重新安排。

适合把它当成什么,不适合把它当成什么

这项功能适合作为 Kubernetes 控制面升级的短期安全网:在升级后的观察窗口内发现问题时,可以返回此前运行过的版本,避免立即重建集群或在故障状态下仓促排查。

但它不能替代升级前的兼容性评估、分阶段发布和业务验证。准备使用时,应提前确认目标版本仍在 EKS 支持范围内,了解节点与附加组件的处理方式,并在非生产环境验证工作负载在回滚过程中的行为。AWS 公告未在材料中列出具体 API、命令行语法和权限要求,正式实施前还需要查阅对应的 EKS 文档。


原始来源: https://aws.amazon.com/blogs/aws/upgrade-amazon-eks-clusters-with-confidence-using-kubernetes-version-rollbacks/