共用方式為


在 Azure 中部署容器

提示

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

Cloud Native .NET apps for Azure eBook cover thumbnail.

我們已在本章和第 1 章中討論過容器。 我們發現容器能為雲端原生應用程式提供許多優點,包括可攜性。 在 Azure 雲端中,您可以在預備環境和實際執行環境中部署相同的容器化服務。 Azure 提供數個選項以裝載這些容器化工作負載:

  • Azure Kubernetes Services (AKS)
  • Azure 容器執行個體 (ACI)
  • 適用於容器的 Azure Web Apps

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

Create container registry

圖 3-10。 建立容器登錄

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

az acr login --name *registryname*

驗證之後,您可以使用 docker 命令將容器映像推送至登錄。 不過在此之前,您必須使用 ACR 登入伺服器的完整名稱 (URL) 來標記映像。 其格式為登錄名稱.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 等工具中所定義的組建管線。 如欲深入了解,請參閱雲端原生 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 管線,您或許可以設定 Canary 版策略,將快速部署更新所涉及的風險降到最低。 新版本應用程式在實際執行環境中一開始不會設定任何路由流量。 然後,系統會將一小部分的使用者路由至新部署的版本。 當團隊對新版本有了信心後,就可以推出更多執行個體並淘汰舊的執行個體。 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 產品管理 VP,Gabe Monroy 說得最好:

假設您是新進員工,嘗試修正由數十個元件構成之複雜微服務應用程式的 Bug,而每個元件都有自己的組態和支援服務。 若要開始使用,您必須設定本機開發環境,使其可以模擬實際執行環境,包括設定 IDE、建置工具鏈、容器化服務相依性、本機 Kubernetes 環境,以及模擬支援服務等等。 加上設定您的開發環境所耗用的時間,修正第一個 Bug 可能需要好幾天! 或者,只要使用 Bridge to Kubernetes 和 AKS 就夠了。