社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低
作者 | 徐運(yùn)元,杭州諧云科技合伙人及資深架構(gòu)師,云計(jì)算行業(yè)和 Kubernetes 生態(tài)資深從業(yè)者
**導(dǎo)讀:**什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基礎(chǔ)產(chǎn)品事業(yè)部總經(jīng)理蔣江偉(花名:小邪)在 QCon 上海 2019 重磅宣布,阿里云與微軟聯(lián)合推出開(kāi)放應(yīng)用模型 Open Application Model (OAM)開(kāi)源項(xiàng)目。
OAM 的核心關(guān)注點(diǎn)
- **關(guān)注點(diǎn)分離:**開(kāi)發(fā)者關(guān)注應(yīng)用本身,運(yùn)維人員關(guān)注模塊化運(yùn)維能力,讓應(yīng)用管理變得更輕松、應(yīng)用交付變得更可控;
- **平臺(tái)無(wú)關(guān)與高可擴(kuò)展:**應(yīng)用定義與平臺(tái)層實(shí)現(xiàn)解耦,應(yīng)用描述支持任意擴(kuò)展和跨環(huán)境實(shí)現(xiàn);
- **模塊化應(yīng)用運(yùn)維特征:**可以自由組合和支持模塊化實(shí)現(xiàn)的運(yùn)維特征描述。
OAM 的核心模塊
1. 應(yīng)用組件(Components)
在 OAM 中,“應(yīng)用”是由多個(gè)概念共同組合而成。第一個(gè)概念是:應(yīng)用組件(Components),它是整個(gè)應(yīng)用的重要組成部分。應(yīng)用組件既可以包括應(yīng)用運(yùn)行所依賴的服務(wù):比如 MySQL 數(shù)據(jù)庫(kù),也包括應(yīng)用服務(wù)本身:比如擁有多個(gè)副本的 PHP 服務(wù)器。開(kāi)發(fā)者可以把他們寫的代碼“打包”成一個(gè)應(yīng)用組件,然后編寫配置文件來(lái)描述該組件與其他服務(wù)之間的關(guān)系。
應(yīng)用組件的概念讓平臺(tái)架構(gòu)師等能夠?qū)?yīng)用分解成一個(gè)個(gè)可被復(fù)用的模塊,這種模塊化封裝應(yīng)用組成部分的思想,代表了一種構(gòu)建安全、高可擴(kuò)展性應(yīng)用的最佳實(shí)踐:通過(guò)一個(gè)完全分布式的架構(gòu)模型,實(shí)現(xiàn)了應(yīng)用組件描述和實(shí)現(xiàn)的解耦。
2. 應(yīng)用部署配置文件(Application Configuration)
為了將這些應(yīng)用組件描述變成一個(gè)真正運(yùn)行起來(lái)的應(yīng)用,應(yīng)用運(yùn)維人員會(huì)通過(guò)一個(gè)專門的、包含了所有應(yīng)用組件信息的部署配置文件來(lái)實(shí)例化這個(gè)待運(yùn)行的應(yīng)用。這個(gè)配置文件本身也是 OAM 規(guī)范中的一個(gè)聲明式 API,用來(lái)讓應(yīng)用運(yùn)維人員能夠根據(jù)開(kāi)發(fā)者或者平臺(tái)提交的應(yīng)用描述,實(shí)例化出對(duì)應(yīng)的、真正運(yùn)行起來(lái)的應(yīng)用。
3. 應(yīng)用運(yùn)維特征(Traits)
最后一個(gè)概念是一組應(yīng)用運(yùn)維特征(Traits),它們描述了應(yīng)用在具體部署環(huán)境中的運(yùn)維特征,比如應(yīng)用的水平擴(kuò)展的策略和 Ingress 規(guī)則,這些特征對(duì)于應(yīng)用的運(yùn)維來(lái)說(shuō)非常重要,但它們?cè)诓煌牟渴瓠h(huán)境里卻往往有著截然不同的實(shí)現(xiàn)方式。 舉一個(gè)簡(jiǎn)單的例子,同樣是 Ingress,它在公有云上和本地?cái)?shù)據(jù)中心的實(shí)現(xiàn)可能完全不同:前者一般是 SLB 這樣的云服務(wù),而后者則可能是一個(gè)專門的硬件。這也就意味著針對(duì)這兩個(gè)環(huán)境的 Ingress 運(yùn)維工作,將會(huì)有天壤之別。 但與此同時(shí),無(wú)論是在哪個(gè)環(huán)境里,這個(gè) Ingress 規(guī)則對(duì)于應(yīng)用開(kāi)發(fā)人員來(lái)說(shuō),可能是完全相同的。
應(yīng)用特征的設(shè)計(jì),讓這種關(guān)注點(diǎn)分離成為可能:只要這兩個(gè)環(huán)境在 OAM 模型下提供了對(duì) Ingress 這個(gè)應(yīng)用運(yùn)維特征的實(shí)現(xiàn),那么應(yīng)用就可以使用統(tǒng)一的 Ingress 規(guī)則描述,無(wú)差別地在這兩個(gè)地方運(yùn)行起來(lái)。與此同時(shí),這兩個(gè)環(huán)境的基礎(chǔ)設(shè)施供應(yīng)商可以繼續(xù)通過(guò)配置這些應(yīng)用特征的實(shí)現(xiàn),來(lái)滿足它們各自的運(yùn)維要求(例如:不同環(huán)境里 Ingress 實(shí)現(xiàn)在滿足合規(guī)性和安全性上的差異)。
一個(gè)基于 OAM 的可視化實(shí)現(xiàn)介紹
目前該平臺(tái)主要基于 OAM 的 V1 alpha1 版本實(shí)現(xiàn),并且對(duì)于 OAM 的核心理念進(jìn)行的抽象和封裝,以更符合用戶的使用習(xí)慣。在本文介紹的可視化部分背后,是完整的 OAM 格式的 yaml 文件。可視化 OAM 平臺(tái)主要包含兩大核心功能:
1. 運(yùn)維特征模型
運(yùn)維特征模型主要是針對(duì) OAM 的 Traits 的具體實(shí)例化,讓用戶可以把復(fù)雜的一些運(yùn)維特性可以直接以插拔的形式直接讓應(yīng)用發(fā)布者去使用。目前平臺(tái)已經(jīng)封裝了包含服務(wù)發(fā)布、日志搜集、自動(dòng)伸縮、存儲(chǔ)掛載等 8 個(gè)運(yùn)維特征的封裝。
圖 1 運(yùn)維特征模型倉(cāng)庫(kù)
2. OAM 應(yīng)用編排
OAM 應(yīng)用編排功能將 OAM 的應(yīng)用發(fā)布全流程進(jìn)行了可視化的實(shí)現(xiàn),將應(yīng)用組件添加、配置文件修改以及運(yùn)維特征添加等 OAM 的核心功能進(jìn)行了抽象和封裝。OAM 應(yīng)用編排目前包含以下核心功能:
- 組件編排: 可視化添加平臺(tái)的組件并且進(jìn)行組件的參數(shù)設(shè)置;
- **運(yùn)行特征編排:**在添加的平臺(tái)組件基礎(chǔ)上進(jìn)行運(yùn)維特征的添加和編排(也為后續(xù)開(kāi)發(fā)、運(yùn)維關(guān)注點(diǎn)分離做準(zhǔn)備);
- **OAM 版本管理:**平臺(tái)會(huì)保存所有的 OAM 發(fā)布版本,并且提供升級(jí)和回滾功能。
圖 2 OAM 應(yīng)用編排主界面
接下來(lái),我們會(huì)以一個(gè)典型應(yīng)用(nginx+tomcat+redis)的部署來(lái)全面解析,如何在平臺(tái)上進(jìn)行 OAM 的可視化發(fā)布。
前置條件
運(yùn)維特征(Traints)應(yīng)用模型已安裝,在界面上,可以快速查看有哪些運(yùn)維特征應(yīng)用模型,以及它們的運(yùn)行狀態(tài)。當(dāng)前只支持系統(tǒng)定義的運(yùn)維特征,后續(xù)會(huì)開(kāi)發(fā)自定義的運(yùn)維特征的生命周期管理。讓用戶可以編寫自己的運(yùn)維特征并且安裝到平臺(tái)進(jìn)行使用。
OAM 應(yīng)用創(chuàng)建流程
OAM 應(yīng)用基本發(fā)布流程:應(yīng)用創(chuàng)建->新增組件->應(yīng)用編排->保存版本->發(fā)布應(yīng)用。
-
**創(chuàng)建應(yīng)用: **點(diǎn)擊應(yīng)用->OAM 應(yīng)用菜單, 點(diǎn)擊【創(chuàng)建應(yīng)用】按鈕,輸入必填項(xiàng);
-
**添加組件: **點(diǎn)擊【新增組件】按鈕,設(shè)置工作負(fù)載類型,容器配置等;
選擇想要?jiǎng)?chuàng)建的工作負(fù)載類型,目前已經(jīng)將 Server、Singleton Server、Task、Singleton Task、Worker 以及 Singleton Worker 等六種核心的工作負(fù)載進(jìn)行了封裝,用戶只需要在下拉框中勾選自己想要?jiǎng)?chuàng)建的負(fù)載類型即可。
在選擇完負(fù)載類型之后,用戶可以以可視化的形式去選擇想要發(fā)布的鏡像以及容器的基本配置參數(shù)。同時(shí),目前也支持基于多個(gè)容器的編排發(fā)布。
- 根據(jù)我們的需求,我們依次添加 tomcat、redis、mysql 三個(gè)組件,在界面上就可以看到組件的狀態(tài),同時(shí)點(diǎn)擊“詳情”可以看到對(duì)應(yīng)的 Kubernetes 資源信息;
查看組件的詳細(xì)信息。
- **應(yīng)用編排:**在創(chuàng)建完需要部署的組件之后,我們的 OAM 應(yīng)用已經(jīng)具備了開(kāi)發(fā)的屬性。
之后我們需要根據(jù)需求給每一個(gè)組件添加運(yùn)維特征:點(diǎn)擊進(jìn)入應(yīng)用編排界面,你可以看到剛才添加的組件已經(jīng)展示在畫布之上;在畫布上點(diǎn)擊單個(gè)組件,可以看到目前適合該組件的運(yùn)維特征,勾選你所需要的運(yùn)維特征即可快速添加;在添加完運(yùn)維特征之后,會(huì)在右邊欄彈出運(yùn)維特征的配置參數(shù),配置保存之后這些運(yùn)維特征即可生效;
- 在添加完所有組件的運(yùn)維特征之后,我們就可以看到一個(gè)完整的編排完的 OAM 應(yīng)用了。在 OAM 的 V2 版本,我們同時(shí)會(huì)再增加應(yīng)用的依賴關(guān)系,用戶可以通過(guò)拖拽和連線來(lái)實(shí)現(xiàn)應(yīng)用之間的依賴編排;
- **保存版本:**最后,我們可以點(diǎn)擊【保存當(dāng)前內(nèi)容為版本】按鈕,輸入版本號(hào),點(diǎn)擊【確定】;
- **發(fā)布應(yīng)用:**點(diǎn)擊【發(fā)布】按鈕,發(fā)布應(yīng)用
發(fā)布應(yīng)用后,組件狀態(tài)顯示‘已實(shí)例化’。應(yīng)用實(shí)例狀態(tài)顯示“健康”。
點(diǎn)擊事件 tab 頁(yè),顯示事件。
用戶可以快速查看已經(jīng)創(chuàng)建的 ingress,并且進(jìn)行訪問(wèn)。
- 用戶可以通過(guò)修改 traints 信息,快速對(duì)當(dāng)前的應(yīng)用進(jìn)行修改和升級(jí)。
點(diǎn)擊進(jìn)入應(yīng)用編排界面,并且編輯 tomcat 實(shí)例數(shù)為 4。
將編輯后的版本,保存為當(dāng)前版本則會(huì)直接講修改的配置更新到當(dāng)前實(shí)例。如果選擇保存為新版本,則會(huì)將當(dāng)前配置修改保存為模板,等待發(fā)布。我們將此修改保存為新版本。
點(diǎn)擊更新為此版本,進(jìn)行剛才修改的配置發(fā)布。發(fā)布完成之后,我們可以看到有兩個(gè)版本的 OAM 應(yīng)用模板。
查看詳情,確認(rèn) tomcat 實(shí)例數(shù)已經(jīng)變更為 4,但是由于我們同時(shí)設(shè)置了自動(dòng)擴(kuò)縮容的實(shí)例為 3,因此在擴(kuò)容之后又迅速變回實(shí)例 3。
至此,一個(gè)完整的部署和更新 OAM 應(yīng)用的可視化流程就演示完了。
總結(jié)
如今 OAM Spec 已經(jīng)迭代到了 v1alpha2 版本,新版本在堅(jiān)持 OAM Spec 平臺(tái)無(wú)關(guān)的基礎(chǔ)上,整體變得更 Kubernetes 友好化,很大程度上平衡了標(biāo)準(zhǔn)與可擴(kuò)展性,更好的支持已有的 CRD。也就是說(shuō),如果你已經(jīng)編寫了現(xiàn)成的 CRD Operator,可以平滑的接入到 OAM 體系中,并且享受到 OAM 模型的紅利。
更詳細(xì)的新版本介紹可以閱讀《OAM v1alpha2 新版發(fā)布:平衡標(biāo)準(zhǔn)與可擴(kuò)展性,靈活接入 CRD operator》。
該可視化平臺(tái)也已經(jīng)在全面升級(jí)到 v1alpha2 的過(guò)程中,新版的支持可以更好的允許用戶編寫插件擴(kuò)充平臺(tái)的功能。
該平臺(tái)來(lái)自于阿里云戰(zhàn)略合作伙伴杭州諧云科技,該平臺(tái)基于 OAM 實(shí)現(xiàn)的開(kāi)源版本也已經(jīng)在路上,大家敬請(qǐng)期待。
- OAM 平臺(tái)試用網(wǎng)址:http://139.196.197.117:30088/ 用戶名/密碼: admin/Ab123456
- Demo 中所有的 yaml 文件請(qǐng)?jiān)L問(wèn) github 地址查看: https://github.com/harmonycloud/oam-simple-demo
目前,OAM 規(guī)范和模型實(shí)際已解決許多現(xiàn)有問(wèn)題,但它的路程才剛剛開(kāi)始。OAM 是一個(gè)中立的開(kāi)源項(xiàng)目,我們歡迎更多的人參與其中,共同定義云原生應(yīng)用交付的未來(lái)。參與方式:
- 通過(guò) Gitter 直接參與討論
- OAM 開(kāi)源實(shí)現(xiàn)地址
- 點(diǎn)擊 star 一下
杭州諧云科技有限公司成立于 2016 年 7 月,公司核心團(tuán)隊(duì)來(lái)自于浙江大學(xué) SEL 實(shí)驗(yàn)室,諧云團(tuán)隊(duì)在云計(jì)算及相關(guān)領(lǐng)域具備深厚的技術(shù)積淀,在全球頂級(jí)開(kāi)源社區(qū) Docker、Kubernetes、Cloud Foundry 等項(xiàng)目貢獻(xiàn)累計(jì)超過(guò) 200 萬(wàn)行代碼,排名全球第四,國(guó)內(nèi)第一。團(tuán)隊(duì)曾著書中國(guó)第一本深度解析容器云的專業(yè)書籍《Docker 容器與容器云》,是國(guó)內(nèi)為數(shù)不多掌握底層核心技術(shù)的容器云提供商。建設(shè)了目前中國(guó)最大的容器集群落地案例,支撐著國(guó)內(nèi)最大的互聯(lián)網(wǎng)電視云。
課程推薦
為了更多開(kāi)發(fā)者能夠享受到 Serverless 帶來(lái)的紅利,這一次,我們集結(jié)了 10+ 位阿里巴巴 Serverless 領(lǐng)域技術(shù)專家,打造出最適合開(kāi)發(fā)者入門的 Serverless 公開(kāi)課,讓你即學(xué)即用,輕松擁抱云計(jì)算的新范式——Serverless。
點(diǎn)擊即可免費(fèi)觀看課程:https://developer.aliyun.com/learning/roadmap/serverless
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的公眾號(hào)。”
總結(jié)
以上是生活随笔為你收集整理的社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开发函数计算的正确姿势——OCR 服务
- 下一篇: Istio 网关之南北向流量管理(内含服