集成Dapr的 Azure 容器應用

微軟在 Ignite 2021 大會上發佈了預覽版的Azure Container Apps,這是一個完全託管的無服務器容器運行時,用於大規模構建和運行現代應用程序。從2021 年 11 月 2 日起,Azure 容器應用程序可在公共預覽中使用。雖在服務到達 GA 之前,Azure Container Apps 可能會發生變化。因此我們可以用來學習,不建議用於生產。

Azure Container Apps是什麼?

image

  • kubernetes 是目前最爲強大的應用程序平臺調度器,然而他很複雜,有着陡峭的學習曲線,雲原生計算基金會(CNCF)聯合Linux基金會推出了皆在考察相關從業者對Kubernetes的開發知識瞭解程度的認證考試Certified Kubernetes Application Developer (CKAD),通過CKAD考試後,持證者即被認可能夠爲Kubernetes設計、構建、配置和部署雲原生應用,在Kubernetes中能夠定義應用程序資源,使用核心功能構建、監控和診斷可伸縮的應用程序。開發人員要通過CKAD考試的陡峭學習曲線,然後才能充分利用kubernetes提供的功能,Azure Container Apps 把這裏的陡峭學習曲線抹平了。
  • Azure Container Apps就是kubernetes之上的抽象層,是一種運行容器化應用程序的完全託管的服務。它讓你專注於構建應用程序,而不是管理配置kubernetes。
  • 利用Kubernetes Event-driven Autoscaling (KEDA) 縮放Container Apps,無論你是想根據CPU、內存等資源對應用縮放,還是基於消息隊列的長度對特定的負載進行縮放。
  • 利用分佈式應用運行時 Dapr 輕鬆構建和連接微服務。 Dapr允許你構建松耦合的微服務應用程序,而不是構建一個分佈式單體應用,在Azure Container Apps裏我,們利用 Dapr 及其組件構建具有彈性、可擴展性和松耦合的應用程序
  • 利用Envoy proxy 路由外部進來的HTTP請求流量,Envoy就有強大的網絡代理功能,我們基本不需要配置就可以實現強大的功能,比如金絲雀發佈
  • 您可以隨時可以從 Azure Container Apps 升級到更自主的 Azure Kubernetes 服務 (AKS),並釋放kubernetes 的全部力量。

Azure Container Apps的核心組件

Azure Container Apps有一系列組件,我們必須瞭解並利用這些組件來構建企業級雲本地應用程序。

image

  • Container:我們可以在Azure Container Apps裏運行容器,這些容器和k8s 一樣可以從各種容器倉庫中拉取容器鏡像,和k8s 一樣,Azure Container Apps 也是用Pod 作爲運行容器的最小單位,我們可以在Pods裏定義多個容器,這個k8s 上通常的SideCar 模式就是這樣的,Pod的所有容器共享硬盤和網絡資源。目前 Azure Container Apps只支持Linux 容器。
  • Revisions:Revision 表示Pod的不可變快照,至少有一個Revision,這是初始部署的時候自動創建的。通常我們會在某個時間點對Pod 做多次的Revision,以實現金絲雀發佈和A/B測試.
  • Container Apps: 容器應用程序包括至少一個Revision 。每個容器應用程序都可以進行主動和非活動Revision 。但是,它至少有一個主動Revision 。如果不再需要Revision ,我們可以停用Revision 。(我們還可以重新激活非活動Revision )
  • Environment: Environment 至少有一個容器應用程序組成。每個環境是一個安全邊界,這意味着其所有容器應用程序都部署到專用的 Azure 虛擬網絡中。所有由Environment 內部容器產生的日誌都發送到專用的 Azure Log Analytics 。

下面我們就來玩一下Azure Container App 體驗一下,部署一個簡單的容器到Azure容器應用程序,具體文檔參見 https://docs.microsoft.com/zh-cn/azure/container-apps/get-started?tabs=bash

需要注意的是當前Azure Container App 只在 北歐(northeurope) 和加拿大中部 (canadacentral)這兩個區域可用

首先,我們必須爲 Azure CLI 安裝 Azure Container App 擴展。

az extension add \
   --source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl

設置以下環境變量:

RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"

定義這些變量後,可以創建一個資源組來組織與新容器應用相關的服務。

az group create \
   --name $RESOURCE_GROUP \
   --location "$LOCATION"

升級 CLI 並提供新的資源組後,可以創建容器應用環境並部署容器應用。

創建環境

Azure 容器應用中的環境圍繞一組容器應用創建安全邊界。 部署到相同環境的容器應用部署在同一虛擬網絡中,並將日誌寫入同一個 Log Analytics 工作區。

Azure Log Analytics 用於監視創建容器應用環境時所需的容器應用。

使用以下命令創建新的 Log Analytics 工作區:

az monitor log-analytics workspace create \
   --resource-group $RESOURCE_GROUP \
   --workspace-name $LOG_ANALYTICS_WORKSPACE

接下來,檢索 Log Analytics 客戶端 ID 和客戶端密碼。請確保單獨運行每個查詢,以便有足夠的時間完成請求。

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

單個容器應用部署到 Azure 容器應用環境。 若要創建環境,請運行以下命令:

az containerapp env create \
   --name $CONTAINERAPPS_ENVIRONMENT \
   --resource-group $RESOURCE_GROUP \
   --logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
   --logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \

執行到這裏的時候報錯了

Command group 'containerapp env' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
MissingRegistrationForLocation: The subscription is not registered for the resource type 'kubeEnvironments' in the location 'canadacentral'. Please re-register for this provider in order to have access to this location.

後面我們用Azure的Portal 頁面來進行下面的實驗

image

image

image

 

 

通過Portal 進行創建成功了。

 用下來感受這個服務功能要比Azure appservice功能強大很多,還可以用dapr 做微服務,非常期待GA的那一天。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章