Azure Container Registry 中的異地複寫

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

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

  • 單一登錄、映像和標籤名稱可以跨多個區域使用
  • 使用網路關閉登錄存取來改善區域部署的效能和可靠性
  • 從與容器主機相同的或附近區域提取映射層,以降低數據傳輸成本
  • 跨多個區域管理單一登錄
  • 發生區域性中斷時,登錄恢復功能

注意

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

必要條件

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

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

使用案例範例

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

開發小組位於西雅圖、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 Container Registry。 可用性區域的組合,以在區域內備援,以及跨多個區域進行異地複寫,可增強登錄的可靠性與效能。

設定異地複寫

設定異地復寫就像單擊地圖上的區域一樣簡單。 您也可以使用 Azure CLI 中的 az acr replication 命令等工具來管理異地複寫,或使用 Azure Resource Manager 範本部署啟用異地復寫的登錄。

異地復寫是 進階版 登錄的功能。 如果您的登錄尚未 進階版,您可以從基本和標準變更為 Azure 入口網站 中的 進階版

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

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

流覽至您的 Azure Container Registry,然後選取 [ 複寫]:

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 for Containers 實例。