使用自動遷移工具,從 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.
-
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
存放區,必須具備下列角色。
服務帳戶角色:
您可以搭配 gcr.io
遷移服務帳戶和以下電子郵件地址,或搭配 Artifact Registry 服務帳戶,遷移至 Artifact Registry 中的 gcr.io
存放區。artifact-registry-same-project-copier@system.gserviceaccount.com
為確保用於遷移的服務帳戶具備必要權限,能將映像檔從 Container Registry 複製到 Artifact Registry,請要求管理員在 Container Registry 專案、資料夾或機構中,將「Storage 物件檢視者」 (roles/storage.objectViewer
) IAM 角色授予用於遷移的服務帳戶。
管理員或許也能透過自訂角色或其他預先定義的角色,將必要權限授予用於遷移作業的服務帳戶。
使用者角色:
如要取得遷移至 Artifact Registry 託管的 gcr.io
存放區所需權限,請要求管理員授予您要遷移的 Google Cloud 機構或專案的 Artifact Registry Container Registry 遷移管理員角色 (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
bucket 中儲存的所有容器映像檔,複製到 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-reads
標記,只將一定比例的讀取作業 (而非寫入作業) 推出至 Artifact Registry。從 Artifact Registry 提取缺少的映像檔時,系統會從 Container Registry 複製映像檔。
使用初期測試讀取進行遷移有兩項優點:
- 您可以先對少數要求測試 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 讀取作業,請執行下列指令:
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 配額傳送要求。