使用自动迁移工具从 Container Registry 迁移到 Artifact Registry 上托管的 gcr.io
代码库。
迁移到 Artifact Registry gcr.io
代码库可以在接收流量的 Container Registry 端点上执行,而无需停机或中断服务。
自动迁移工具可以执行以下操作:
- 在 Artifact Registry 中为列出的每个
gcr.io
项目在相应区域中创建gcr.io
代码库。 - 为每个代码库建议 IAM 政策,并根据用户偏好应用政策或跳过应用。
- 将所有流量从
gcr.io
端点重定向到 Artifact Registry。 - 将存储在 Container Registry 中的所有容器映像复制到 Artifact Registry
gcr.io
制品库,即使您已启用重定向也是如此。
准备工作
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Enable the Artifact Registry API.
如果您跳过此步骤,自动迁移工具会提示您启用 Artifact Registry API。
所需的角色
使用自动迁移工具过渡到 Artifact Registry 中的 gcr.io
仓库需要以下角色。
服务账号角色:
您可以使用电子邮件地址为 artifact-registry-same-project-copier@system.gserviceaccount.com
的 gcr.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 之前,Artifact Registry 会在请求时从 Container 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
标志互斥,不能同时使用。
如果遇到错误或超时,您可以安全地重新运行该命令,系统会跳过已完成的步骤。
通过 Canary 读取功能缓慢迁移
您可以使用 --canary-reads
标志仅将一定百分比的读取操作(而非写入操作)推广到 Artifact Registry。从 Artifact Registry 中拉取的缺失映像会在请求时从 Container Registry 中复制。
使用 Canary 读取进行迁移有两大优势:
- 您可以先在少量请求上测试向 Artifact Registry 的推出。
- 在大部分流程中,映像仍会推送到 Container Registry,因此回滚更安全。
我们建议您按以下步骤操作:
如需将 Canary 读取的百分比设置为 1%,请运行以下命令:
gcloud artifacts docker upgrade migrate \ --projects=PROJECTS \ --canary-reads=1
确认一切仍能正常运行。
如需将 Canary 读取的百分比设置为 10%,请运行以下命令:
gcloud artifacts docker upgrade migrate \ --projects=PROJECTS \ --canary-reads=10
确认一切仍能正常运行。
如需将 Canary 读取设置为 100%,请运行以下命令:
gcloud artifacts docker upgrade migrate \ --projects=PROJECTS \ --canary-reads=100
此时,所有读取操作都会发送到 Artifact Registry,而所有写入操作仍会发送到 Container Registry。
如需完成迁移,请运行不带 --canary-reads
标志的 artifacts docker upgrade migrate
命令,以便将写入操作也发送到 Artifact Registry:
gcloud artifacts docker upgrade migrate \
--projects=PROJECTS
回滚 Canary 版读取
如需回滚 Canary 版读取,请运行以下命令:
gcloud artifacts docker upgrade migrate \
--projects=PROJECTS \
--canary-reads=0
运行 gcloud artifacts settings disable-upgrade-redirection
或 gcloud artifacts settings enable-upgrade-redirection
命令时,Canary 读取也会被停用。
AnalyzeIamPolicy 配额
如果您要迁移大量项目,但 AnalyzeIamPolicy 配额不足,则可以使用 --no-use-analyze-iam
标志。使用 --no-use-analyze-iam
标志进行迁移比不使用该标志要慢,但可以避免发送超出 AnalyzeIamPolicy 配额的请求。