使用自动迁移工具从 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
代码库,即使您已启用重定向也是如此。
准备工作
- Install the Google Cloud CLI.
-
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 会在请求时从 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
标志互斥,不能同时使用。
如果您遇到错误或超时,可以放心地重新运行该命令,系统会跳过已完成的步骤。
使用 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 配额发送请求。