微軟在Ignite 2021大會(huì)上發(fā)布了預(yù)覽版的Azure Container Apps,這是一個(gè)完全托管的無服務(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ā)生變化。因此我們可以用來學(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的開發(fā)知識(shí)了解程度的認(rèn)證考試Certified Kubernetes Application Developer(CKAD),通過CKAD考試后,持證者即被認(rèn)可能夠?yàn)镵ubernetes設(shè)計(jì)、構(gòu)建、配置和部署云原生應(yīng)用,在Kubernetes中能夠定義應(yīng)用程序資源,使用核心功能構(gòu)建、監(jiān)控和診斷可伸縮的應(yīng)用程序。開發(fā)人員要通過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,無論你是想根據(jù)CPU、內(nèi)存等資源對(duì)應(yīng)用縮放,還是基于消息隊(duì)列的長度對(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)來的HTTP請求流量,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有一系列組件,我們必須了解并利用這些組件來構(gòu)建企業(yè)級(jí)云本地應(yīng)用程序。
Container:我們可以在Azure Container Apps里運(yùn)行容器,這些容器和k8s一樣可以從各種容器倉庫中拉取容器鏡像,和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測試.
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。
下面我們就來玩一下Azure Container App體驗(yàn)一下,部署一個(gè)簡單的容器到Azure容器應(yīng)用程序,具體文檔參見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è)資源組來組織與新容器應(yīng)用相關(guān)的服務(wù)。
az group create
--name$RESOURCE_GROUP
--location"$LOCATION"
升級(jí)CLI并提供新的資源組后,可以創(chuàng)建容器應(yīng)用環(huán)境并部署容器應(yīng)用。
創(chuàng)建環(huán)境
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
接下來,檢索Log Analytics客戶端ID和客戶端密碼。請確保單獨(dú)運(yùn)行每個(gè)查詢,以便有足夠的時(shí)間完成請求。
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)境,請運(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頁面來進(jìn)行下面的實(shí)驗(yàn)
通過Portal進(jìn)行創(chuàng)建成功了。
用下來感受這個(gè)服務(wù)功能要比Azure appservice功能強(qiáng)大很多,還可以用dapr做微服務(wù),非常期待GA的那一天。