微軟在 Ignite 2021 大會(huì)上發(fā)布了預(yù)覽版的Azure Container Apps,這是一個(gè)完全托管的無(wú)服務(wù)器容器運(yùn)行時(shí),用于大規(guī)模構(gòu)建和運(yùn)行現(xiàn)代應(yīng)用程序。從2021 年 11 月 2 日起,Azure 容器應(yīng)用程序可在公共預(yù)覽中使用。雖在服務(wù)到達(dá) GA 之前,Azure Container Apps 可能會(huì)發(fā)生變化。因此我們可以用來(lái)學(xué)習(xí),不建議用于生產(chǎn)。
Azure Container Apps是什么?
kubernetes 是目前最為強(qiáng)大的應(yīng)用程序平臺(tái)調(diào)度器,然而他很復(fù)雜,有著陡峭的學(xué)習(xí)曲線,云原生計(jì)算基金會(huì)(CNCF)聯(lián)合Linux基金會(huì)推出了皆在考察相關(guān)從業(yè)者對(duì)Kubernetes的開(kāi)發(fā)知識(shí)了解程度的認(rèn)證考試Certified Kubernetes Application Developer (CKAD),通過(guò)CKAD考試后,持證者即被認(rèn)可能夠?yàn)镵ubernetes設(shè)計(jì)、構(gòu)建、配置和部署云原生應(yīng)用,在Kubernetes中能夠定義應(yīng)用程序資源,使用核心功能構(gòu)建、監(jiān)控和診斷可伸縮的應(yīng)用程序。開(kāi)發(fā)人員要通過(guò)CKAD考試的陡峭學(xué)習(xí)曲線,然后才能充分利用kubernetes提供的功能,Azure Container Apps 把這里的陡峭學(xué)習(xí)曲線抹平了。
Azure Container Apps就是kubernetes之上的抽象層,是一種運(yùn)行容器化應(yīng)用程序的完全托管的服務(wù)。它讓你專注于構(gòu)建應(yīng)用程序,而不是管理配置kubernetes。
利用Kubernetes Event-driven Autoscaling (KEDA) 縮放Container Apps,無(wú)論你是想根據(jù)CPU、內(nèi)存等資源對(duì)應(yīng)用縮放,還是基于消息隊(duì)列的長(zhǎng)度對(duì)特定的負(fù)載進(jìn)行縮放。
利用分布式應(yīng)用運(yùn)行時(shí) Dapr 輕松構(gòu)建和連接微服務(wù)。Dapr允許你構(gòu)建松耦合的微服務(wù)應(yīng)用程序,而不是構(gòu)建一個(gè)分布式單體應(yīng)用,在Azure Container Apps里我,們利用 Dapr 及其組件構(gòu)建具有彈性、可擴(kuò)展性和松耦合的應(yīng)用程序
利用Envoy proxy 路由外部進(jìn)來(lái)的HTTP請(qǐng)求流量,Envoy就有強(qiáng)大的網(wǎng)絡(luò)代理功能,我們基本不需要配置就可以實(shí)現(xiàn)強(qiáng)大的功能,比如金絲雀發(fā)布
您可以隨時(shí)可以從 Azure Container Apps 升級(jí)到更自主的 Azure Kubernetes 服務(wù) (AKS),并釋放kubernetes 的全部力量。
Azure Container Apps的核心組件
Azure Container Apps有一系列組件,我們必須了解并利用這些組件來(lái)構(gòu)建企業(yè)級(jí)云本地應(yīng)用程序。
Container:我們可以在Azure Container Apps里運(yùn)行容器,這些容器和k8s 一樣可以從各種容器倉(cāng)庫(kù)中拉取容器鏡像,和k8s 一樣,Azure Container Apps 也是用Pod 作為運(yùn)行容器的最小單位,我們可以在Pods里定義多個(gè)容器,這個(gè)k8s 上通常的SideCar 模式就是這樣的,Pod的所有容器共享硬盤和網(wǎng)絡(luò)資源。目前 Azure Container Apps只支持Linux 容器。
Revisions:Revision 表示Pod的不可變快照,至少有一個(gè)Revision,這是初始部署的時(shí)候自動(dòng)創(chuàng)建的。通常我們會(huì)在某個(gè)時(shí)間點(diǎn)對(duì)Pod 做多次的Revision,以實(shí)現(xiàn)金絲雀發(fā)布和A/B測(cè)試.
Container Apps: 容器應(yīng)用程序包括至少一個(gè)Revision 。每個(gè)容器應(yīng)用程序都可以進(jìn)行主動(dòng)和非活動(dòng)Revision 。但是,它至少有一個(gè)主動(dòng)Revision 。如果不再需要Revision ,我們可以停用Revision 。(我們還可以重新激活非活動(dòng)Revision )
Environment: Environment 至少有一個(gè)容器應(yīng)用程序組成。每個(gè)環(huán)境是一個(gè)安全邊界,這意味著其所有容器應(yīng)用程序都部署到專用的 Azure 虛擬網(wǎng)絡(luò)中。所有由Environment 內(nèi)部容器產(chǎn)生的日志都發(fā)送到專用的 Azure Log Analytics 。
下面我們就來(lái)玩一下Azure Container App 體驗(yàn)一下,部署一個(gè)簡(jiǎn)單的容器到Azure容器應(yīng)用程序,具體文檔參見(jiàn) https://docs.microsoft.com/zh-cn/azure/container-apps/get-started?tabs=bash 。
需要注意的是當(dāng)前Azure Container App 只在 北歐(northeurope) 和加拿大中部 (canadacentral)這兩個(gè)區(qū)域可用
首先,我們必須為 Azure CLI 安裝 Azure Container App 擴(kuò)展。
az extension add \
--source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl
設(shè)置以下環(huán)境變量:
RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"
定義這些變量后,可以創(chuàng)建一個(gè)資源組來(lái)組織與新容器應(yīng)用相關(guān)的服務(wù)。
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
升級(jí) CLI 并提供新的資源組后,可以創(chuàng)建容器應(yīng)用環(huán)境并部署容器應(yīng)用。
Azure 容器應(yīng)用中的環(huán)境圍繞一組容器應(yīng)用創(chuàng)建安全邊界。部署到相同環(huán)境的容器應(yīng)用部署在同一虛擬網(wǎng)絡(luò)中,并將日志寫入同一個(gè) Log Analytics 工作區(qū)。
Azure Log Analytics 用于監(jiān)視創(chuàng)建容器應(yīng)用環(huán)境時(shí)所需的容器應(yīng)用。
使用以下命令創(chuàng)建新的 Log Analytics 工作區(qū):
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP \
--workspace-name $LOG_ANALYTICS_WORKSPACE
接下來(lái),檢索 Log Analytics 客戶端 ID 和客戶端密碼。請(qǐng)確保單獨(dú)運(yùn)行每個(gè)查詢,以便有足夠的時(shí)間完成請(qǐng)求。
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`
單個(gè)容器應(yīng)用部署到 Azure 容器應(yīng)用環(huán)境。若要?jiǎng)?chuàng)建環(huán)境,請(qǐng)運(yùn)行以下命令:
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 \
執(zhí)行到這里的時(shí)候報(bào)錯(cuò)了
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 頁(yè)面來(lái)進(jìn)行下面的實(shí)驗(yàn)
通過(guò)Portal 進(jìn)行創(chuàng)建成功了。
用下來(lái)感受這個(gè)服務(wù)功能要比Azure appservice功能強(qiáng)大很多,還可以用dapr 做微服務(wù),非常期待GA的那一天。