神结合!一招玩转K8s和微服务治理
發(fā)布會(huì)傳送門
進(jìn)入直播間還有好禮等你拿!
EDAS產(chǎn)品免費(fèi)試用:https://www.aliyun.com/activity/middleware/edaspromotiononmay
首屆云原生編程挑戰(zhàn)賽正式開戰(zhàn)!立即報(bào)名瓜分330000現(xiàn)金獎(jiǎng):https://tianchi.aliyun.com/specials/promotion/cloudnative#problem-definition
觀看《云原生架構(gòu)師培訓(xùn)課程》領(lǐng)取新用戶折扣:https://yqh.aliyun.com/live/AlibabaCloudNative
云原生的發(fā)展速度日新月異,要用好卻絕非輕而易舉,當(dāng)開發(fā)者開始使用云原生或向云原生架構(gòu)遷移時(shí),往往會(huì)面臨一些困境:
- 第一,云原生對(duì)于軟件產(chǎn)品存在約束,如必須滿足容器化,12要素等,因此要讓一個(gè)遺留系統(tǒng)適配云原生體系,不免會(huì)需要做一些改造,其中甚至?xí)婕暗介_發(fā)模式的轉(zhuǎn)變,對(duì)部分團(tuán)隊(duì)而言,轉(zhuǎn)變的過程可能充滿挑戰(zhàn)。
- 第二,K8s復(fù)雜性足以讓很多開發(fā)者望而卻步,而只有對(duì)其有較好的掌握才能發(fā)揮好云原生帶來的優(yōu)勢(shì),否則可能導(dǎo)致系統(tǒng)難以維護(hù),甚至因錯(cuò)誤的配置引發(fā)故障。而讓開發(fā)者的技術(shù)水平緊跟K8s的發(fā)展速度,這本身也需要持續(xù)投入,這些額外的投入也背離了讓開發(fā)只關(guān)注業(yè)務(wù)的初衷。
- 第三,雖然開源社區(qū)給云原生貢獻(xiàn)了豐富的能力組件,但對(duì)于線上業(yè)務(wù),尤其是企業(yè)級(jí)的服務(wù)來說,開源組件的性能,可靠性和可維護(hù)性能否經(jīng)得住考驗(yàn),以及運(yùn)維團(tuán)隊(duì)是否有能力對(duì)這些開源組件兜底,這也是在技術(shù)選型前所必須做的考慮。
總之,了解云原生和K8s只是開始,想要將云原生在業(yè)務(wù)落地,發(fā)揮云原生的價(jià)值,選擇一條合理的“原生化”路徑,才是開發(fā)者要關(guān)注的核心問題。
阿里巴巴對(duì)于云原生的運(yùn)用起步很早,對(duì)于在具有大規(guī)模,高可靠和分布式特征的系統(tǒng)上應(yīng)用云原生技術(shù)有豐富經(jīng)驗(yàn)。EDAS作為出品自阿里巴巴云原生團(tuán)隊(duì),阿里云上aPaaS的旗艦產(chǎn)品,在早期也提供了容器和K8s的支持能力。近期隨著EDAS 3.0版本的重磅發(fā)布,更是將云原生融入了EDAS的功能核心,致力于幫助業(yè)務(wù)進(jìn)行云原生落地,立足云原生平臺(tái)打造更強(qiáng)大的應(yīng)用管理能力,釋放技術(shù)紅利,服務(wù)廣大開發(fā)者。
下文將通過一些示例,帶領(lǐng)大家一窺究竟,看EDAS如何幫開發(fā)者“躺著”進(jìn)入云原生時(shí)代,玩轉(zhuǎn)云原生。
“純粹”的云原生
無法否認(rèn),EDAS是阿里云平臺(tái)上的商業(yè)化產(chǎn)品,而云原生主要由開源社區(qū)所倡導(dǎo),兩者顯然出自涇渭分明的兩個(gè)陣營(yíng),那“純粹”是在掩耳盜鈴?
其實(shí)不然,商業(yè)化與開源并非水火不容,相反在很多領(lǐng)域他們總是相輔相成,這個(gè)話題并非本文關(guān)注的重點(diǎn),若拋開“出身”的因素,我們理解的“純粹”指的是:
得益于K8s的開放性,EDAS實(shí)現(xiàn)的原理并不復(fù)雜,用戶只需要在K8s配置資源(應(yīng)用),通過聲明式的配置將其置于期望的狀態(tài)上,EDAS就能感知變更,自動(dòng)維護(hù)并調(diào)整狀態(tài),使其最終與用戶期望一致,從而達(dá)到管控應(yīng)用的目的,這一切并不需要修改K8s的版本,只需要安裝EDAS提供的擴(kuò)展即可。
下面從兩方面來具體介紹EDAS的做法和因之帶來的優(yōu)勢(shì)。
云原生應(yīng)用定義
前文提到,EDAS將應(yīng)用抽象成了資源,這個(gè)過程中,應(yīng)用定義的設(shè)計(jì)是至關(guān)重要的。在聲明式的規(guī)則下,應(yīng)用定義需要能覆蓋軟件生命周期過程中每個(gè)主體的配置,狀態(tài)和關(guān)系的描述,并保證良好的可讀性,因此,它必須歸納自大量應(yīng)用,復(fù)雜場(chǎng)景和長(zhǎng)久維護(hù)的經(jīng)驗(yàn)總結(jié),也只有這樣才能保證定義不脫離實(shí)際,能被高效的推演到其他應(yīng)用上。
EDAS沒有重復(fù)造輪子,選擇了“開放應(yīng)用模型(OAM)”這一開放標(biāo)準(zhǔn)來作為應(yīng)用定義,并選擇與之共建的方式來豐富標(biāo)準(zhǔn)的內(nèi)容。可以說,EDAS是OAM在阿里云上的一個(gè)實(shí)現(xiàn)。
對(duì)于開發(fā)者來說,EDAS使用OAM提供了兩大好處:
由于ApplicationConfiguration也是K8s自定義資源(CR),所以開發(fā)者可以直接使用kubectl工具對(duì)其進(jìn)行增刪查改操作,EDAS遵循K8s面向終態(tài)的設(shè)計(jì)原則,最終將應(yīng)用調(diào)整到預(yù)期的狀態(tài),對(duì)開發(fā)者來說操作應(yīng)用與操作常規(guī)的Deployment資源并沒有差異,也可以非常方便的與其他CI/CD工具或者GitOps工作流相集成。
下面給出了一份EDAS的應(yīng)用yaml示例片段,通過kubectl apply這樣一份配置即可創(chuàng)建一個(gè)用指定Jar包部署的EDAS應(yīng)用:
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
name: helloedas
namespace: default
spec:
components:
-
componentName: stateless-component
instanceName: group-1
parameterValues:-
name: packageVersion
20:20:18","type":"war","url":"http://demo.oss-cn-hangzhou-internal.aliyuncs.com/prod/demo/SPRING_CLOUD_PROVIDER.jar"}'
value: '{"buildPackageUrl":"http://demo.oss-cn-hangzhou-internal.aliyuncs.com/prod/demo/SPRING_CLOUD_PROVIDER.jar","showName":"2020-05-07 - name: artifactFormat
value: FatJar -
name: softwareComponents
JDK 8","downloadUrl":"http://edas-hz.oss-cn-hangzhou.aliyuncs.com/agent/prod/files/jdk-8u65-linux-x64.rpm","expired":false,"id":"5","imageId":"","md5":"1e587aca2514a612b10935813b1cef28","type":"JDK","version":"8"}]'
value: '[{"componentId":"5","componentKey":"Open JDK 8","createTime":0,"desc":"Open - name: replicas
value: "1" - name: showName
value: helloedas - name: description
value: ""
traits:
-
name: rollout
properties:- name: auto
value: "true" - name: batches
value: "1"
- name: auto
-
name: imagebuilder
properties:- name: tag
value: helloedas-1588854022 - name: registry
value: registry-vpc.ap-northeast-1.aliyuncs.com - name: baseImage
value: registry-vpc.cn-hangzhou.aliyuncs.com/edas_unified/edas-openjdk:8-1.0 - name: timeout
value: "900"
- name: tag
-
Deployment編輯
EDAS通過OAM給用戶提供了統(tǒng)一的應(yīng)用模型,而對(duì)底層工作負(fù)載的管理主要是借助Deployment來完成。
對(duì)于無狀態(tài)應(yīng)用的管理,Deployment的使用是相當(dāng)普遍的,它的配置項(xiàng)也頗為豐富。對(duì)于習(xí)慣了使用Deployment來管理應(yīng)用的開發(fā)者,常常會(huì)存在一些相對(duì)復(fù)雜的配置需求,這里會(huì)產(chǎn)生一個(gè)矛盾,當(dāng)特定workload(這里是Deployment)的配置能力超過了OAM模型所定義的運(yùn)維能力,如何在保留底層自定義配置同時(shí)還能維持OAM規(guī)范的簡(jiǎn)潔性和管控的有效性?
縱觀軟件開發(fā)歷史,類似的問題并不新鮮,編程語言的發(fā)展也是如此,在通用開發(fā)領(lǐng)域,高級(jí)語言早就替代了機(jī)器語言成為開發(fā)的主流,因?yàn)槿说闹橇κ怯邢薜?#xff0c;“抽象”一定是解決復(fù)雜問題的利器,這也是前文應(yīng)用定義產(chǎn)生的重要原因,但對(duì)于特殊領(lǐng)域和過渡時(shí)期,需要一些“例外”手段來提供足夠的靈活性。
因此,盡管用Deployment來直接操作應(yīng)用存在一些問題,但EDAS并沒有“一刀切”的將Deployment的控制權(quán)完全收回,而是用“插件式”增強(qiáng)的能力給出了一個(gè)答案。
從實(shí)現(xiàn)看,EDAS在操作Deployment時(shí)默認(rèn)會(huì)通過patch的方式,若需要新建Deployment(比如分批發(fā)布),EDAS也會(huì)先以之前Deployment為藍(lán)本復(fù)制后再進(jìn)行對(duì)應(yīng)配置調(diào)整。因此,只要在配置不沖突的情況下,用戶自定義的配置是完全可以繼承的,用戶可以在EDAS控制臺(tái),通過EDAS的API/SDK,或是直接用kubectl工具來修改Deployment,體驗(yàn)上與獨(dú)立使用Deployment完全一樣。
“專業(yè)”的云原生
因?yàn)椤凹兇狻痹圃?#xff0c;開發(fā)者可以以原生的方式去理解和使用EDAS,但僅有這一點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,云原生只是一個(gè)技術(shù)框架,而應(yīng)用管理則是個(gè)更具體的業(yè)務(wù)命題,aPaaS平臺(tái)必須要有血有肉,才能完成在應(yīng)用托管,應(yīng)用可觀測(cè)性,微服務(wù)治理等諸多領(lǐng)域,全方位解決問題的任務(wù)。
EDAS既然幫開發(fā)者打開了云原生的大門,下一步自然就是將阿里云和阿里中間件的技術(shù)優(yōu)勢(shì)融入aPaaS,以專業(yè)領(lǐng)域的技術(shù)優(yōu)勢(shì)來幫開發(fā)者更好更省的管理應(yīng)用,這些才是EDAS的“血”和“肉”。
不可否認(rèn),開源社區(qū)確實(shí)貢獻(xiàn)了很多的優(yōu)秀工具,解決了很多的問題,但他們的短板也同樣存在,比如:
- 特定的工具往往設(shè)計(jì)為解決某個(gè)“點(diǎn)”或某條“線”上的問題,但解決真實(shí)的問題很多是需要多角度協(xié)作的,在解決這些問題上,使用多個(gè)工具難度會(huì)更高,效果也不理想。
- 在深度使用開源工具后,最終問題可能變成工具自身的維護(hù)能力問題,對(duì)運(yùn)維團(tuán)隊(duì)更高要求。
EDAS從開始就摒棄了使用開源工具集合來拼湊功能的路線,而是基于經(jīng)過驗(yàn)證的技術(shù)或成熟的云產(chǎn)品,從問題出發(fā),構(gòu)建一整套專業(yè)的解決方案給用戶。這樣對(duì)常見的問題更具有針對(duì)性,沒有整合和維護(hù)的問題。如果開源工具就像瑞士軍刀,小巧靈活,隨取隨用;那EDAS提供的能力更像是數(shù)控機(jī)床,精準(zhǔn)高效,可規(guī)模化。
當(dāng)然,對(duì)于開發(fā)者而言,使用開源工具或EDAS從不是單選題,在云原生平臺(tái)下,完全可以通過組合的方式來取長(zhǎng)補(bǔ)短,形成最合適的方案。
這里沒有全量講解EDAS功能,僅列舉幾個(gè)典型的微服務(wù)治理的場(chǎng)景。
金絲雀發(fā)布
金絲雀發(fā)布是比較理想的發(fā)布方式,可以有效的降低版本發(fā)布的風(fēng)險(xiǎn),也被廣泛的用于線上系統(tǒng)的運(yùn)維過程中,這里不贅述它的好處,對(duì)于一次簡(jiǎn)單的金絲雀發(fā)布過程來說,只需要在全量部署前先部署金絲雀實(shí)例,能夠在驗(yàn)證新版本,驗(yàn)證完發(fā)布到全網(wǎng)即可。
但要在生產(chǎn)系統(tǒng)的實(shí)現(xiàn)金絲雀發(fā)布,至少還需要解決幾個(gè)問題:
- 部署金絲雀實(shí)例后需要將特定的請(qǐng)求流量引入金絲雀實(shí)例
- 觀測(cè)到金絲雀實(shí)例的運(yùn)行狀況并與原有實(shí)例的運(yùn)行狀況進(jìn)行對(duì)比
- 當(dāng)金絲雀發(fā)布不符合預(yù)期時(shí)可回滾整個(gè)發(fā)布過程
可見,“完整”的金絲雀發(fā)布所需要的能力并不只是應(yīng)用托管能力,還需要配合可觀測(cè)性和微服務(wù)治理一起協(xié)作完成,因此單純用某個(gè)工具或者用簡(jiǎn)單的Deployment可能很難解決這些問題。
EDAS也提供了金絲雀發(fā)布功能,EDAS的金絲雀發(fā)布支持SpringCloud和Dubbo兩種開發(fā)框架的流量調(diào)度,用戶只需要上傳Jar包,不需要對(duì)應(yīng)用做任何修改,開箱即用。關(guān)于EDAS金絲雀發(fā)布的使用這里不做詳細(xì)介紹,可以參考這篇文章
https://mp.weixin.qq.com/s?__biz=MzU4NzU0MDIzOQ==&mid=2247489003&idx=3&sn=a7827438814bec3175743d77e3cb4aab&chksm=fdeb278bca9cae9dc08912e7b23669b67bb8145f709d155e84f0d6b63fd278df5b954c3b41f9&token=209782105&lang=zh_CN#rd
這里簡(jiǎn)要列出了EDAS金絲雀發(fā)布的重要步驟和參與的組件,可看到一些云產(chǎn)品參與了金絲雀發(fā)布的過程,其中ACM用來推送灰度流量規(guī)則,ARMS負(fù)責(zé)采集并呈現(xiàn)監(jiān)控?cái)?shù)據(jù),運(yùn)行于用戶側(cè)的Agent則保證了程序可在用戶完全無感知下,按照灰度的規(guī)則進(jìn)行服務(wù)注冊(cè)和數(shù)據(jù)上報(bào):
日志管理
另一個(gè)例子是日志管理,應(yīng)用日志對(duì)線上運(yùn)維有著非比尋常的意義,日志查詢也一直是EDAS使用頻度最高的功能之一,對(duì)于開發(fā)者來說完備的日志管理功能就是剛需,EDAS將日志管理的功能通過“日志中心”提供給開發(fā)者來使用,其中:
? 實(shí)時(shí)日志功能可以讓開發(fā)者在控制臺(tái)查看到指定容器在前臺(tái)產(chǎn)生的輸出。
? 日志目錄功能可以方便用戶收藏應(yīng)用需要關(guān)注的特定日志項(xiàng),并提供了即席查詢指定的日志文件內(nèi)容,和檢索特定模式的功能。
實(shí)時(shí)日志和日志目錄功能主要用于滿足常用的即席查詢需求,但全面的日志管理功能并不僅僅是查詢,還包括匯聚,轉(zhuǎn)儲(chǔ),統(tǒng)計(jì)分析,監(jiān)控告警等很多場(chǎng)景,對(duì)于這些需求,阿里云的日志服務(wù)(SLS)提供了完善的解決方案,SLS完全可以勝任海量日志數(shù)據(jù)存儲(chǔ),檢索,復(fù)雜統(tǒng)計(jì)分析,多維度數(shù)據(jù)可視化等場(chǎng)景;而且與流行的開源日志系統(tǒng)(如EFK)相比,SLS在日志管理的功能豐富度,效率,穩(wěn)定性,成本等方面也均有過之而無不及。
所以,EDAS與阿里云日志服務(wù)(SLS)做了很好的集成,開發(fā)者只需要在日志中心配置待采集的日志項(xiàng),即可將相應(yīng)的日志轉(zhuǎn)儲(chǔ)到SLS,完全免去了配置logtail客戶端的操作。EDAS + SLS的組合對(duì)開發(fā)者來說是一對(duì)“黃金搭檔”,將應(yīng)用與數(shù)據(jù)無縫的銜接起來,帶來的不僅是流暢的用戶體驗(yàn),而且是直接將產(chǎn)生的數(shù)據(jù)服務(wù)于數(shù)據(jù)化運(yùn)營(yíng)或智能運(yùn)維決策的能力,這對(duì)產(chǎn)品的帶來的價(jià)值是不言而喻的。
下圖描述了EDAS日志管理功能的設(shè)計(jì)思路:
開發(fā)者工具
軟件開發(fā)是軟件生命周期的重要環(huán)節(jié),開發(fā)與運(yùn)維是密不可分的,開發(fā)的質(zhì)量決定了現(xiàn)網(wǎng)故障數(shù)量和維護(hù)工作的投入,開發(fā)的效率影響著版本迭代速度和問題修復(fù)速度。EDAS在提升軟件開發(fā)者維護(hù)效率的同時(shí),也同樣關(guān)注開發(fā)者軟件在生產(chǎn)階段的體驗(yàn),從提升開發(fā)體驗(yàn)中獲取更高的生產(chǎn)力。
EDAS提供了豐富的開發(fā)者工具集來幫助開發(fā)者更高效的完成測(cè)試和部署,目前全面支持了EDAS云原生應(yīng)用,工具如下表:
| OpenAPI | 使用編程的方式來使用EDAS功能 | https://help.aliyun.com/document_detail/62038.html |
| SDK | 同OpenAPI,支持Java,Python | https://help.aliyun.com/document_detail/62123.htmlhttps://help.aliyun.com/document_detail/123354.html |
| CLI | 用命令行的方式使用EDAS功能 | https://help.aliyun.com/document_detail/104440.html |
| Maven Plugin | 快速將Java代碼部署到EDAS上 | https://help.aliyun.com/document_detail/150674.html |
| AlibabaCloudToolkit | 快速部署代碼和端云互聯(lián)測(cè)試等 | https://help.aliyun.com/document_detail/150670.html |
| Terraform Provider | 快速創(chuàng)建EDAS應(yīng)用和依賴的資源 | https://www.terraform.io/docs/providers/alicloud/d/edas_applications.html |
開啟云原生時(shí)代
EDAS努力為開發(fā)者提供“更好”的云原生技術(shù),一方面致力于讓云原生從少數(shù)人能玩轉(zhuǎn)的“陽春白雪”變成真正成熟易用的技術(shù),釋放云原生的價(jià)值;另一方面,通過集成阿里云的各種優(yōu)勢(shì)技術(shù)來增強(qiáng)云原生下aPaaS平臺(tái)的能力,提供更強(qiáng)大和穩(wěn)定的應(yīng)用托管服務(wù)。
但如果這些能力需要用戶付出高昂的改造成本才能獲取,那就是南轅北轍了,所以,使用EDAS必須要比直接使用K8s更為簡(jiǎn)易,EDAS確實(shí)也做到了。對(duì)于使用常見的Java框架如SpringCloud,Dubbo開發(fā)的應(yīng)用,EDAS都提供了很方便的接入途徑,多數(shù)時(shí)候并不需要修改軟件或者開發(fā)流程即可順利使用,在EDAS創(chuàng)建應(yīng)用并部署對(duì)應(yīng)的程序包即可;對(duì)于使用鏡像的應(yīng)用,EDAS也可以提供正常的功能支持。
這里舉一些例子看看各種不同的應(yīng)用如何輕松的接入EDAS:
當(dāng)下云原生已經(jīng)蔚然成蔭,未來已來,是否使用云原生技術(shù)不再是問題。如果您渴望治理軟件的紛亂繞雜,但對(duì)于駕馭云原生沒有十足信心,對(duì)后期的維護(hù)成本倍感壓力,不妨把這些難題都交給EDAS,您只需要關(guān)注好業(yè)務(wù)自身,輕裝上陣,快速進(jìn)入云原生時(shí)代。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的神结合!一招玩转K8s和微服务治理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 佰腾科技:专利大数据的云上裂变之路
- 下一篇: 阿里每天究竟要抵御多少攻击