Skip to main content

GCR 移轉至 GAR 筆記

·145 words·1 min
Table of Contents

由於 Google Container Registry 在 2025/03/18 就會停止服務, 因此需要在這之前將 GCR 中的 images 轉移至 GAR (Google Artifact Registry)
Google 有提供可以自動轉移的指令,參考網址:Automatically migrate from Container Registry to Artifact Registry | Artifact Registry documentation | Google Cloud

轉移指令介紹
#

指令:

gcloud artifacts docker upgrade migrate \
    --projects=PROJECTS

參數:

  • --recent-images=DAYS 只複製 30-180 天內有從 GCR 拉取(pull)的 images
  • --uploaded-version=VERSIONS 複製每個 images 特定數量的上傳版本

兩個參數無法一起

記錄一下本次移轉歷程
#

一開始有使用 Google 提供的檢查 GCR 使用量的指令,來查看目前 GCR 的使用狀況。
指令如下:

gcloud container images list-gcr-usage \
    --project=PROJECT

執行結果截圖如下:

list-gcr-usage

usage:ACTIVE 這代表 us.gcr.io 在過去 30 天內還有在使用 Container Registry

確認完後就可以執行轉移指令了,指令執行的流程如下:

  1. 一開始會先在 GAR 上建立每個 gcr.io 專案的 repositories,如下圖
    create-repositories
  2. 之後會為每一個 repositories 設定 IAM 策略,這邊我們是直接採用 Google 的建議策略 用戶將擁有在 Artifact Registry 上執行所有與 Container Registry 相同操作的權限。 因為有 repositories 所以會執行四次。如下圖
    gcr-iam
  3. 之後會將 gcr.io 的流量都轉到 GAR。如下圖:
    gcr-io
  4. 最後才是將 gcr.io 的所有 images 複製到 GAR 上。
    gcr-image-copy

此專案最後成功移轉 2 個 tags 跟 103 個 manifests,並成功將 *gcr.io 的流量轉移至 GAR。
另外由於轉移是用複製的方式,所以結束後若測試沒問題記得還要去 gcs 把原本 gcr 上的 image 清一清, 參考網址如下: https://cloud.google.com/artifact-registry/docs/transition/clean-up-images-gcr

以下為本次轉移遇到的問題
#

  1. 執行時遇到找不到指令:
    處理方式是將 gcloud 套件更新至最新。 錯誤截圖如下
    gcloud-not-found
  2. 帳號權限不足:
    錯誤代碼會建議需要給予的權限,照做就可以。
    錯誤截圖如下
    gcr-not-role
小P
Author
小P