自动从 Container Registry 迁移到 Artifact Registry

本文档介绍了从 Container Registry 过渡到 pkg.dev Artifact Registry 代码库所需的步骤。

大多数 Container Registry 用户应过渡到 Artifact Registry 上托管的 gcr.io 代码库,而不是 pkg.dev 代码库,因此只有在了解 Artifact Registry 中 gcr.io 代码库和 pkg.dev 代码库之间的区别后,才能按照以下说明操作。

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

  • 在 Artifact Registry 中为相应区域中的 gcr.io 项目创建 pkg.dev 代码库。
  • 为代码库建议 IAM 政策,并根据用户偏好应用或跳过应用该政策。
  • 将存储在 Container Registry 中的所有容器映像复制到 Artifact Registry pkg.dev 制品库。

准备工作

  1. Install the Google Cloud CLI.

  2. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. Enable the API


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

所需的角色

对于使用自动迁移工具的所有过渡选项,都需要以下角色。

服务账号角色

您必须为要迁移到 Artifact Registry 的每个项目向 Artifact Registry 服务账号授予以下角色。

如需确保 Artifact Registry 服务账号具有从 Container Registry 复制映像到 Artifact Registry 所需的权限,请让您的管理员向 Artifact Registry 服务账号授予 Container Registry 项目的 Storage Object Viewer (roles/storage.objectViewer) IAM 角色。

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

您的管理员也可以通过自定义角色或其他预定义角色向 Artifact Registry 服务账号授予所需的权限。

用户角色

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

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

迁移到 pkg.dev Artifact Registry 制品库

  1. 如需将 gcr.io 项目迁移到 pkg.dev 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 到 180 天内从 Container Registry 拉取的映像,可以添加 --recent-images=DAYS 标志。将 DAYS 替换为天数(介于 30 到 150 之间),该工具应检查此天数内的拉取请求。

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

复制图片

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

如需将映像从 Container Registry 复制到 pkg.dev 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 标志重新开始复制映像。

后续步骤