由於 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
執行結果截圖如下:
usage:ACTIVE 這代表 us.gcr.io 在過去 30 天內還有在使用 Container Registry
確認完後就可以執行轉移指令了,指令執行的流程如下:
- 一開始會先在 GAR 上建立每個 gcr.io 專案的 repositories,如下圖
- 之後會為每一個 repositories 設定 IAM 策略,這邊我們是直接採用 Google 的建議策略
用戶將擁有在 Artifact Registry 上執行所有與 Container Registry 相同操作的權限。
因為有 repositories 所以會執行四次。如下圖
- 之後會將 gcr.io 的流量都轉到 GAR。如下圖:
- 最後才是將 gcr.io 的所有 images 複製到 GAR 上。
此專案最後成功移轉 2 個 tags 跟 103 個 manifests,並成功將 *gcr.io 的流量轉移至 GAR。
另外由於轉移是用複製的方式,所以結束後若測試沒問題記得還要去 gcs 把原本 gcr 上的 image 清一清,
參考網址如下:
https://cloud.google.com/artifact-registry/docs/transition/clean-up-images-gcr
以下為本次轉移遇到的問題 #
- 執行時遇到找不到指令:
處理方式是將 gcloud 套件更新至最新。 錯誤截圖如下
- 帳號權限不足:
錯誤代碼會建議需要給予的權限,照做就可以。
錯誤截圖如下