基於Dapr的 Azure 容器應用

張善友發表於2021-11-04

微軟在 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

image


通過Portal 進行建立也失敗了。

相關文章