自动从 Container Registry 迁移到 Artifact Registry

使用自动迁移工具从 Container Registry 迁移到 Artifact Registry 上托管的 gcr.io 制品库或标准 Artifact Registry 制品库。

您可以在接收流量的 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. 选择转场选项
    • 如果您要改用托管在 Artifact Registry 上的 gcr.io 代码库, 在 Container Registry 项目中启用 Artifact Registry API 迁移。在以下情况下,该工具还会提示您启用 Artifact Registry API 您可以跳过此步骤

      Enable the Artifact Registry API.

      Enable the API

    • 如果您要改用标准 Artifact Registry 制品库,请在要将 Container Registry 容器映像迁移到的项目中启用 Artifact Registry API。您可以使用已启用 Container Registry 的同一项目,也可以使用其他项目。

      Enable the Artifact Registry API.

      Enable the API

所需的角色

使用自动迁移工具的所有转换选项都需要具有以下角色。

Artifact Registry 服务账号所需的角色

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

您的管理员或许还可以向 Artifact Registry 服务账号提供 通过自定义 角色或其他预定义 角色

生成 IAM 建议所需的角色

如需获得分析允许政策所需的权限,请让管理员向您授予您要迁移的容器注册表项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含 分析允许政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

分析允许政策需要以下权限:

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • 如需分析使用自定义 IAM 角色的政策,请执行以下操作: iam.roles.get
  • 如需使用 Google Cloud CLI 分析政策,请执行以下操作: serviceusage.services.use

您也可以使用自定义角色或其他预定义角色来获取这些权限。

您可以在不同资源中授予以下角色,具体取决于您的 转换选项。

gcr.io 代码库

如需获得迁移到 Artifact Registry 上托管的 gcr.io 仓库所需的权限,请让管理员向您授予以下 IAM 角色:

  • 创建 Artifact Registry 制品库并授予对各个制品库的访问权限: 包含 Container Registry 映像的 Google Cloud 项目的 Artifact Registry 管理员 (roles/artifactregistry.admin)
  • 查看和管理应用于 Cloud Storage 存储桶的现有 Container Registry 配置: 具有 Container Registry 映像的 Google Cloud 项目的 Storage Adminroles/storage.admin

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

标准代码库

如需获取转换为标准 Artifact Registry 代码库所需的权限, 请让管理员授予您 以下 IAM 角色:

  • 创建 Artifact Registry 制品库并授予对各个制品库的访问权限: 已启用 Artifact Registry API 的 Google Cloud 项目中的 Artifact Registry Administrator (roles/artifactregistry.admin)
  • 查看和管理应用于 Cloud Storage 存储分区的现有 Container Registry 配置: Storage Admin (roles/storage.admin) 针对包含 Container Registry 映像的 Google Cloud 项目

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

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

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

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

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS

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

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

  • 在相应区域内,为您列出的每个 gcr.io 项目在 Artifact Registry 中创建 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 到 150 天内从 Container Registry 拉取的映像,可以添加 --recent-images=DAYS 标志。将 DAYS 替换为在 30 到 150 之间 工具应检查是否发生拉入。

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

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

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

迁移到标准 Artifact Registry 制品库

  1. 如需将 gcr.io 项目迁移到 Artifact Registry 仓库,请运行以下命令。

    gcloud artifacts docker upgrade migrate \
        --from-gcr=GCR_HOSTNAME/GCR_PROJECT \
        --to-pkg-dev=AR_PROJECT/AR_REPOSITORY
    

    替换以下内容:

    • GCR_HOSTNAME 替换为容器注册表主机名。主机名取决于容器映像的存储位置:

      • gcr.io 在美国托管映像。
      • us.gcr.io 在美国托管映像,使用的存储分区与 gcr.io 托管的映像不同。
      • eu.gcr.io 在欧盟的成员国托管映像。
      • asia.gcr.io 在亚洲托管映像。
    • GCR_PROJECT 替换为 Container Registry Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:), 请参阅网域级项目

    • AR_PROJECT 替换为您启用了 Artifact Registry API 的 Google Cloud 项目 ID。

    • AR_REPOSITORY 替换为您的 Artifact Registry 制品库的名称。

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

  • 创建 Artifact Registry 仓库(如果仓库尚未创建) 存在。
  • 为代码库建议 IAM 政策,并根据用户偏好设置应用或跳过应用。
  • 将指定 Container Registry 区域和项目中的映像复制到您的 Artifact Registry 代码库。

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

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

复制图片

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

将映像从 Container Registry 复制到托管在 Artifact Registry,请运行以下命令:

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

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

该工具会跳过所有迁移步骤,并复制 从 Container Registry 到托管在 gcr.io 上的代码库 Artifact Registry

如需将映像从 Container Registry 复制到标准 Artifact Registry 仓库,请运行以下命令:

gcloud artifacts docker upgrade migrate \
    --from-gcr=GCR_HOSTNAME/GCR_PROJECT \
    --to-pkg-dev=AR_PROJECT/AR_REPOSITORY \
    --copy-only

替换以下内容:

  • GCR_HOSTNAME 替换为容器注册表主机名。主机名取决于容器映像的存储位置:

    • gcr.io 在美国托管映像。
    • us.gcr.io 在美国托管映像,使用的存储分区与 gcr.io 托管的映像不同。
    • eu.gcr.io 在欧盟的成员国托管映像。
    • asia.gcr.io 在亚洲托管映像。
  • GCR_PROJECT 替换为 Container Registry Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:), 请参阅网域级项目

  • AR_PROJECT 替换为已启用的 Google Cloud 项目 ID Artifact Registry API

  • AR_REPOSITORY 替换为您的 Artifact Registry 代码库的名称。

该工具会跳过所有迁移步骤,并将映像从 Container Registry 中的指定位置和项目复制到您的 Artifact Registry 代码库。

如果您在复制映像过程中发生错误或超时,还可以使用 --copy-only 标志重新开始复制映像。

后续步骤