如何回滚kops中尚未应用的待生效集群配置变更?
问题场景
此前执行的操作序列如下:
$ kops edit ig nodes ## 通过修改min/max nodes参数新增部分节点 $ ... ## 完成了其他若干配置修改 $ kops update cluster ## 预览待应用到集群的所有变更
执行kops update cluster预览变更时,发现存在不符合预期的变更项,需要将所有待生效变更全部回滚后重新配置。kops的待生效变更存储在S3对应的状态文件中,无法直接便捷完成回滚操作。
已知提前开启S3版本控制可快速回滚变更,但当前环境未开启该功能,需要其他可行方案取消待生效变更。此前已尝试搜索“kops drop pending changes”等相关关键词、查阅kops官方手册、切换多账号访问kops(后续确认变更通过S3存储共享),均未找到有效解决方案。
可行解决方案
不需要手动逐个修改配置项回滚,可通过集群当前已生效配置反向覆盖状态存储的方式,批量清除所有未应用的待生效变更,操作步骤如下:
- 导出当前集群实际运行的已生效全局配置到本地:
kops get cluster <你的集群名称> -o yaml > cluster-running.yaml
- 导出所有实例组当前实际运行的已生效配置到本地:
kops get ig -o yaml > ig-running.yaml
- 用导出的已生效配置直接替换S3状态存储中的待变更配置:
kops replace -f cluster-running.yaml kops replace -f ig-running.yaml
- 执行预览命令校验结果,确认无异常待变更项即可:
kops update cluster
- 操作逻辑说明:所有未加
--yes参数执行的kops update cluster变更,仅会保存在S3的kops状态存储中,不会实际修改云侧集群资源,因此用集群侧已经在运行的正式配置反向覆盖状态存储,就能一次性清空所有待生效的修改,无需逐个手动改回参数。 - 操作前置要求:确认预览变更后从未执行过带
--yes参数的更新命令,也没有触发过自动滚动更新,否则集群侧运行配置已经被修改,该方法无法回滚到预期状态。 - 效率提示:如果仅修改过实例组配置、没有调整集群全局参数,可以跳过集群配置的导出、替换步骤,仅处理实例组配置即可。
- 长期优化建议:后续给kops使用的S3状态存储桶开启版本控制,出现配置误改时可直接回滚到对应历史版本,操作成本更低。
补充说明
执行kops update cluster默认仅预览待应用变更,输出会明确标记所有待修改资源、配置项的前后取值,例:
... Will modify resources: *awstasks.LaunchTemplate LaunchTemplate/mycluster.mydomain.com InstanceType t2.medium -> t2.large
只有执行kops update cluster --yes时,才会正式将变更应用到集群对应的云资源上。
内容的提问来源于stack exchange,提问作者Serge Vin
相关产品推荐
相关产品推荐

