ImageTransport是用来迁移同地域ACR个人版实例镜像到企业版实例的工具。本文介绍如何使用ImageTransport将个人版实例镜像迁移至企业版实例。

ImageTransport功能介绍

ImageTransport是镜像迁移工具,支持以下功能:
  • 基于内存来进行数据迁移,速度快。
  • 支持指定命名空间映射关系。
    • 可以指定默认实例命名空间镜像范围,仅指定范围内的镜像会迁移到企业版实例。
    • 可以指定命名空间映射关系,可以根据需要将默认实例A命名空间迁移到企业版实例A命名空间,也可以将默认实例A命名空间迁移到企业版实例B命名空间。
  • 获取个人版实例所有命名空间,并检查企业版实例。
    1. 如果不存在相应命名空间,则在企业版实例中创建相应的命名空间并开启自动创建仓库属性。
    2. 如果存在该命名空间,则检查并开启命名空间的自动创建仓库属性。
  • 获取个人版实例所有镜像仓库,并检查企业版实例。
    • 如果不存在相应镜像仓库,则在企业版实例中创建相应的镜像仓库并同步仓库类型、描述属性。
    • 如果存在相应镜像仓库,则跳过镜像仓库属性设置。
    • 检查镜像仓库构建配置,并在企业版实例中为对应仓库同步构建配置。
  • 针对镜像仓库下的所有镜像,支持三种同步策略。
    • 全量同步策略:一次性同步所有镜像到企业版实例。
    • 批量同步策略:支持指定镜像数量n,仅同步每个镜像仓库下最新的n个镜像。
    • 增量同步策略:支持多次进行批量同步,忽略已同步过的镜像。
  • 对于每批次的同步任务,可以实时查看同步数据。
    • 同步数据量时,自动对镜像总数量进行统计。
    • 实时计算同步完成率,预估完成时间。

注意事项

  • 目前只支持同地域个人版实例镜像迁移到企业版实例。
  • 迁移所使用账号需要有个人版实例只读权限和企业版实例读写权限,且已设置个人版实例的Registry密码。
    注意 如果迁移镜像时出现命名空间和镜像仓库迁移不全的问题,请先确认RAM授权无问题,再确认容器镜像服务控制台上无特别授权。 容器镜像服务控制台有授权情况下,系统会忽略RAM授权。关于控制台授权的详细介绍,请参见常见问题

迁移前准备

迁移前环境准备
  • 准备迁移机器ECS

    准备一台与企业版实例同地域ECS(尽量选择配置高,内网带宽高的机器)机器。

  • 配置企业版实例网络

    为企业版实例配置与ECS相同的专有网络。具体操作,请参见配置专有网络的访问控制

  • 准备迁移账号

    准备一个具备容器镜像服务ACR个人版实例和企业版实例读写权限的账号,且该账号已设置个人版实例的Registry密码,然后获取该账号的AccessKey ID和AccessKey Secret。

  • 准备镜像仓库登录名和密码

    准备个人版实例和企业版实例镜像仓库的登录名和密码。关于镜像仓库登录名和密码的获取方式,请参见使用企业版实例推送拉取镜像

  • 绑定代码源

    如果需要同步镜像构建配置,请在企业版实例中绑定与默认实例相同的代码源。

迁移前参数准备
参数 示例值 是否必须 说明
instanceId cri-1234**** 企业版实例ID,您可以在企业版实例的概览页面获取企业版实例ID。
accessKey ak-example 具备容器镜像服务ACR个人版实例和企业版实例读写权限的账号AccessKey ID。
secretKey sk-example 具备容器镜像服务ACR个人版实例和企业版实例读写权限的账号AccessKey Secret。
regionId cn-hangzhou 个人版实例、企业版实例所在区域。
auth4DefaultInstance default:default 个人版实例镜像仓库的登录名和密码,中间以:号连接。
auth4EnterpriseInstance enterprise:enterprise 企业版实例镜像仓库的登录名和密码,中间以:号连接。
namespace a,b:bb,c 命名空间映射,默认迁移命名空间同名映射。以半角逗号(,) 隔开命名空间,以分号(:)分割映射值。例如设置namespacea,b:bb,c ,则会出现以下两种情况:
  • 如果企业版实例中已经有a、bb和c的命名空间,默认实例a和c命名空间迁移到企业版实例同名命名空间中,将默认实例b命名空间迁移到企业版实例bb命名空间。
  • 如果企业版实例中没有有a、bb和c的命名空间,企业版实例会自动创建名为a、bb和c的命名空间,再将默认实例a和c命名空间迁移到企业版实例同名命名空间,将默认实例b命名空间迁移到企业版实例bb命名空间。
intranet true 是否使用内网来进行镜像迁移。默认为true,表示使用内网进行镜像迁移。
tagNum 20 每个镜像仓库下,同步最新的n个镜像(n在-1和[1, 100]间取值)。默认为-1,表示同步全部镜像。

场景一:VPC网络全量同步镜像

将个人版实例下的所有镜像迁移至企业版实例。

执行以下命令,将个人版实例迁移至企业版实例。
docker run -ti registry.cn-hangzhou.aliyuncs.com/acr-toolkit/image-transport:aliyun-0.0.3 image-transport \
    --accessKey ak-example \
    --secretKey sk-example \
    --instanceId cri-12345678 \
    --regionId cn-hangzhou \
    --auth4DefaultInstance default:default \
    --auth4EnterpriseInstance enterprise:enterprise
返回结果中实时显示同步进度。
INFO[2021-01-07 12:45:36]   Synchronization progress report:
INFO[2021-01-07 12:45:36]   Total images: 103, Synced images: 33, Fail synced images: 0, Achieved ratio: 32.04%
INFO[2021-01-07 12:45:36]   Total data: 6883.2 MB, Synced data: 2782.9 MB, Achieved ratio: 40.43%
INFO[2021-01-07 12:45:36]   Average speed: 46.38 MB/s, Realtime speed: 46.38 MB/s
INFO[2021-01-07 12:45:36]   Time cost: 1m:0s, Estimate remaining time: 1m:28s, Estimate remaining time by realtime speed: 1m:28s

场景二:VPC网络批量同步镜像

当个人版实例镜像数据量过于庞大(PB级别),同时仅需要迁移最新镜像,这时候可以选择仅同步每个仓库最新的n个镜像。

执行以下命令,将个人版实例每个仓库最新的20个镜像迁移至企业版实例。
docker run -ti registry.cn-hangzhou.aliyuncs.com/acr-toolkit/image-transport:aliyun-0.0.3 image-transport \
    --accessKey ak-example \
    --secretKey sk-example \
    --instanceId cri-12345678 \
    --regionId cn-hangzhou \
    --auth4DefaultInstance default:default \
    --auth4EnterpriseInstance enterprise:enterprise \
    --tagNum 20

场景三:VPC网络增量同步镜像

如果您之前已将个人版实例每个仓库最新的20个镜像迁移至企业版实例,您还想进一步同步个人版实例仓库最新的40个镜像。您可以设置tagNum40,系统会跳过已迁移的20个镜像,在已迁移镜像的基础上再迁移20个镜像。

执行以下命令,将个人版实例每个仓库最新的40个镜像迁移至企业版实例。

docker run -ti registry.cn-hangzhou.aliyuncs.com/acr-toolkit/image-transport:aliyun-0.0.3 image-transport \
    --accessKey ak-example \
    --secretKey sk-example \
    --instanceId cri-12345678 \
    --regionId cn-hangzhou \
    --auth4DefaultInstance default:default \
    --auth4EnterpriseInstance enterprise:enterprise \
    --tagNum 40

场景四:指定命名空间映射

如果您希望迁移默认实例内的两个命名空间test-a和test-b,默认实例test-a命名空间迁移到企业版实例的test-a命名空间,将默认实例test-b命名空间迁移到企业版实例的test-c命名空间,且仅迁移每个仓库最新的20个镜像。您可以设置tagNum20,设置namespacetest-a,test-b:test-c

执行以下命令,指定命名空间映射,且仅迁移每个仓库最新的20个镜像。
docker run -ti registry.cn-hangzhou.aliyuncs.com/acr-toolkit/image-transport:aliyun-0.0.3 image-transport \
    --accessKey ak-example \
    --secretKey sk-example \
    --instanceId cri-12345678 \
    --regionId cn-hangzhou \
    --auth4DefaultInstance default:default \
    --auth4EnterpriseInstance enterprise:enterprise \
    --namespace test-a,test-b:test-c \
    --tagNum 20

常见问题

为什么迁移镜像时出现命名空间和镜像仓库迁移不全的问题?

容器镜像服务控制台有授权情况下,系统会忽略RAM授权,导致命名空间和镜像仓库迁移不全。 您可以选择删除容器镜像服务控制台授权,使用 RAM 授权。也可以新建子账号并授予正确 RAM 权限。以下介绍如何删除容器镜像服务控制台授权。

  1. 登录容器镜像服务控制台
  2. 在顶部菜单栏,选择所需地域。
  3. 实例列表页面单击个人版实例。
  4. 在个人版实例详情页面选择仓库管理 > 镜像仓库,然后单击目标镜像仓库的名称。
  5. 在镜像仓库详情页面单击仓库授权。然后单击目标权限操作列的删除
  6. 在弹出的对话框中单击确定