自動從 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. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  3. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  4. Enable the API


  5. 如果您略過這個步驟,自動遷移工具會提示您啟用 Artifact Registry API。

必要的角色

如要使用自動遷移工具,將存放區遷移至 Artifact Registry 中的 gcr.io,必須具備下列角色。

服務帳戶角色

您可以搭配 gcr.io 遷移服務帳戶和以下電子郵件地址:artifact-registry-same-project-copier@system.gserviceaccount.com,或搭配 Artifact Registry 服務帳戶,遷移至 Artifact Registry 中的 gcr.io 存放區。

為確保用於遷移的服務帳戶具備必要權限,能將映像檔從 Container Registry 複製到 Artifact Registry,請要求管理員在 Container Registry 專案、資料夾或機構中,將Storage 物件檢視者 (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 之前,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。系統會在要求時,從 Container Registry 複製從 Artifact 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 配額傳送要求。

後續步驟