跨云镜像迁移实战:阿里云 → 腾讯云
环境介绍
组件名称 | 组件配置 |
---|---|
ACR | 标准版本,开启了外网访问 |
TCR | 标准版本,开启了内网访问,并开启Private DNS |
CVM | 腾讯云服务器,可以公网访问到阿里云镜像仓库,腾讯云内网互通 |
ACR基本配置
ACR开启外网访问
ACR首页 —> 进入指定ACR实例 —> 仓库管理 —> 访问控制 —> 公网 —> 开启
TCR基本配置
TCR开启内网访问
TCR首页 —> 访问控制 —> 内网访问 —> 接入私有网络 —> 开启私有解析(可选,不配置服务器需要手动配置hosts文件)
迁移环境准备(image-transfer)
工具特性
- 支持多对多镜像仓库迁移
- 支持腾讯云 TCR 个人版(CCR)一键全量迁移至企业版
- 支持基于 Docker Registry V2搭建的docker镜像仓库服务 (如 腾讯云TCR个人版(CCR)/TCR企业版、Docker Hub、 Quay、 阿里云镜像服务ACR、 Harbor等)
- 支持自定义 qps 限速,避免迁移时对仓库造成过大压力
- 同步不落盘,提升同步速度
- 利用 pipeline 模型,提高任务执行效率
- 增量同步, 通过对同步过的镜像 blob 信息落盘,不重复同步已同步的镜像
- 并发同步,可以通过配置文件调整并发数
- 自动重试失败的同步任务,可以解决大部分镜像同步中的网络抖动问题
- 不依赖docker以及其他程序
迁移工具执行流程
下载迁移工具
wget https://github.com/tkestack/image-transfer/releases/download/v1.2.3/image-transfer-linux-amd64.tar.gz
准备认证文件、迁移规则文件
registry-secret.yaml
[root@xxxxxx]# cat registry-secret.yaml
阿里云镜像仓库地址:username: xxxxpassword: xxxx
腾讯云镜像仓库地址:username: xxxpassword: xxxx
transfer-rule.yaml
[root@xxxxxx]# cat transfer-rule.yaml
#repo级别
阿里云镜像仓库地址/ops/prometheus-config-reloader: 腾讯云镜像仓库地址/ops/prometheus-config-reloader
#tag级别
阿里云镜像仓库地址/ops/prometheus-config-reloader:xxx: 腾讯云镜像仓库地址/ops/prometheus-config-reloader:xxxx
建议在腾讯云镜像仓库上面,提前创建好仓库的ns信息
目录结构展示
[root@xxxx xx]# pwd
/data/xxxx/image-transfer-dir
[root@xxxx xx]# tree
.
├── image-transfer
├── registry-secret.yaml
└── transfer-rule.yaml
正式迁移开始
命令启动
./image-transfer --securityFile=./registry-secret.yaml --ruleFile=./transfer-rule.yaml --routines=5 --retry=3
参数解释:
--securityFile=./registry-secret.yaml
:指定一个包含镜像仓库认证信息的YAML配置文件路径。
--ruleFile=./transfer-rule.yaml
:指定一个定义镜像同步规则的YAML配置文件路径。
--routines=5
:设置并发传输的协程/线程数量,数量的大小决定了,同步速度,过大会导致机器的负载过高,过小会导致同步速度过慢,可以根据业务自行调整。
--retry=3
:设置传输失败时的自动重试次数。
迁移信息解释
2025-09-23 16:31:19.779 info transfer/job.go:88 Get a blob sha256:27b858cdcd8ac94fb049ca1bcce5b04ad26cca31558baee0f3c5fab684d42601(5419) from xxxx/ops/netshoot:v0.13 success
2025-09-23 16:31:19.779 info transfer/job.go:93 Putting blob to xxxxx/ops/netshoot:v0.13 ing...
2025-09-23 16:31:20.956 info transfer/job.go:103 Put blob sha256:27b858cdcd8ac94fb049ca1bcce5b04ad26cca31558baee0f3c5fab684d42601(5419) to xxxxx/ops/netshoot:v0.13 success
2025-09-23 16:31:21.705 info transfer/job.go:164 Put manifest to xxxx/ops/netshoot:v0.13
2025-09-23 16:31:21.705 info transfer/job.go:167 Synchronization successfully from xxxxx/ops/netshoot:v0.13 to xxxx:v0.13
2025-09-23 16:31:21.705 info image-transfer/run.go:271 Start to retry failed jobs...
2025-09-23 16:31:21.705 info image-transfer/run.go:303 ################# Finished, 0 transfer jobs failed, 0 normal urlPair generate failed, 0 jobs generate failed #################
日志记录了一个镜像 netshoot:v0.13 从阿里云成功同步到腾讯云的完整过程:
拉取镜像层:成功从阿里云下载了一个镜像数据块。
推送镜像层:将该数据块成功上传到腾讯云。
完成同步:最后上传镜像清单文件,标志着整个镜像同步成功。
最终状态报告:
Finished, 0 transfer jobs failed, 0 normal urlPair generate failed, 0 jobs generate failed
结语
至此,镜像仓库跨云迁移已圆满完成,所有镜像均顺利同步至新环境。