自动从 Container Registry 迁移到 Artifact Registry

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

自动迁移工具可以根据您选择的转换路径执行以下操作:

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

准备工作

  1. 安装 Google Cloud CLI。
  2. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  3. 选择一个转换选项
    • 如果您要改用 Artifact Registry 上托管的 gcr.io 代码库,请在要迁移的 Container Registry 项目中启用 Artifact Registry API。如果您跳过此步骤,该工具还会提示您启用 Artifact Registry API。

      启用 Artifact Registry API。

      启用 API

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

      启用 Artifact Registry API。

      启用 API

所需的角色

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

Artifact Registry 服务帐号所需的角色

为确保 Artifact Registry 服务帐号具有将映像从 Container Registry 复制到 Artifact Registry 所需的权限,请让管理员向 Artifact Registry 服务帐号授予 Container Registry 项目的 Storage Object Viewer (roles/storage.objectViewer) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

您的管理员或许还可以通过自定义角色或其他预定义角色为 Artifact Registry 服务帐号授予必需的权限。

生成 IAM 建议所需的角色

如需获取分析允许政策所需的权限,请让管理员针对要迁移的 Container Registry 项目向您授予以下 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 Administrator (roles/artifactregistry.admin)
  • 查看和管理应用于 Cloud Storage 存储分区的现有 Container Registry 配置: 包含您的 Container Registry 映像的 Google Cloud 项目的 Storage Admin (roles/storage.admin)

如需详细了解如何授予角色,请参阅管理访问权限

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

标准存储库

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

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

如需详细了解如何授予角色,请参阅管理访问权限

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

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

您可以使用 gcloud artifacts docker upgrade migrate 命令同时迁移单个或多个 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 到 90 天内从 Container Registry 拉取的映像,可以添加 --recent-images=DAYS 标志。将 DAYS 替换为该工具应检查是否存在拉取的天数(30 到 90 天)。

如果您要复制每张映像的特定数量最近上传的版本,可以添加 --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 替换为 Container Registry 主机名。主机名取决于容器映像的存储位置:

      • 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 到 90 天内从 Container Registry 拉取的映像,可以添加 --recent-images=DAYS 标志。将 DAYS 替换为该工具应检查是否存在拉取的天数(30 到 90 天)。

如果遇到错误或超时,您可以安全地重新运行该命令,并且跳过已完成的步骤。

复制图片

迁移工具会在您运行容器映像时自动复制容器映像,但如果您想跳过自动迁移的所有其他步骤,并使用该工具将映像复制到 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 代码库。

如需将映像从 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 替换为 Container Registry 主机名。主机名取决于容器映像的存储位置:

    • 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 代码库的名称。

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

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

后续步骤