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

当前位置:

首页 > 系统应用 > 镜像批量迁移利器: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 需求。

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    精品专题 更多
    装机必备

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

    Windows

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

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

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

    IOS软件

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

    AI

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

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。