展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 系统应用 > 镜像批量迁移利器:image-transfer

镜像批量迁移利器:image-transfer

概述用户业务在上云或云迁移过程中,往往需要对镜像进行批量迁移。在此背景下,腾讯云容器专家团队精心打造了镜像批量迁移工具image-transfer。该工具功能强大,不仅支持多种云厂商镜像仓库之间的批量迁移,还能实现腾讯云镜像仓库TCR个人版CCR一键全量迁移至腾讯云镜像仓库企业版TCR。接下来,本文

概述

用户业务在上云或云迁移过程中,往往需要对镜像进行批量迁移。在此背景下,腾讯云容器专家团队精心打造了镜像批量迁移工具image-transfer。该工具功能强大,不仅支持多种云厂商镜像仓库之间的批量迁移,还能实现腾讯云镜像仓库TCR个人版CCR一键全量迁移至腾讯云镜像仓库企业版TCR。接下来,本文将先剖析业务上云/迁移过程中镜像迁移的痛点,然后详细阐述镜像批量迁移工具image-transfer的设计思路、功能模块以及最佳实践。目前,该工具已正式开源,项目地址为:https://github.com/tkestack/image-transfer

二进制包下载地址:https://github.com/tkestack/image-transfer/releases

业务上云,镜像怎么迁移?

业务上云主要有几种场景,一是自建 idc 上云,二是第三方云迁移,三是异地灾备,即混合云。这些场景中,无论是上云还是云迁移,迁移流程主要有如下几步。

  1. 网络规划。vpc 配置,子网划分等。
  2. 数据迁移。对象存储,文件存储等。
  3. 应用迁移。业务,配置等。

在数据迁移过程中,如果业务大量使用容器化部署,则需要批量镜像迁移。而目前大部分云厂商的镜像仓库服务没有提供镜像仓库批量迁移的能力。业务想要迁移,只能先在本地下载原镜像,修改 tag 后,再上传至目的镜像仓库。这个过程存在以下几个缺点:

  • 耗时耗力。仅仅对于单个镜像迁移,就需要三步操作,并且需要时刻盯着,若出现失败情况,需进一步处理。
  • 完全人肉操作,易出现差错。在对原镜像修改 tag 时,由于是人为修改,极易操作失误,tag 修改错了等。
  • 镜像量大时,成本增加,上云进度缓慢。如果有几百上千个镜像,这样人肉操作,迁移进度会十分缓慢,且迁移成本会大大增加。

image-transfer 的原理

设计目标

针对镜像迁移的痛点。我们希望开发一种镜像批量迁移工具。它对使用者而言,只需要简单的配置,就可以实现镜像批量迁移,无需人工干预,提高业务上云/迁移的进度,降低成本。具体而言,该工具有以下设计目标。

  1. 配置简单,无需复杂输入。我们希望对使用者而言这个工具是简单易用的,仅需配置源、目的镜像地址和鉴权,即可完成批量迁移。

  2. 快速高效迁移海量镜像,降低迁移成本。针对大量的镜像迁移需求,我们希望工具可以高效完成,借助高并发的一些技术,实现快速迁移。

  3. 一定的容错能力,减少人工干预维护。在迁移过程中,我们希望工具可以进行一些错误的识别和自动修复,尽量减少人工维护,提高运维效率。

  4. 对运行环境没有依赖,提高工具普适性。我们希望工具是可以在任何 linux,mac os,windows 操作系统中运行,而不用依赖 docker 及其他程序。

  5. 支持腾讯云 CCR 一键全量迁移模式。目前,腾讯云容器镜像服务 TCR 企业版正式上线,腾讯云 TCR 个人版(CCR)将在未来逐步减少维护,直到下线。因此工具需要支持 CCR 仓库一键全量迁移至 TCR 企业版。

  6. 支持自定义 qps 限速。批量迁移镜像,频繁的调用镜像仓库接口有可能导致镜像仓库崩溃,因此需要对 qps 进行限制。

架构

image-transfer 由多个模块构成,下图给出了 image-transfer 架构图。

  • 通用模式输入(默认):用于接受用户下发的镜像迁移任务。包括镜像迁移配置文件和鉴权配置文件。该模式用于实现云厂商之间的镜像迁移。

  • CCR 一键迁移模式输入:需要在工具输入参数添加 --ccrToTcr=true,该模式用于 CCR 仓库一键全量迁移至 TCR 企业版。除了添加 --ccrToTcr=true 参数,还需鉴权配置文件和腾讯云 secret 配置文件。

  • pipeline:该模块是工具处理镜像迁移的核心。负责处理用户下发的镜像迁移任务,包括根据迁移配置文件处理镜像仓库的同步规则,以及进行镜像的分层拉取和传输任务。模块采用了高并发的 pipeline 模型,提高迁移速度。

  • 重试 task:这个阶段会重试 pipeline 中传输失败的任务。重试次数可根据用户输入参数而定,默认为 2 次。

Pipeline

由于工具采用 golang 语言编写,因此核心处理模块采用了 go 的 pipeline 高并发模型。整个 pipeline 模块分为三个小模块。

多协程处理镜像仓库同步规则

这里是对用户输入的镜像迁移配置文件进行处理解析,获取每一个需要传输的源镜像地址(包括 repo 和 tag),以及对应的目的镜像地址。然后针对每个源镜像地址和目的镜像地址组成一个 job。如果镜像配置文件中没有指定源镜像的 tag,则会拉取该 repo 下的所有 tag,再针对每个 tag,组成一个 job。这个过程采用 golang 的多协程方式处理,增加处理速度。协程数量可由用户在输入参数指定 --proc,默认是 5 个。每个 job 组成后,会被放入task channel 中,等待被消费。

Task传输通道

task 通道可看作一个简易中间件,由 golang 的 channel 实现,每个 job 被生产后,会被放入该 channel 中,等待被消费。该设计可以保证生产者生产出 job 就会立即被放入消费线,一旦消费端有空闲,即可进行消费处理。提高 job 处理效率。

多协程处理 task

这些协程作为job的消费端,其工作流程是这样的:拿到job后,先去拉取job中源地址的manifest,判断它是否为多manifest镜像。然后,针对每个blob进行拉取操作,接着将blob传输到目的地址,最后再把manifest传输到目的地址。整个过程都借助缓存来实现,数据不会落到磁盘上,从而提高了效率。这个过程采用了golang的多协程方式来处理,以此增加处理速度。协程的数量可以由用户在输入参数时通过指定--routines来确定,默认的数量是5个。

镜像迁移最佳实践

本节将介绍如何利用 image-transfer 工具,实现不同场景下的批量镜像迁移。包含场景如下:

  1. 不同云厂商之间的镜像迁移。例,从阿里云镜像仓库 ACR 迁移到腾讯云镜像仓库 TCR。

  2. 开源/自建镜像仓库迁移上云。例,从 harbor 镜像仓库迁移到腾讯云镜像仓库 TCR。

  3. 腾讯云 TCR 个人版 (CCR) 一键迁移至腾讯云镜像仓库企业版 TCR。

工具安装:

首先对工具进行下载编译,有两种方式,一种是直接获取二进制文件,第二种是下载源码编译。

二进制 release 包下载地址:

https://github.com/tkestack/image-transfer/releases

示例采用下载源码编译进行演示:

编译过程也非常简单,进入源码目录,直接 make。

git clone https://github.com/tkestack/image-transfer.git
cd ./image-transfer
make

编译完成后,会在当前目录生成 image-transfer 二进制文件。即可使用。接下来进行最佳实践演示。

最佳实践之场景一:不同云厂商之间的镜像迁移

以从阿里云镜像仓库 ACR 迁移到腾讯云镜像仓库 TCR 为例。

1. 准备腾讯云镜像仓库 TCR 以及阿里云镜像仓库 ACR 的访问凭证信息文件:auth.json
   grant-test.tencentcloudcr.com:
username: xxx
password: xxx
grant-test2.tencentcloudcr.com:
username: xxx
password: xxx
registry.cn-hangzhou.aliyuncs.com:
username: xxx
password: xxx
ccr.ccs.tencentyun.com:
username: xxx
password: xxx
registry.hub.docker.com:
username: xxx
password: xxx

配置很简单,输入需要访问源镜像仓库地址,和目的镜像仓库地址。并输入对应镜像仓库的用户名和密码即可。

其中 insecure 表示,registry 是否是 http 服务,如果是,insecure 字段需要为 true,默认是 false,可选。

而目的镜像仓库的用户需要拥有 push 以及创建仓库权限,如果没有提供,则默认匿名访问。

其中腾讯云 TCR 访问凭证如下方法获取:阿里云镜像仓库 ACR 的访问凭证如下获取:

2. 准备好需要迁移的镜像规则文件:rule.yaml
registry.cn-hangzhou.aliyuncs.com/grantzhao/sichenzhao:xx": "grant-test.tencentcloudcr.com/grantzhao/sichenzhao

该文件是配置需要传输的源镜像和目的镜像。文件规则是:源镜像地址: 目的镜像地址其中源镜像地址,可以指定 tag,也可以不指定 tag,也可以指定多个 tag。指定单个 tag 时:目的地址可以包含 tag,也可以不包含。不包含 tag 时则使用源镜像的 tag。不指定 tag 时:目的地址必须包含 tag。指定多个 tag 时:多 tag 之间用英文逗号隔开,比如 grant-test.tencentcloudcr.com/grantzhao/sichenzhao:1.0,2.0,3.0。此时目的地址不能包含 tag,默认使用源地址的 tag。

3. 运行工具
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default 
--registry=grant-test.tencentcloudcr.com --retry=2 --qps=100

参数解释:

--ns 指定了一个默认的 ns,若目的仓库的 ns 为空,则由该默认的 ns 代替。

--registry指定了一个默认的 registry,若目的仓库的 registry 为空,则由该默认的 registry 代替。

--routines=5,表示设置并发数为 5。默认为 5。

--retry=2,表示失败后的重试次数为 2,默认为 2。

--securityFile,指定鉴权文件。

--ruleFile,指定镜像仓库配置文件。

--qps,限制请求的 qps 不高于100/s。

4. 运行结果

最后一行

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

表示运行成功。

最佳实践之场景二:开源/自建镜像仓库迁移上云

以从开源镜像仓库 docker hub 迁移到腾讯云镜像仓库 TCR 为例。

1. 准备 docker hub 以及腾讯云镜像仓库 TCR 的访问凭证信息文件:security.yaml
   grant-test2.tencentcloudcr.com:
username: xxx
password: xxx
registry.hub.docker.com:
username: xxx
password: xxx
2. 准备好需要迁移的镜像规则文件:image.json
   sichenzhao/private-test:xxx": "grant-test2.tencentcloudcr.com/grantzhao/sichenzhao
3. 运行工具
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default 
--registry=grant-test.tencentcloudcr.com --retry=2
4. 运行结果

最后一行

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

表示运行成功。

最佳实践之场景三:腾讯云 TCR 个人版(CCR)一键迁移至腾讯云镜像仓库企业版 TCR

该场景下的使用方式和上面两种场景稍有不同。主要表现为输入参数的变化。

1. 准备镜像鉴权配置文件 security.yaml
   grant-test.tencentcloudcr.com:
username: xxx
password: xxx
grant-test2.tencentcloudcr.com:
username: xxx
password: xxx
ccr.ccs.tencentyun.com:
username: xxx
password: xxx
2. 准备腾讯云 secret 配置文件 secret.yaml

对于 TCR 的一键迁移模式,不需仓库的用户名和密码作为访问鉴权,而是通过腾讯云的 secret 信息。

   ccr:
secretId: xxx
secretKey: xxx
tcr:
secretId: xxx
secretKey: xxx

注意:文件格式如上所示,只允许修改 secretId 和 secretKey 项。

如果没有 ccr 的 secret 信息,则会用 tcr 的代替。相反如果没有 tcr 的 secret 信息,也会用 ccr 的代替。

其中 secret 信息按如下方式获取:包含 secretid 和 secretkey 两个信息

3. 运行工具

这里的参数输入与上面两种场景略有区别。

   ./image-transfer --ccrToTcr=true --routines=5 --securityFile=./security.yaml --secretFile=./secret.yaml --tcrName=tcr-test 
--retry=3 --tcrRegion=ap-guangzhou --ccrRegion=ap-guangzhou --qps=3000

参数解释:

--ccrToTcr=true,表示开启 TCR 一键全量迁移模式。

--secretFile,提供 secret.yaml 配置文件。

--tcrName=tcr-test,指定目的 tcr 仓库的名字。

--tcrRegion,指定目的 tcr 仓库所在的地域。

--ccrRegion,指定源 ccr 仓库所在的地域。

4. 运行结果

一键批量迁移时间会很久,因为需要把 ccr 的全部镜像传输到 tcr。

最后可以看到,有 16 个 job 失败了。工具最后会列出失败的 job 的源镜像地址和目的镜像地址。对于这些失败的 job,去仓库检查后发现,这些 job 的 tag 是失效的。因此传输失败。

总结

本文从问题分析,设计目标,原理解析,最佳实践等方面详细介绍了镜像批量迁移工具:image-transfer。欢迎大家贡献源码,也欢迎提 issue 需求。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

本文内容来源于网友投稿,如有侵权请联系删除。
作者最新文章
系统应用
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。