个人资料转移工具|图片批量迁移神器:image-transfer
概览
在用户服务上云或上云的过程中,需要批量迁移镜像。基于此背景,腾讯云容器专家团队开发了批量镜像迁移工具:image-。该工具支持各云厂商镜像仓库之间批量迁移,支持腾讯云镜像仓库TCR个人版CCR一键全迁移到腾讯云镜像仓库企业版TCR。本文首先介绍业务上云/迁移过程中镜像迁移的痛点。然后详细介绍了镜像批量迁移工具image-的设计思路、功能模块和最佳实践。该工具即将开源,项目地址://image-
补码包下载地址://image-/
如何将镜像迁移到云端?
业务上云有几种场景,一种是自建idc云,一种是第三方云迁移,第三种是异地容灾,即混合云。在这种场景下,无论是上云还是上云,迁移过程主要包括以下几个步骤。
网络规划。 vpc配置、子网定义等数据迁移。对象存储、文件存储等。应用迁移。业务、配置等
在数据迁移过程中,如果业务使用大量容器化部署,需要批量镜像迁移。目前大部分云厂商的镜像仓库服务都没有提供镜像仓库批量迁移的能力。如果业务要迁移,只能在本地下载原图,修改tag,然后上传到目的图仓库。这个过程有几个缺点:
形象原则设计目标
针对镜像迁移的痛点。我们想开发一个批量迁移图像的工具。对于用户来说,只需要简单的配置即可实现批量镜像迁移,无需人工干预,提高了业务上云/迁移的进度,增加了成本。具体来说,该工具具有以下设计目标。
简单的配置,无需复杂的输入。我们希望这个工具对用户来说简单易用,只需要配置源目的镜像地址和信令就可以完成批量迁移。
快速高效地迁移海量镜像,降低迁移成本。对于大量的镜像迁移需求,我们希望工具能够高效完成,并且可以使用一些高并发的技术来实现快速迁移。
一定的容错能力减少了人工干预和维护。在迁移过程中,我们希望工具能够识别并手动修复一些错误,尽可能减少人工维护,提高运维效率。
不依赖运行环境,增强了工具的通用性。我们希望该工具可以在任何linux、macos、操作系统等无依赖的程序中运行。
支持腾讯云CCR一键全量迁移模式。目前腾讯云容器镜像服务TCR企业版即将上线,腾讯云TCR个人版(CCR)未来将逐步减少维护直至下线。因此,该工具需要支持CCR仓库一键全量迁移到TCR企业版。
支持自定义qps限速。批量迁移镜像,频繁调用镜像仓库可能会导致镜像仓库crash,所以需要限制qps。
框架
image-由多个模块组成,image-架构图如右图。
由于工具是用语言编写的,核心处理模块采用go的高并发模型。整个模块分为三个小模块。
多解释器处理镜像仓库同步规则
这里是对用户输入的镜像迁移配置文件进行处理和解析,得到每个需要传输的源镜像地址(包括repo和tag),以及对应的目标镜像地址。然后为每个源镜像地址和目标镜像地址形成一个作业。如果镜像配置文件中没有指定源镜像的tag,则会拉取repo下的所有tag,每个tag形成一个job。此过程使用多解释器方法来降低处理速率。解释器的个数可以由用户在输入参数--proc中指定个人资料转移工具,默认为5个。每个job组成后,会被加载到task中,等待被消费。
任务传输通道
任务通道可以看作是一个简单的中间件。每个作业产生后,都会被加载到其中并等待被消耗。这种设计可以保证生产者生产的作业会立即加载到消费者线上。一旦消费端空闲,就可以进行消费处理。提高作业处理效率。
多解释器处理任务
这个解释器是工作的消费者。收到作业后,会先在作业中拉取源地址,判断是否为多图,然后拉取每个blob,将blob传送到目的地址,最后再传送到目的地址。整个过程在缓存的帮助下,数据不落盘,提高了效率。此过程使用多解释器方法来降低处理速率。解释器的数量可以由用户在输入参数中指定--,默认为5个。
图像迁移最佳实践
本节将介绍如何使用镜像工具实现不同场景下的批量镜像迁移。包含的场景如下:
不同云供应商之间的映像迁移。比如从阿里云镜像仓库ACR迁移到腾讯云镜像仓库TCR。
开源/自建镜像仓库将迁移到云端。比如从镜像仓库迁移到腾讯云镜像仓库TCR。
腾讯云TCR个人版(CCR)一键迁移到腾讯云镜像仓库企业版TCR。
工具安装:
首先,下载并编译该工具。有两种形式。一是直接获取二进制补码文件,二是下载源码编译。
二进制补码包下载地址:
//图像-/
示例通过编译下载的源代码来演示:
编译过程也很简单,进入源码目录直接make即可。
git clone https://github.com/tkestack/image-transfer.git
cd ./image-transfer
make
编译完成后,会在当前目录下生成一个image-two的补码文件。可以用了。拿起一个最佳实践演示。
最佳实践场景一:不同云厂商之间的镜像迁移
以阿里云镜像仓库ACR迁移到腾讯云镜像仓库TCR为例。
1.腾讯云 Vault TCR和阿里云 Vault 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
配置非常简单。输入需要访问的源镜像仓库地址,目标镜像仓库地址。并输入对应镜像仓库的用户名和密码。
表示是否为http服务,如果是,则数组需要为true,默认为false,可选。
目标镜像仓库的用户需要有推送和创建仓库的权限。如果不提供,默认使用匿名访问。
腾讯云TCR接入账本获取方式如下:
阿里云镜像仓库ACR的访问账本获取方式如下:
2.准备要迁移的镜像规则文件:rule.yaml
registry.cn-hangzhou.aliyuncs.com/grantzhao/sichenzhao:xx": "grant-test.tencentcloudcr.com/grantzhao/sichenzhao
此文件是需要传输的源图像和目标图像。文件规则为: 源图片地址:目的图片地址,其中源图片地址可以指定一个标签,也可以不指定标签,也可以指定多个标签。指定单个标签时:目的地址可以包含标签,也可以不包含标签。不包含标签时,使用源图像的标签。未指定标签时:目标地址必须包含标签。指定多个标签时:用英文冒号分隔多个标签,例如 //:1.0,2.0,3.0。这种情况下,目的地址不能包含标签,默认使用源地址的标签。
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。
--指定一个默认值,如果目的仓库为空,则替换为默认值。
--=5,表示设置并发数为5,默认为5。
--retry=2,表示失败后重试次数为2,默认为2。
--,指定信令文件。
--,指定镜像仓库配置文件。
--qps,限制请求的qps不小于100/s。
4.运行结果
最后一行
################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################
表示操作成功。
最佳实践场景二:开源/自建镜像仓库上云
以从开源镜像仓库Hub迁移到腾讯云镜像仓库TCR为例。
1.拟建hub和腾讯云镜像仓库TCR的访问账本信息文件:.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.计划镜像信令配置文件.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.腾讯云配置文件.yaml
TCR一键迁移模式个人资料转移工具,接入信令不需要仓库的用户名和密码,而是使用腾讯云的信息。
ccr:
secretId: xxx
secretKey: xxx
tcr:
secretId: xxx
secretKey: xxx
注意:文件格式如上所示,只允许更改和输入。
如果没有 ccr 信息,将使用 tcr 代替。反之,如果没有tcr信息,则使用ccr代替。
获取信息如下:
包含两个信息
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
参数说明:
--=true,表示开启TCR一键全量迁移模式。
--,提供一个.yaml配置文件。
--=tcr-test,指定目标tcr仓库的名称。
--,指定目标tcr仓库所在区域。
--,指定源ccr仓库所在区域。
4.运行结果
一键批量迁移需要很长时间,因为ccr的所有图片都需要迁移到tcr。
正如您在最后看到的,有 16 个作业失败。该工具最终会列出失败作业的源镜像地址和目标镜像地址。对于那些失败的作业,去仓库查看后,发现这种作业的标签是无效的。因此,传输失败。
总结
本文介绍图片批量迁移工具:image-.欢迎您提供源代码,也欢迎您提出问题要求。
个人资料转移工具|阿里云数据迁移工具解决方案:从华为云迁移到阿里云
个人资料转移工具|阿里云数据迁移工具解决方案:华为云迁移到阿里云对于华为云批量迁移到阿里云,可以支持批量一键式安装Agent软件,做到了操作步骤简单化、自动化,可以满足常见源端操作系统类型。填写在目标阿里云启动迁移主机时所需要的计算网络等相关配置。迁移到阿里云成功机器会显示阿里云主机的相关信息。华为云迁移上阿里云是目前常见的一个场景,需要选择一款成熟的产品来解决人力、技术及安全层面的诸多问题,让企业上云变的更加简单高效。 【查看详情】