1. 容器迁移概述
1.1 容器迁移的定义
容器迁移是指将运行中的 Docker 容器实例及其关联的存储卷、网络配置、环境变量和运行时状态,从一个宿主机节点完整地转移到另一个宿主机节点的过程。与传统的虚拟机迁移不同,容器迁移更轻量、启动更快,但面临共享内核、命名空间隔离和存储卷挂载等特殊挑战。
核心迁移对象: 容器文件系统(分层镜像 + 可写层)、内存状态(进程、网络连接、文件描述符)、存储卷挂载点、网络命名空间配置。
1.2 容器迁移 vs. 容器重启
| 对比维度 | 容器迁移 | 容器重启 |
|---|---|---|
| 操作本质 | 将运行态容器完整复制到新节点 | 在本地停止并重新启动容器进程 |
| IP/网络状态 | 可保留或重新分配 IP | 通常重新分配 IP |
| 内存数据 | 支持 checkpoint/restore 保留内存 | 内存数据全部丢失 |
| 宿主机依赖 | 需要目标节点预拉取镜像 | 无跨节点依赖 |
| 典型场景 | 数据中心迁移、灾备切换 | 配置更新、故障恢复 |
| 停机时间 | 秒级~分钟级(取决于数据量) | 毫秒级~秒级 |
关键区别: 重启是“原地销毁并重建”,迁移是“跨节点复制并保持运行连续性”。迁移的核心价值在于 不中断服务 或 极短中断 的前提下改变容器运行位置。
1.3 容器迁移的典型应用场景
场景一:数据中心迁移
- 物理机下架/升级: 将运行中的容器从即将退役的宿主机平滑迁移到新硬件。
- 资源均衡: 当某节点 CPU/内存利用率超过阈值时,将部分容器迁移到低负载节点。
- 机房搬迁: 跨集群、跨地域的数据中心整体迁移,要求容器保持运行状态。
场景二:混合云灾备
- 主备切换: 当私有云集群出现大面积故障时,将关键业务容器迁移到公有云备用集群。
- 异地容灾: 通过异步迁移将容器状态定期同步到异地灾备中心,实现 RPO(恢复点目标)分钟级。
- 流量突增: 将部分无状态容器迁移到云端弹性节点,实现混合云弹性伸缩。
场景三:边缘计算
- 边缘节点漂移: 当边缘设备负载过高或即将离线时,将容器迁移到相邻边缘节点。
- 车联网/物联网: 车辆或移动设备上的容器随位置变化迁移到最近的边缘网关。
- 断网续传: 边缘节点离线期间容器继续运行,恢复网络后迁移回中心集群。
注意: 边缘场景下网络带宽有限、延迟较高,异步迁移策略(先传文件系统差异层,再传内存 checkpoint)比同步迁移更适用。
1.4 容器迁移的核心流程
一次完整的容器迁移通常包含以下五个阶段:
- 预检查: 验证目标节点资源(CPU、内存、磁盘)、镜像版本、网络连通性。
- 镜像同步: 将容器镜像的缺失层推送到目标节点(支持增量同步)。
- 数据卷同步: 使用 rsync 或分布式存储快照同步持久化数据。
- Checkpoint(检查点): 冻结容器进程,导出内存状态和文件系统快照。
- Restore(恢复): 在目标节点加载 checkpoint,恢复容器运行。
1.5 迁移策略选型要点
| 策略 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 冷迁移 | 非关键业务、计划内维护 | 实现简单,无需 checkpoint | 服务中断时间长 |
| 热迁移(同步) | 关键业务、零停机要求 | RTO < 1s | 对网络带宽要求高 |
| 异步迁移 | 混合云灾备、边缘计算 | 容忍网络抖动,带宽利用率高 | RPO 分钟级,存在数据窗口 |