自動從 Container Registry 遷移至 Artifact Registry

使用自動遷移工具,從 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 存放區,即使您已啟用重新導向功能也一樣。

事前準備

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Enable the Artifact Registry API.

    Enable the 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,因此回溯較為安全。

建議您按照下列程序操作:

  1. 如要將 Canary 讀取百分比設為 1%,請執行下列指令:

    gcloud artifacts docker upgrade migrate \
        --projects=PROJECTS \
        --canary-reads=1
    
  2. 確認一切運作正常。

  3. 如要將 Canary 讀取作業的百分比設為 10%,請執行下列指令:

    gcloud artifacts docker upgrade migrate \
        --projects=PROJECTS \
        --canary-reads=10
    
  4. 確認一切運作正常。

  5. 如要將 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-redirectiongcloud artifacts settings enable-upgrade-redirection 指令時,系統也會停用 Canary 讀取功能。

AnalyzeIamPolicy 配額

如果您要遷移大量專案,且 AnalyzeIamPolicy 配額不足,可以使用 --no-use-analyze-iam 旗標。使用 --no-use-analyze-iam 旗標進行遷移作業會比不使用該旗標慢,但可避免針對 AnalyzeIamPolicy 配額傳送要求。

後續步驟