我們已在此章和第 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 CLI 或 PowerShell 工具建立 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 build 和 docker 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 即可。