Kubernetes 集群迁移:从自建到托管平台的平滑切换
Kubernetes 集群迁移从自建到托管平台的平滑切换基础设施不需要漂亮话。2024 年上半年我负责了一个 K8s 集群迁移项目从自建 K8s 集群基于 kubeadm 部署迁移到托管 K8s 平台阿里云 ACK。集群规模 80 个节点运行着 400 个 Pod涉及 50 个业务线。迁移过程持续了 3 个月期间做到业务无感知切换。这篇文章记录的是技术方案和踩坑过程。一、为什么要迁移自建集群的运维成本自建 K8s 集群跑了两年初期成本低但规模上来后运维成本指数级上升。成本 1控制平面维护我们有 3 个 master 节点etcd 集群独立部署。平均每个月有 1 次 etcd 性能问题大集群场景下 etcd 的读写延迟会升高需要人工介入优化。etcd 监控关键指标# 我们配置的 etcd 告警规则 groups: - name: etcd rules: - alert: EtcdHighCommitDurations expr: histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[10m])) 0.1 annotations: summary: etcd fsync 延迟过高可能影响集群稳定性成本 2版本升级风险从 K8s 1.20 升级到 1.24我们花了 2 个月准备。要审计所有已部署的 CRD 是否兼容新版本要测试 kubelet 升级后对业务 Pod 的影响还要考虑 CNI 和 CSI 插件的兼容性。最终升级当天还是出了事故Calico 的旧版本不支持 1.24 的新 API导致部分节点的 Pod 网络中断。成本 3灾备方案复杂自建集群的灾备需要自己设计。我们做了 etcd 定期备份 控制平面多可用区部署但应用数据的备份恢复方案一直不完善。2023 年有一次误删 namespace 操作恢复花了 6 小时。综合评估后技术委员会决定迁移到托管平台。核心考量是把控制平面的运维成本转嫁给云厂商团队聚焦在应用层优化。二、迁移方案双活架构平滑切换迁移的核心挑战是如何在不影响业务的情况下把 400 个 Pod 从旧集群迁移到新集群。我们设计的方案是双活架构 渐进式切换阶段 1新集群搭建 基础服务部署2 周先在 ACK 上搭建新集群网络方案选了 Terway阿里云自研的 CNI 插件和 VPC 集成更好。踩坑记录新建集群的 Pod CIDR 和旧集群不一样导致一部分写死 IP 的配置失效。之后我们规范了所有配置必须通过环境变量或 ConfigMap 注入不允许写死 IP。阶段 2双集群同步 灰度流量4 周这是最关键的阶段。我们在两个集群同时部署应用但通过 Ingress 控制流量分配。具体做法新集群部署和业务对等的应用实例配置中心同步配置用自定义同步脚本存储层做双向同步RDS 用 DTSRedis 用双写Ingress 层按百分比分流刚开始 5%无问题后逐步提升到 50%// 流量分配的逻辑简化版 func ShouldRouteToNewCluster(req *http.Request) bool { userID : extractUserID(req) // 按 userID 做一致性哈希保证同一用户始终路由到同一集群 hash : fnv32(userID) % 100 return hash currentPercentage // currentPercentage 从配置中心读取 }阶段 3全量切换 旧集群下线2 周灰度验证通过后把流量 100% 切到新集群旧集群保留 1 周作为应急回滚备份然后下线。三、关键技术点配置同步和存储双写技术点 1配置中心双写我们的配置中心用的是 Apollo旧集群和新集群各有一套 Apollo 实例。需要保证配置变更能实时同步。方案用 Apollo 的开放 API 写了一个同步工具监听旧集群的配置变更事件自动同步到新集群。type ConfigSyncer struct { sourceClient *apollo.Client targetClient *apollo.Client } func (s *ConfigSyncer) Sync() error { // 监听配置变更 events : s.sourceClient.Subscribe() for event : range events { // 过滤掉系统配置只同步业务配置 if strings.HasPrefix(event.Namespace, business.) { err : s.targetClient.Publish(apollo.Release{ Namespace: event.Namespace, Config: event.Config, }) if err ! nil { log.Errorf(同步配置失败: %v, err) // 写入重试队列 s.retryQueue.Push(event) } } } return nil }踩坑第一次同步时把 Apollo 的集群配置也同步过去了导致新集群的应用连到了旧集群的中间件。之后加了命名空间白名单只允许同步业务配置。技术点 2存储双写这是最复杂的部分。我们的存储层有 MySQL、Redis、MongoDB每种都有不同的双写方案。MySQL 双写用阿里云 DTS数据传输服务做单向同步旧集群的数据库 → 新集群的数据库。应用层不需要改代码。但有一个问题DTS 的同步延迟在秒级如果切流量时有未完成的事务可能导致数据不一致。解决方案流量切换前暂停所有写操作 30 秒等 DTS 同步延迟降到 0 后再切换。Redis 双写Redis 没有像 DTS 这样的托管同步工具我们在应用层做了双写type DualWriteRedis struct { oldClient *redis.Client newClient *redis.Client mode SyncMode // 渐进式先读旧写双再读新写新 } func (d *DualWriteRedis) Set(key string, value interface{}) error { // 写旧集群 err : d.oldClient.Set(ctx, key, value, 0).Err() if err ! nil { return err } // 写新集群异步不阻塞主流程 go func() { d.newClient.Set(ctx, key, value, 0) }() return nil }这个方案在切流量前跑了 2 周验证了新集群 Redis 的可用性和性能。四、风险控制三次演练 应急预案迁移这类操作光有方案不够必须演练。我们做了三次全流程演练每次都在测试环境完整跑一遍迁移流程。第三次演练发现了致命问题新集群的 Ingress 配置和旧集群有细微差异导致部分带路径重写的路由规则失效。修复后第四次演练通过才在线上执行。应急预案关键点5 分钟内能回滚保留旧集群 1 周Ingress 配置不删随时可以切回。数据不丢所有数据库在切换前做全量备份。监控全覆盖新旧集群同时接入监控切换过程中实时对比错误率、延迟、吞吐量。五、迁移效果运维成本降低 60%迁移完成 3 个月后我们统计了关键指标运维成本控制平面运维时间从每月 20 人时降到 2 人时K8s 版本升级频率从每年 1 次不敢升到每季度 1 次托管平台自动升级故障恢复时间从平均 2 小时降到 30 分钟托管平台有自动恢复能力性能对比Pod 启动时间从平均 15 秒降到 8 秒ACK 的调度性能更好网络延迟VPC 网络比自建机房的延迟低 20%etcd 性能不再需要关注托管平台负责成本变化计算资源成本上升 15%托管平台收费人力成本下降 60%综合成本下降 30%如果重来一次我会更早做迁移决策。自建集群在小规模时成本低但规模上来后托管平台的经济优势和技术优势都会显现。基础设施不需要漂亮话。选择适合自己团队规模和技术能力的方案比追逐新技术更重要。

相关新闻

Mathematics | Branch

Mathematics | Branch

注:本文为“遇见数学”翻译的 “数学分支概览” 两篇文章合辑。 数学世界的版图:主要分支概览(上) 原创 遇见数学 2025 年 04 月 03 日 12:02 河南 数学的分支(Areas of Mathematics) 在文艺复兴之前&am…

2026/7/27 20:49:33阅读更多 →
手把手教你学 Simulink—— A* 算法与 RRT 的混合路径搜索对比仿真

手把手教你学 Simulink—— A* 算法与 RRT 的混合路径搜索对比仿真

目录 手把手教你学 Simulink —— A* 算法与 RRT 的混合路径搜索对比仿真 一、A* 与 RRT 到底差在哪? 1.1 核心对比表 二、仿真总体架构(统一对比框架) 三、关键参数(公平对比默认) 四、Simulink 建模 Step‑by‑Step Step ① —— 统一地图表示 Step ② —— A*…

2026/7/26 18:43:22阅读更多 →
告别复杂UI开发:用Vizia构建响应式Rust桌面应用的全新范式

告别复杂UI开发:用Vizia构建响应式Rust桌面应用的全新范式

告别复杂UI开发:用Vizia构建响应式Rust桌面应用的全新范式 【免费下载链接】vizia A declarative GUI library written in Rust 项目地址: https://gitcode.com/gh_mirrors/vi/vizia 还在为Rust桌面应用开发中的状态管理与UI同步而烦恼吗?&#x…

2026/7/27 20:39:35阅读更多 →
为什么你需要PvZ Toolkit:植物大战僵尸玩家的终极解放指南

为什么你需要PvZ Toolkit:植物大战僵尸玩家的终极解放指南

为什么你需要PvZ Toolkit:植物大战僵尸玩家的终极解放指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中重复刷阳光而烦恼吗?还在为无尽模式卡关而头…

2026/7/27 22:27:41阅读更多 →
企业合同管理从人治走向数治:三个关键转变与落地路径

企业合同管理从人治走向数治:三个关键转变与落地路径

合同管理是企业经营管理中最基础也最容易被低估的环节。 大多数企业对合同管理的认知停留在"签好合同、管好合同、合同别出事"的层面,将其视为一项行政性、事务性的工作。然而,当企业的合同数量从每年数百份增长到数千份甚至数万份时&#xff…

2026/7/27 22:27:41阅读更多 →
工业智能诊断工具在油气田数字化中的应用

工业智能诊断工具在油气田数字化中的应用

1. 工业智能诊断工具全景指南 在油气田数字化改造的浪潮中,我亲历了从传统人工巡检到智能诊断的转型过程。最初面对海量设备振动数据时,团队花了三个月时间重复造轮子,直到发现GitHub上早已存在成熟的工业级解决方案。本文将分享我在智慧油田…

2026/7/27 22:27:40阅读更多 →
华为OD C卷真题解析:动态规划解决跳格子三问题

华为OD C卷真题解析:动态规划解决跳格子三问题

1. 项目概述与核心价值 最近在技术社区和求职圈里,“华为OD”和“C卷真题”这两个词的热度一直居高不下。作为曾经参与过类似机考并带过不少新人的老码农,我深知这类题目对于考察候选人的算法思维、编码熟练度以及临场应变能力有多关键。今天要拆解的这道…

2026/7/27 22:27:40阅读更多 →
终极指南:用JoyCon-Driver将任天堂Switch手柄变成专业PC控制器

终极指南:用JoyCon-Driver将任天堂Switch手柄变成专业PC控制器

终极指南:用JoyCon-Driver将任天堂Switch手柄变成专业PC控制器 【免费下载链接】JoyCon-Driver A vJoy feeder for the Nintendo Switch JoyCons and Pro Controller 项目地址: https://gitcode.com/gh_mirrors/jo/JoyCon-Driver 还在为Switch手柄在PC上无法…

2026/7/27 22:27:40阅读更多 →
Windows 10/11经典游戏兼容性终极指南:让老游戏焕发新生的dxwrapper全解析

Windows 10/11经典游戏兼容性终极指南:让老游戏焕发新生的dxwrapper全解析

Windows 10/11经典游戏兼容性终极指南:让老游戏焕发新生的dxwrapper全解析 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with the file ext…

2026/7/27 22:25:40阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →