共用方式為


Azure Container Registry 中的異地複寫

公司想要本機存在或熱備份時,選擇從多個 Azure 區域執行服務。 最佳做法是將容器登錄放入執行映像的每個區域,這樣能夠允許網路關閉作業,並啟用快速、可靠的映像圖層傳輸。 異地複寫可讓 Azure 容器登錄成為單一登錄、服務包含多個區域登錄的多重主要區域。

異地複寫登錄能提供下列優點:

  • 可跨多個區域使用單一登錄、映像和標籤名稱
  • 使用網路鄰近登錄存取來改善區域部署的效能和可靠性
  • 從與容器主機位於相同或鄰近區域中的本機複寫登錄提取映像層,來降低資料傳輸成本
  • 跨多個區域管理單一登錄
  • 發生區域中斷時的登錄復原能力

注意

  • 如果您需要維護多個 Azure容器映像中的容器映像複本,Azure Container Registry 也支援映像匯入。 例如,在 DevOps 工作流程中,您可以從開發登錄將映像匯入到生產環境登錄,完全不需要使用 Docker 命令。
  • 如果您想要將登錄移至不同的 Azure 區域,而不是異地複寫登錄,請參閱將容器登錄手動移至另一個區域

必要條件

  • 使用者需要下列權限 (在登錄層級) 才能建立刪除複寫:

    權限 描述
    Microsoft.ContainerRegistry/registries/write 建立複寫
    Microsoft.ContainerRegistry/registries/replications/write 刪除複寫

使用案例範例

Contoso 會執行位在美國、加拿大和歐洲的公開金鑰存在網站。 為了在這些市場中提供本機和網路關閉內容,Contoso 在美國西部、美國東部、加拿大中部和歐洲西部執行 Azure Kubernetes Service (AKS) 叢集。 網站應用程式 (部署為 Docker 映像) 會在所有區域利用相同的程式碼和映像。 從資料庫 (基本在每個區域中佈建) 擷取該區域的本機內容。 每個區域部署都會有其資源的唯一設定,例如本機資料庫。

開發小組位於 Seattle WA,利用美國西部的資料中心。

推入至多個登錄
推入至多個登錄

在使用異地複寫功能前,Contoso 在美國西部具有美國型登錄,在西歐有其他登錄。 為了服務這些不同區域,開發小組將映像發送至兩個不同的登錄。

docker push contoso.azurecr.io/public/products/web:1.2
docker push contosowesteu.azurecr.io/public/products/web:1.2

從多個登錄提取
從多個登錄提取

多個登錄的常見難題包含:

  • 所有美國東部、美國西部和加拿大中部叢集皆從美國西部登錄擷取,因為其中每個遠端容器主機皆從美國西部資料中心提取資料,因此會產生輸出費用。
  • 開發小組必須將映像推送到美國西部和西歐登錄中。
  • 開發小組必須設定及維護參考本機登錄之影像名稱所在的每個區域部署。
  • 必須為每個區域設定登錄存取。

異地複寫的優點

從異地複寫登錄中提取

Azure Container Registry 的異地復寫功能具有下列優點:

  • 在所有區域管理單一登錄:contoso.azurecr.io
  • 管理映像部署的單一設定,因為所有區域都使用相同的映像 URL:contoso.azurecr.io/public/products/web:1.2
  • 推送至單一登錄,同時 ACR 會自動管理異地複寫。 ACR 只會複寫唯一層,減少跨區域的資料傳輸。
  • 設定區域 Webhook,將特定複本中的事件通知您。
  • 提供對區域中斷具有復原能力的高可用性登錄。

Azure Container Registry 也支援可用性區域,以在 Azure 區域內建立復原性和高可用性的 Azure 容器登錄。 在區域內備援的可用性區域以及跨多個區域進行異地複寫的組合,可增強登錄的可靠性與效能。

設定異地複寫

設定異地複寫是簡單的,只要按一下地圖上的區域。 您也可以使用工具來管理異地複寫,包括 Azure CLI 中的 az acr replication 命令,或使用 Azure Resource Manager 範本部署已啟用異地複寫的登錄。

異地複寫是進階登錄的一項功能。 如果您的登錄還不是進階,您可以在 Azure 入口網站中從基本和標準變更為進階:

在 Azure 入口網站中切換服務層級

若要設定進階登錄的異地複寫,請登入 Azure 入口網站

導覽到 Azure 容器登錄,並選取 [複寫]

在 Azure 入口網站的容器登錄 UI 中進行複寫

地圖會顯示,包含所有目前的 Azure 區域:

Azure 入口網站的區域圖

  • 藍色六邊形代表目前的複本
  • 綠色六邊形代表可能的複本區域
  • 灰色六邊形代表尚未提供複寫的 Azure 區域

若要設定複本,選取綠色六邊形,然後選取 [建立]

在 Azure 入口網站中建立複寫 UI

若要設定其他複本,請選取其他地區的綠色六邊形,然後按一下 [建立]

ACR 會開始同步設定的複本之間的映像。 完成時,入口網站會反映 [準備]。 入口網站中的複本狀態不會自動更新。 使用 [重新整理] 按鈕以查看更新的狀態。

使用異地複寫登錄的考量

  • 異地複寫登錄中的每個區域在設定完成後,都是獨立的。 Azure Container Registry SLA 會套用至每個異地複寫的區域。
  • 針對異地復寫登錄上的每個推送或提取映像作業,背景中的 Azure 流量管理員會將要求傳送至區域中最接近的登錄位置,以維護網路等待時間。
  • 將映像或標記更新推送至最接近的區域之後,Azure Container Registry 需要一些時間才能將資訊清單和層複寫至您選擇加入宣告的其餘區域。 與較小映像相比,較大映像會花更多時間進行複寫。 映像和標籤會跨複寫區域,與最終一致性模型進行同步處理。
  • 若要管理必須將更新推送至異地複寫登錄的工作流程,建議您設定 Webhook 來回應推送事件。 您可以在異地複寫的登錄中設定區域 Webhook,來追蹤異地複寫區域之間的推送事件何時完成。
  • 為了提供代表內容圖層的 Blob,Azure Container Registry 會使用資料端點。 您可以在每個登錄的異地複寫區域中,為您的登錄啟用專用的資料端點。 這些端點可讓您設定嚴格限定範圍的防火牆存取規則。 為了進行疑難排解,您可以選擇性地停用路由傳送至複寫,同時維護複寫的資料。
  • 如果您使用虛擬網路中的私人連結設定登錄的私人連結,則預設會啟用每個異地複寫區域中的專用資料端點。

高可用性考量

  • 如需高可用性和復原能力,建議在支援啟用區域備援的區域中建立登錄。 也建議在每個複本區域中啟用區域備援。
  • 如果登錄的首頁區域 (建立登錄的所在區域) 或其中一個複本區域發生中斷,異地複寫的登錄仍可供資料平面作業使用,例如推送或提取容器映像。
  • 如果登錄的首頁區域無法使用,您可能無法執行登錄管理作業,包括設定網路規則、啟用可用性區域和管理複本。
  • 若要規劃異地複寫登錄的高可用性,而這些登錄是使用 Azure 金鑰保存庫中儲存的客戶自控金鑰加密的,請檢閱金鑰保存庫容錯移轉和備援的指引。

刪除複本

設定登錄的複本之後,您可以在不再需要時將它刪除。 使用 Azure 入口網站或其他工具 (例如 Azure CLI 中的 az acr replication delete 命令) 刪除複本。

若要在 Azure 入口網站中刪除複本:

  1. 瀏覽到 Azure Container Registry,並選取 [複寫]
  2. 選取複本的名稱,然後選取 [刪除]。 確認您要刪除該複本。

若要使用 Azure CLI 刪除「美國東部」區域中 myregistry 的複本:

az acr replication delete --name eastus --registry myregistry

異地複寫價格

異地複寫是 Azure Container Registry 的進階服務層級功能。 當您要複寫登錄到您想要的區域時,您會產生每個區域的進階登錄費用。

在上述範例中,Contoso 會將兩個登錄向下合併成一個,並將複本新增至美國東部、加拿大中部和西歐。 Contoso 應支付每月的次進階費用,不含任何額外的設定或管理。 每個區域現在會在本機提取其映像,改善效能和可靠性,而不會衍生從美國西部到加拿大和美國東部的網路輸出費用。

針對使用異地複寫登錄的推送作業進行疑難排解

將映像推送至異地複寫登錄的 Docker 用戶端,可能不會將所有映像層及其資訊清單推送至單一複寫區域。 這可能是因 Azure 流量管理員將登錄要求路由傳送至最接近網路之複寫的登錄所導致。 如果登錄有兩個「鄰近」複寫區域,則映像層和資訊清單可能會散發至兩個網站,因而在驗證資訊清單時造成推送作業失敗。 之所以發生此問題是因為在某些 Linux 主機上解析登錄的 DNS 名稱方式所導致。 此問題不會發生在提供用戶端 DNS 快取的 Windows 上。

如果發生此問題,一種解決方案是套用用戶端 DNS 快取,例如 Linux 主機上的 dnsmasq。 這有助於確保登錄的名稱能一致地解析。 如果您是使用 Azure 中的 Linux VM 來推送至登錄,請參閱 Azure 中 Linux 虛擬機器的 DNS 名稱解析選項中的選項。

若要在推送映像時將 DNS 解析最佳化至最接近的複本,請在與推送作業來源相同的 Azure 區域中設定異地複寫登錄,或在 Azure 外部工作時設定最接近的區域。

暫時停用路由傳送至複寫

若要針對異地複寫登錄的作業進行疑難排解,您可能想要暫時停用流量管理員路由傳送至一或多個複寫。 從 Azure CLI 2.8 版開始,您可以在建立或更新複寫的區域時設定 --region-endpoint-enabled 選項 (預覽)。 當您將複寫的 --region-endpoint-enabled 選項設定為 false 時,流量管理員不再將 Docker 推送或提取要求路由傳送至該區域。 依預設,會啟用路由傳送至所有複寫,而且不論啟用還是停用路由傳送,跨所有複寫的資料同步都會進行。

若要停用路由傳送至現有的複寫,首先執行 az acr replication list 來列出登錄中的複寫。 然後,執行 az acr replication update 並設定 --region-endpoint-enabled false 進行特定複寫。 例如,若要在 myregistry 中設定 westus 複寫的設定:

# Show names of existing replications
az acr replication list --registry --output table

# Disable routing to replication
az acr replication update --name westus \
  --registry myregistry --resource-group MyResourceGroup \
  --region-endpoint-enabled false

若要還原路由傳送至複寫:

az acr replication update --name westus \
  --registry myregistry --resource-group MyResourceGroup \
  --region-endpoint-enabled true

為啟用私人端點的登錄建立複寫

為使用私人端點啟用的主要登錄建立新的登錄複寫時,建議驗證使用者身分識別具有有效的私人端點建立權限。 否則,建立複寫時,作業會停滯於佈建狀態。

如果您在建立登錄複寫時停滯在佈建狀態,請遵循下列步驟:

  • 手動刪除陷入佈建狀態的複寫。
  • 新增使用者身分識別 Microsoft.Network/privateEndpoints/privateLinkServiceProxies/write 權限。
  • 重新建立登錄複寫要求。

此權限檢查僅適用於已啟用私人端點的登錄。

下一步

簽出三段式教學課程系列,Azure Container Registry 中的異地複寫。 逐步解說建立異地備援登錄、建立容器,然後再使用單一 docker push 命令將其部署到多個區域之 適用於容器的 Web Apps 執行個體。