自动从 Container Registry 迁移到 Artifact Registry

使用自动迁移工具从 Container Registry 迁移到托管在 Artifact Registry 上的 gcr.io 代码库。

您可以在接收流量的 Container Registry 端点上执行迁移到 Artifact Registry gcr.io 代码库的操作,而无需任何停机或服务中断。

自动迁移工具可以执行以下操作:

  • 在 Artifact Registry 中为相应区域中列出的每个 gcr.io 项目创建 gcr.io 代码库。
  • 为每个代码库建议 IAM 政策,并根据用户偏好设置应用或跳过应用。
  • 将所有来自 gcr.io 端点的流量重定向到 Artifact Registry。
  • 将存储在 Container Registry 中的所有容器映像复制到 Artifact Registry gcr.io 代码库,即使您已启用重定向也是如此。

准备工作

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. Enable the Artifact Registry API.

    Enable the API


    如果您跳过此步骤,自动迁移工具会提示您启用 Artifact Registry API。

所需的角色

若要使用自动迁移工具在 Artifact Registry 中迁移到 gcr.io 代码库,您需要拥有以下角色。

服务账号角色

您可以使用电子邮件地址为 artifact-registry-same-project-copier@system.gserviceaccount.comgcr.io 迁移服务账号,或使用 Artifact Registry 服务账号,在 Artifact Registry 中迁移到 gcr.io 代码库。

为确保您用于迁移的服务账号拥有从 Container Registry 复制映像到 Artifact Registry 的必要权限,请让您的管理员向您用于迁移的服务账号授予 Container Registry 项目、文件夹或组织的 Storage Object Viewer (roles/storage.objectViewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您的管理员还可以通过自定义角色或其他预定义角色向您用于迁移的服务账号授予所需的权限。

用户角色

如需获得迁移到 Artifact Registry 上托管的 gcr.io 代码库所需的权限,请让您的管理员为您授予您要迁移的 Google Cloud 组织或项目的 Artifact Registry Container Registry Migration Admin 角色 (roles/artifactregistry.containerRegistryMigrationAdmin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

迁移到托管在 Artifact Registry 上的 gcr.io 代码库

您可以使用 gcloud artifacts docker upgrade migrate 命令同时迁移单个 Google Cloud 项目或多个 Google Cloud 项目。

如需迁移到 gcr.io 代码库,请运行以下命令。

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS

其中,PROJECTS 是您要迁移到托管在 Artifact Registry 上的 gcr.io 代码库的单个项目的项目 ID,或者您要迁移到托管在 Artifact Registry 上的 gcr.io 代码库的项目 ID 的逗号分隔列表。

迁移工具会完成以下步骤:

  • 在 Artifact Registry 中为您在相应区域中列出的每个 gcr.io 项目创建 gcr.io 代码库。
  • 为每个代码库建议 IAM 政策,并根据用户偏好设置应用或跳过应用。
  • 将所有流量从 gcr.io 端点重定向到 Artifact Registry。 Artifact Registry 会在请求时从 Container Registry 复制缺失的映像,以暂时提供这些映像,直到所有容器映像都复制到 Artifact Registry。
  • 将存储在 gcr.io 存储分区中的所有容器映像复制到托管在 Artifact Registry 上的新创建的 gcr.io 代码库。
  • 停用请求时复制。托管在 Artifact Registry 上的 gcr.io 代码库不再依赖于 Container Registry。

如果您只想复制在过去 30 到 180 天内从 Container Registry 拉取的映像,可以添加 --recent-images=DAYS 标志。将 DAYS 替换为工具应检查拉取操作的天数(介于 30 到 180 天之间)。

如果您想复制每个图片最近上传的版本的特定数量,可以添加 --last-uploaded-versions=VERSIONS 标志。将 VERSIONS 替换为您要为每个映像复制的版本数量。如果在复制过程中上传了新图片,则复制的版本数量可能会超过指定的数量。

--recent-images 标志和 --last-uploaded-versions 标志互斥,不能同时使用。

如果您遇到错误或超时,可以放心地重新运行该命令,系统会跳过已完成的步骤。

复制图片

迁移工具在运行时会自动复制您的容器映像,但如果您想跳过自动迁移的所有其他步骤,并使用该工具将映像复制到 Artifact Registry,则可以传递 --copy-only 标志。

如需将映像从 Container Registry 复制到托管在 Artifact Registry 上的 gcr.io 仓库,请运行以下命令:

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS \
    --copy-only

其中,PROJECTS 是您要迁移到托管在 Artifact Registry 上的 gcr.io 代码库的单个项目的项目 ID,或者您要迁移到托管在 Artifact Registry 上的 gcr.io 代码库的项目 ID 的逗号分隔列表。

该工具会跳过所有迁移步骤,并将指定项目中的映像从 Container Registry 复制到托管在 Artifact Registry 上的 gcr.io 代码库。

后续步骤