使用GitLab CI与Terraform更新AWS EKS集群时版本回退报错的问题咨询
GitLab CI与Terraform更新AWS EKS集群时版本回退报错的问题咨询
看起来你遇到了AWS EKS版本回退的硬性限制问题,我来帮你拆解原因和可行的解决办法:
首先明确报错的核心原因:AWS EKS官方不支持直接将Kubernetes小版本从高往低回退(比如你这里的1.19→1.18)。EKS的版本更新规则只允许小版本逐步升级(比如1.18→1.19→1.20),或者跨大版本升级,但反向的小版本降级操作会直接被API拒绝,这就是你看到InvalidParameterException错误的根源。
接下来给你几个针对性的解决方向:
1. 先确认是否真的需要回退版本
先梳理下为什么要从1.19降到1.18?是不是某个应用或组件和1.19版本不兼容?如果是这种情况,优先建议尝试调整应用适配1.19版本——比如检查应用的Kubernetes API兼容性,更新依赖的镜像或配置,这样可以避免复杂的集群回退操作。
2. 如果必须回退,可行的两种方案
方案一:备份重建集群(通用稳定方案)
这是最可靠的降级方式,步骤大概是:
- 备份集群资源:用
kubectl get all --all-namespaces -o yaml > cluster-resources.yaml导出所有部署、服务、配置等无状态资源;如果有状态应用,用AWS Backup备份对应的EBS卷,或者用工具迁移数据。 - 用Terraform创建新的1.18版本EKS集群:确保VPC、子网、IAM角色、安全组等配置和原集群完全一致。
- 恢复资源到新集群:用
kubectl apply -f cluster-resources.yaml导入备份的资源,迁移状态应用的数据,然后切换流量到新集群。 - 验证无误后,删除旧的1.19版本集群。
方案二:利用EKS短时间回退窗口(仅适用于刚升级的场景)
如果你的集群是最近7天内刚升级到1.19的,AWS EKS提供了一个临时回退窗口,可以尝试通过CLI或控制台触发回退:
- CLI命令示例:
注意这个方法不是100%保证成功,如果升级后已经做了很多集群变更,可能无法回退。aws eks update-cluster-version --name business-staging --kubernetes-version 1.18 --client-request-token "unique-token-123"
3. 后续预防措施
- 在Terraform代码里,不要随意将EKS版本从高改回低,建议设置明确的升级路径,比如每次只升一个小版本。
- 在GitLab CI流水线中,添加版本校验步骤:比如在执行
terraform apply前,检查当前代码中的EKS版本是否高于集群现有版本,如果是降级操作就直接终止流水线,避免报错。
你遇到的具体报错信息如下:
│ Error: error updating EKS Cluster (business-staging) version: InvalidParameterException: Unsupported Kubernetes minor version update from 1.19 to 1.18 │ │ { │ RespMetadata: { │ StatusCode: 400, │ RequestID: "d3203e19-5691-48eb-9442-05435331c8a4" │ }, │ ClusterName: "business-staging", │ Message_: "Unsupported Kubernetes minor version update from 1.19 to 1.18" │ } │ │ with module.eks.aws_eks_cluster.this[0], │ on .terraform/modules/eks/ekcluster.tf line 11, in resource "aws_eks_cluster" "this": │ 11: resource "aws_eks_cluster" "this" {
备注:内容来源于stack exchange,提问作者sam23
相关产品推荐
相关产品推荐

