资讯动态

基于RKE的Rancher跨机房迁移实践:etcd备份、恢复与验证要点

发布时间:2026/10/21 5:03:21 来源:尧图企业网站定制
前阵子我刚完成一个内网生产环境的关键任务把一套基于RKE部署的Rancher管理平台从一个机房整体迁移到另一个机房。这套Rancher平台是当时整个运维体系的中枢上面挂了二十多套业务集群所有认证、授权、命名空间划分和审计都靠它撑住。运维同事一听要动Rancher第一反应就是“能不能只加节点不迁移”但机房层面的搬迁没法讨价还价。这类迁移表面上看是几条命令的事实际拆开之后涉及etcd快照、证书恢复、DNS切换、节点重新注册、版本兼容性排查等好几层。任何一个环节出问题轻则UI登录不上去重则下游集群全部显示不可用业务侧马上就会炸锅。这篇文章把这次迁移中实际用到的备份、恢复、验证方案完整梳理一遍同时把踩过的坑和排查思路写出来。无论你是要整体搬迁Rancher管理平台还是只想从单节点改成高可用架构或者准备给现有RKE集群做一次灾备恢复演练下面的步骤和检查清单都能直接参考。1. 迁移前必须搞清楚的三个问题1.1 先盘清现有Rancher平台的部署形态很多人第一反应是“Rancher不是装个容器就完事了吗”。如果只是开发环境这样用当然没问题但生产环境里的Rancher管理平台尤其是基于RKE部署的本身就是一个完整的Kubernetes集群。Rancher以工作负载的形式跑在这个Kubernetes集群里它的用户、全局设置、集群配置、项目角色绑定全部以CRD和业务数据的方式存在etcd里。迁移前一定要先把这个形态盘清楚。我这次遇到的环境是RKE1部署的三节点高可用集群三个节点同时承担etcd和controlplane角色Rancher版本是2.6.x数据全部存在RKE集群内置的etcd里没有使用外部数据库。这个信息直接决定了后面所有操作路径。需要确认的还有几件事RKE版本是1.x还是2.xRancher具体是哪个小版本kubelet和docker的版本是否配套以及Rancher是通过Helm chart安装还是直接用容器启动。这些信息看似琐碎但迁移过程中一旦出现版本不匹配恢复出来的Rancher可能无法正常调度排查起来非常痛苦所以建议先全部记到一张表里再动手。1.2 明确迁移的边界要迁什么、不迁什么另一个容易出错的地方是迁移边界没划清楚。我们这次要迁的是Rancher管理平台本身而不是下游的业务集群。下游集群的节点、工作负载、存储全部不动它们只是依赖Rancher做统一管理和认证。只要Rancher平台在新环境恢复成功那些通过import方式接入的集群会自动重新建立联系。要迁的东西包括Rancher平台自身的数据、全局配置、本地用户、角色权限、证书签发记录、审计日志配置以及Rancher在部署时对集群做的各种初始化配置。不需要迁的东西则是下游集群里的业务Pod、ConfigMap、Secret等。这个边界一旦划错很容易出现“为了把Rancher迁过来顺便把所有集群也一起重建”的灾难性方案完全没必要。还有一点要提前跟业务方确认迁移期间Rancher管理面会短暂不可用但下游集群的业务流量不会中断。也就是说只要不是恰好在这几分钟里做发布、扩容或权限变更对业务几乎无感。这个时间窗口要提前沟通好最好选在业务低峰期操作。1.3 选对迁移路径备份恢复 vs 原地重建盘完现状后需要做一次路径决策。我看到不少人图省事在新环境直接装一个新Rancher然后把下游集群逐个重新导入。这种做法看起来简单实际上会把已有的用户体系、RBAC授权、项目划分、多云集群分组全部丢掉重建成本远高于想象。尤其是用户的权限绑定一个团队十个人二十个集群全部重配一遍至少大半天中间还容易漏配。相反从旧环境做完整备份再在新环境恢复虽然备份和恢复本身要花一些时间但很值。恢复出来的Rancher和旧环境几乎一致用户不需要重新创建集群标签、项目、角色、全局设置全部保留。我这次坚定选择了备份恢复路径后面所有步骤都围绕这条主线展开。如果只是想借迁移做一次“环境重整”比如想把混乱的全局设置顺便清理一遍可以考虑新装Rancher再导数据但对绝大多数生产环境来说完整备份恢复才是正确选择。2. 备份阶段把家底完整打包2.1 RKE集群的etcd快照备份备份是整个迁移里最重要的一步没有可靠备份就不要动迁移。Rancher平台的数据都在etcd里所以第一步就是对RKE集群的etcd做快照。如果还保留着RKE1的环境和cluster.yml配置文件可以直接用RKE自带的命令rke etcd snapshot-save --name pre-migration-snapshot --config cluster.yml执行时RKE会通过kubeconfig连接目标集群在所有etcd节点上各生成一份本地快照。快照默认保存在每个节点的/var/lib/rancher/rke/etcd-snapshots/目录下。生成后一定要把至少一份快照文件拉到迁移操作机上妥善保存别只留在节点本地否则节点下线就什么都没了。这里有个细节RKE1的etcd snapshot-save适合对整条链路做最终验证。迁移场景下我建议至少做两次快照。第一次在迁移前两三天做作为演练用第二次在正式迁移当天做完所有停止动作后再做确保数据最新。两次快照之间业务侧如果有集群注册等变化也会一起包含到后一次快照里避免数据回退。2.2 Rancher服务层数据与证书备份仅仅备份etcd还不够。Rancher平台还有证书、加密配置等状态数据。最稳妥的做法是直接用Rancher官方的Backup Operator。这个组件通过Helm安装到Rancher管理集群里可以配置定时备份任务生成一个tar包。包里包含三块关键内容Rancher的CRD资源、etcd快照、以及Rancher生成的证书。比如我这次配置了一个每天凌晨三点的备份任务输出文件会自动带上时间戳。安装方式大致是这样的用Helm把这个chart部署到cattle-system命名空间helm repo add rancher-chart https://charts.rancher.io helm repo update helm install rancher-backup rancher-chart/rancher-backup \ --namespace cattle-system \ --set s3.enabledfalse \ --set persistence.enabledtrue然后创建一个Backup自定义资源触发备份。实际执行中我更推荐先把它跑起来让它自动生成一个备份文件确认文件大小和时间戳正常再手动创建另一个备份用于迁移。因为仅靠一次手动备份万一文件在传输过程中损坏没有任何补救余地。证书方面如果是Backup Operator生成的tar包恢复时会自动处理证书不太需要手动关心。但如果你手上没有这套组件只能手动备份Rancher容器里的/etc/rancher/ssl/目录和management-state数据。手动备份的坑在于漏文件所以我强烈建议正式环境还是把Backup Operator部署好。2.3 DNS与负载均衡记录的盘点Rancher平台对外是通过一个固定域名访问的比如管理平台地址rancher.example.internal。迁移到新机房后这个域名对应的后端IP大概率要变。迁移前要把DNS解析记录、证书SAN、前端负载均衡监听规则全部记下来。我当时整理了一张表域名解析当前指向哪几个IP对应哪些节点负载均衡的443监听规则转发到哪个目标端口组TLS证书是Rancher自签还是Lets Encrypt还是企业内部CA签发。这些信息在切换阶段就是回滚的依据。特别提醒一下Rancher管理平台如果用的是Rancher自动生成的证书恢复后会以备份里的证书为准。如果迁移后域名的IP变了但证书SAN没变通常不影响访问如果域名本身也要换那证书也要重新签发。域名变更属于另一次的改造不建议和迁移混在一起做不然排查问题时分不清是迁移引入的故障还是域名切换导致的故障会非常痛苦。2.4 备份后的完整性校验备份文件不是生成出来就算完成必须校验。我当时对tar包算了SHA256并且记录到迁移文档里到了新环境解压前先重新算一次确认数值一致才动手。这一步看起来多余但能避免“备份文件拷了一半、恢复到最后一步才发现损坏”的尴尬。更好的做法是找一套临时测试环境把备份包先恢复一次。如果测试环境里能正常拉起Rancher并且登录UI、看到下游集群列表这个备份包就确认可用。很多人跳过了这一步迁移当天才发现备份文件不完整那就只能回头再进旧环境重新备份。而旧环境可能已经关闭或部分下线到时候进退两难。完整恢复演练也是我建议所有Rancher平台定期做的一件事不只是迁移才做。3. 目标环境搭建与数据恢复3.1 新集群节点规划与基础环境准备目标机房的新集群节点要提前准备好。高可用部署至少需要三台节点同时承担etcd和controlplane角色。不要只准备一台Rancher管理平台如果只有单节点etcd一挂整个平台就没了和迁移前的高可用级别不匹配回头还得二次改造。节点初始化时要把以下几项做好主机名和/etc/hosts解析、时区对齐、内核参数和/etc/sysctl.conf优化、Docker服务安装并设置开机自启。RKE1对主机名和Docker版本比较敏感建议提前查好对应版本的支持矩阵直接用兼容版本不要随手装个最新版Docker再回头踩版本坑。由于是跨机房迁移仓库拉取策略也要提前确认。如果新机房访问Docker Hub网络不稳定就把RKE集群要用的系统镜像预加载到节点上。否则rke up执行到一半因为拉镜像失败而中断整个集群状态会卡在中间态排查起来很费时间。我在这次迁移中提前在每台节点上把所需镜像全部导入后续执行很顺。3.2 用rke配置构建新集群节点准备好后用cluster.yml声明新集群的拓扑。三台节点的角色划分etcd和controlplane都选上worker节点如果需要也可以同时勾选但管理平台集群通常不大三台节点全角色就够用。cluster.yml大概长这样出于篇幅我只写关键片段nodes: - address: 10.10.1.11 hostname_override: rancher-node-01 user: root role: [controlplane, etcd] - address: 10.10.1.12 hostname_override: rancher-node-02 user: root role: [controlplane, etcd] - address: 10.10.1.13 hostname_override: rancher-node-03 user: root role: [controlplane, etcd] services: etcd: backup_config: interval_hours: 12 retention: 3 snapshot: true注意hostname_override最好显式设置避免新机房节点自动获取的主机名不一致导致集群内解析混乱。配置写好后执行rke up --config cluster.yml执行完成后会在当前目录生成kube_config_cluster.yml用它可以连接新集群。紧接着验证节点状态kubectl --kubeconfig kube_config_cluster.yml get nodes看到三台节点全部Ready集群拉起阶段才算成功。到这里新集群只是一个空的Kubernetes集群Rancher还没恢复。3.3 执行Rancher恢复流程Rancher恢复这一步是整个迁移操作的核心。如果前面用了Backup Operator生成的tar包恢复方式是把tar包放进一个临时目录然后通过Rancher提供的restore命令把它恢复出来。以我这次用的Rancher v2.6.x为例先把备份文件放到/backup目录下然后执行docker run --rm \ -v /backup:/backup \ --privileged \ --env BACKUP_FILENAMErancher-backup-20250101120000.tar.gz \ rancher/rancher:v2.6.11 restore /backuprestore命令会做几件事解压备份包把CRD和Rancher后端数据恢复到etcd把证书恢复到对应位置。命令执行完成之后再用docker run -d方式把Rancher容器拉起来或者通过原先部署时的启动脚本启动。老版本Rancher的恢复方式会略有不同有些版本需要先手动把证书文件放到固定目录再启动Rancher时附加--restore-from-backup启动参数。版本差异比较大操作前一定去对应版本的官方文档确认不要直接照抄别人命令。恢复后可以先看看容器日志等日志稳定输出Listening on类似字样再访问UI。不用急着改DNS先在新环境本机上通过hosts指过去看一眼界面是否正常。3.4 证书与Helm配置的还原细节证书还原是恢复流程里最容易出问题的点。Backup Operator生成的tar包里包含Rancher生成证书restore时会自动恢复。但如果你用的是手动备份那么证书目录被漏掉是常有的事恢复后访问页面时浏览器会报证书错误甚至Rancher启动过程中因为校验不通过反复重启。如果是通过Helm方式安装的Rancher恢复后重新部署时要保证Helm values里的hostname和ingress.tls.source等配置和原来一致。不要贪方便把hostname改成新域名恢复后的证书SAN是旧域名的不一致会导致UI访问失败。若确实要换域名必须触发证书重新签发流程。还有一个小细节恢复完成后建议检查一下Rancher里的server-url全局设置它在https://rancher.example.internal这种形式下由系统自动生成如果DNS还没有切换到新地址可以先保持不变等切换后再统一验证。4. 迁移过程中的典型问题与排查4.1 etcd快照恢复失败的几种原因真正动手迁移时第一个可能挡路的就是etcd快照恢复失败。我整理了几种常见原因磁盘空间不足。快照文件本身可能几个GB恢复时还要临时解压和做临时数据落盘空间不足会导致恢复中断。建议恢复前用df -h检查每个etcd节点的磁盘余量。版本差异过大。etcd快照的恢复对版本要求比较严格如果旧集群etcd版本和新集群etcd版本差异太大恢复时可能报格式不兼容。最好让新集群的Kubernetes版本、etcd版本尽量贴近原环境。快照在传输中损坏。这种情况前面2.4里说的SHA256校验就能提前发现别省这一步。如果真的恢复失败先把报错日志保存下来确认是哪种原因再决定是清理磁盘重试还是回到旧环境重新制作快照。不要在一个方向上一遍遍试那种反复重跑恢复命令的操作非常浪费时间而且可能把原本还能用的临时数据也弄脏。4.2 恢复后Pod一直CrashLoopBackOffRancher恢复后管理集群里的Pod反复CrashLoopBackOff是另一个常见现象。这个情况大多不是Rancher主容器本身的问题而是它依赖的组件没有起来或者数据持久化没成功。排查方法是先看Pod日志kubectl -n cattle-system logs -f deploy/rancher日志里如果出现数据库连接失败、证书校验失败之类的关键字就去检查对应后端组件。我自己遇到过一次是因为旧环境里Rancher的某些自定义CRD和加密密钥在备份包里被跳过恢复后新集群里没有对应的密钥解不开数据导致Pod启动到一半就退出。这种问题没法完全避免但可以通过提前做恢复演练来降低风险。如果已经发生了先检查密钥、证书这些敏感资源是否恢复完整再逐个组件确认依赖顺序。4.3 下游集群离线或无法重新连接Rancher恢复成功后下游集群会出现短暂的Disconnected状态。正常情况下它会通过内置的cluster agent重新连接几分钟内恢复Active。如果超过十几分钟还是离线就要检查新环境与下游集群之间的网络是否通。这里注意迁移的是Rancher管理平台下游集群节点地址不变但Rancher到它们的网络通路变了比如旧机房可以通过内网直连新机房可能需要经过新的防火墙规则或者专线。很多人在Rancher平台里看到集群离线第一反应是去重新导入集群千万别急。先telnet一下下游集群的6443端口确认网络通没通通常网络一放开集群状态就自动恢复。如果是通过代理方式接入的集群还要检查新环境的出口地址是否被下游集群的认证白名单拦截。这种场景在安全要求高的环境里特别常见。4.4 DNS切换后的访问异常排查DNS切换是迁移的临门一脚。切换后如果UI访问不了不要急着怀疑Rancher部署按顺序排查先nslookup确认域名是否解析到新节点IP再确认负载均衡器是否把流量转发到新的后端节点组然后看Rancher容器的443端口是否监听。如果浏览器报证书错误重点检查证书SAN是否包含当前访问的域名。有时候是浏览器缓存了旧的HSTS配置用无痕窗口重新验证一次就能区分是客户端问题还是服务端问题。还有一个容易被忽略的点DNS解析记录如果设置了比较长的TTL切换后部分客户端还会访问到旧IP。迁移前可以把TTL提前调低比如从3600秒改成60秒迁移完成后等一段时间再恢复。这样能显著减少切换窗口期的访问异常。4.5 版本兼容性检查清单每次做Rancher相关操作版本兼容性都必须放在心里。RKE1、Docker、Kubernetes、Rancher、Backup Operator这几者的版本相互有约束。参考我当时整理的检查点项目检查内容RKE版本确认是rke1还是rke2命令路径差异很大系统镜像新节点能否正常拉取RKE所需system imagesetcd版本新旧两套集群的etcd版本尽量一致或小版本接近Rancher版本恢复镜像版本必须与备份时的版本一致Backup Operator版本如果升级operator确认它生成的备份与Rancher版本兼容Helm values恢复后values里hostname、tls配置要和原环境一致版本不一致导致的问题往往隐藏很深比如表面上集群起来了但Rancher某些页面功能报错。所以迁移前最好把所有版本信息都记录下来恢复时严格使用同一套版本不要顺手升级。5. 迁移后的验证清单与优化建议5.1 功能验证清单Rancher恢复并且DNS切换完成后不能看一眼登录页就宣布结束。我每次都会按清单做完整验证用管理员账号和普通用户账号分别登录确认本地用户、权限映射在。逐个检查下游集群状态确认全部变为Active并且集群的节点列表正常显示。抽查两个命名空间下的工作负载确认能正常查看详情和日志。执行一次只读操作比如编辑某个集群的配置并保存确认认证链路完整。检查全局设置里的注册地址、默认Pod安全策略等配置是否保留。如果旧环境启用了Rancher的监控、日志或告警功能确认这些扩展组件也都正常显示。这里要特别强调仅检查集群状态是不够的。我就见过一次集群列表全绿但点进某个业务集群以后所有节点状态都刷不出来的情况那是因为Rancher平台到下游集群的kubeconfig有一个证书过期了。所以逐层点击把关键页面都过一遍才算验证到位。5.2 旧环境释放与数据清理在旧环境没有完全确认安全之前不要着急释放资源。我的做法是DNS切换完成后保留旧Rancher环境24小时期间持续观察新平台是否稳定。如果业务侧反馈异常且确定是新环境导致可以快速把DNS切回去。这个回滚通道在迁移头一天特别重要。过了观察期再下线旧节点。下线前还要做一件事清理旧RKE集群里的定时备份任务和告警通知避免停机后仍然往外发一堆告警邮件。同时把旧节点在负载均衡里的权重降到0确认无流量后再关机。另外迁移后建议把旧的etcd快照、备份tar包至少保留一个月再删除。不要觉得迁完就万事大吉后续如果发现某个功能配置没有恢复完整这些备份还能帮你找回原始数据。5.3 高可用与灾备优化建议迁移完成之后平台是全新环境千万别再把备份这件事放回去吃灰。这次迁移等于一次完整的恢复演练正好可以趁机把灾备体系补上。我建议在Backup Operator里配置定时备份比如每天凌晨执行一次保留最近7份。同时把备份文件定期同步到另一个机房或对象存储里不要把备份和Rancher管理平台放在一起。前面提到过etcd快照默认存储在节点本地如果整个机房出问题本地的快照也保不住所以异地拷贝不是可选项是必须项。对于更大规模的管理平台还建议再养一套“冷备恢复手册”把整个迁移和恢复步骤固化成SOP文档每半年做一次恢复演练。真到出问题的时候按SOP执行比现场回忆命令靠谱得多。最后说一个我自己的习惯迁移这类任务最容易出错的地方往往不是恢复命令本身而是“感觉快好了”的时候把验证步骤省略掉。你在新环境看到Rancher登录页弹出的一瞬间会特别兴奋但这时候恰恰是最需要冷静的。按验证清单一项项过完确认所有集群都正常、所有关键功能都可用、留好旧环境回滚通道再宣布迁移结束。按这个节奏走Rancher平台迁移完全可以做到平稳落地。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑