共用方式為


在 Azure 中部署容器

小提示

此內容摘錄自適用於 Azure 的電子書《架構雲端原生 .NET 應用程式》,該書可在 .NET Docs 上閱讀,或以 PDF 格式免費下載並離線閱讀。

Azure 電子書的雲端原生 .NET 應用程式封面縮圖。

我們已在此章和第 1 章中討論容器。 我們已經看到容器為雲端原生應用程式提供許多優點,包括可移植性。 在 Azure 雲端中,您可以在預備和生產環境中部署相同的容器化服務。 Azure 提供數個選項來裝載這些容器化工作負載:

  • Azure Kubernetes Services (AKS)
  • Azure 容器實例(ACI)
  • 適用於容器的 Azure Web Apps

Azure 容器登錄資料庫 (Azure Container Registry)

容器化微服務時,您會先建置容器「映像」。映像是服務程式代碼、相依性和運行時間的二進位表示法。 雖然您可以從 Docker API 使用 Docker Build 命令手動建立映像,但更好的方法是在自動化建置程式中建立映像。

建立之後,容器映像會儲存在容器登錄中。 它們可讓您建置、儲存及管理容器映像。 有許多登錄可供使用,包括公用和私人。 Azure Container Registry (ACR) 是 Azure 雲端中完全受控的容器登錄服務。 它會將您的映像保存在 Azure 網路內,以減少將映射部署到 Azure 容器主機的時間。 您也可以使用您用於其他 Azure 資源的相同安全性和身分識別程式來保護它們。

您可以使用 Azure 入口網站Azure CLIPowerShell 工具建立 Azure Container Registry。 在 Azure 中建立登錄很簡單。 它需要 Azure 訂用帳戶、資源群組和唯一名稱。 圖 3-10 顯示建立登錄的基本選項,會被托管在 registryname.azurecr.io

建立容器登錄

圖 3-10。 建立容器登錄

建立登錄之後,您必須先向它進行驗證,才能使用它。 一般而言,您將使用 Azure CLI 命令登入登錄:

az acr login --name *registryname*

驗證之後,您可以使用 docker 命令將容器映射推送至其中。 在您可以這麼做之前,您必須先使用 ACR 登入伺服器的完整名稱(URL)來標記映像。 其格式為 registryname.azurecr.io

docker tag mycontainer myregistry.azurecr.io/mycontainer:v1

標記映像之後,您可以使用 docker push 命令將映像推送至 ACR 實例。

docker push myregistry.azurecr.io/mycontainer:v1

將映像推送至登錄之後,最好使用此命令從本機 Docker 環境移除映像:

docker rmi myregistry.azurecr.io/mycontainer:v1

最佳做法是,您不應該手動將映像推送至容器登錄。 請改用 GitHub 或 Azure DevOps 等工具中定義的組建管線。 在 Cloud-Native DevOps 一章中深入瞭解。

ACR 工作

ACR 工作 是一組可從 Azure Container Registry 取得的功能。 它會在 Azure 雲端中建置和管理容器映像,藉此擴充您的內部循環開發週期。 與其在開發機上本地調用 docker builddocker push,它們會由雲端中的 ACR 任務自動處理。

下列 AZ CLI 命令會建置容器映像,並將其推送至 ACR:

# create a container registry
az acr create --resource-group myResourceGroup --name myContainerRegistry008 --sku Basic

# build container image in ACR and push it into your container registry
az acr build --image sample/hello-world:v1  --registry myContainerRegistry008 --file Dockerfile .

如上一個命令區塊所示,您不需要在開發計算機上安裝 Docker Desktop。 此外,您可以設定 ACR 工作觸發程式,以在原始程式碼和基底映射更新上重建容器映像。

Azure Kubernetes Service

我們在此章中以長度討論了 Azure Kubernetes Service (AKS)。 我們已經看到,這是管理容器化雲端原生應用程式的實際上容器調度器。

當您將映像檔部署至登錄庫(如 ACR)時,可以設定 AKS 自動拉取並部署該映像檔。 有了 CI/CD 管線,您可以設定 金絲雀發布 策略,以將快速部署更新時所涉及的風險降到最低。 新版的應用程式最初會在生產環境中設定,且不會有流量導向至此應用程式。 然後,系統會將一小部分的使用者路由傳送至新部署的版本。 隨著小組對新版本的信心提升,它可以推出更多實例並淘汰舊版。 AKS 可以輕鬆地支援這種部署樣式。

如同 Azure 中的大部分資源,您可以使用入口網站、命令行或自動化工具,例如 Helm 或 Terraform 來建立 Azure Kubernetes Service 叢集。 若要開始使用新的叢集,您需要提供下列資訊:

  • Azure 訂用帳戶
  • 資源群組
  • Kubernetes 叢集名稱
  • 區域
  • Kubernetes 版本
  • DNS 名稱首碼
  • 節點大小
  • 節點計數

此資訊足以讓你開始。 在 Azure 入口網站中建立程式的過程中,您也可以為叢集的下列功能設定選項:

  • 規模
  • 認證
  • 網路
  • 監測
  • 標籤

快速入門會逐步解說如何使用 Azure 入口網站部署 AKS 叢集

Azure Bridge to Kubernetes

雲端原生應用程式可能會成長大型且複雜,需要大量計算資源才能執行。 在這些情況下,整個應用程式都無法安裝在開發機器上(尤其是筆記型電腦)。 Azure Bridge to Kubernetes 可解決缺點。 它可讓開發人員在 AKS 開發叢集中裝載整個應用程式時,使用其服務的本機版本。

準備好時,開發人員會在本機測試其變更,並同時在 AKS 叢集中執行完整應用程式,而不需要複製相依性。 在幕後,橋接器會將本機計算機的程式碼與 AKS 中的服務進行整合。 開發人員可以使用 Visual Studio 或 Visual Studio Code,在 Kubernetes 中快速逐一查看和偵錯程式碼。

Microsoft前產品管理副總裁 Gabe Monroy 描述得很好:

假設您是新員工,嘗試修正一個複雜的微服務應用程式中的錯誤,其中包含數十個元件,每個元件都有自己的配置和支援服務。 若要開始使用,您必須設定本機開發環境,使其可以模擬生產環境,包括設定IDE、建置工具鏈、容器化服務相依性、本機 Kubernetes 環境、支援服務的模擬等等。 設置開發環境需要花費相當多的時間,因此修復第一個錯誤可能需要好幾天的時間! 或者,您只要使用 Bridge to Kubernetes 和 AKS 即可。