Kubernetes 已經(jīng)成為業(yè)界領(lǐng)先的容器編排環(huán)境,這極大地推動(dòng)了 Kubernetes 服務(wù)在全球各大主要公有云平臺(tái)上的顯著增長(zhǎng)。但是,在 Kubernetes 的核心資源中諸如服務(wù)、部署等,從整個(gè)應(yīng)用的角度來(lái)看,卻像是呈現(xiàn)出應(yīng)用的離散狀態(tài)。此外,Helm chart 這樣的對(duì)象,雖然看起來(lái)像是可以部署的應(yīng)用,但真正部署之后,卻缺少運(yùn)行應(yīng)用所需的應(yīng)用中心模型。這就需要有一個(gè)定義清晰、完整一致的模型,來(lái)表達(dá)整個(gè)應(yīng)用,而不僅僅是它的模板或者是組件。正是出于這樣的考慮,微軟與阿里云基于 Open Web 基金會(huì)展開(kāi)合作,推出了開(kāi)放應(yīng)用模型(OAM)。
什么是 Open Application Model?
OAM (Open Application Model) 是一個(gè)專(zhuān)注于描述應(yīng)用的標(biāo)準(zhǔn)規(guī)范。有了這個(gè)規(guī)范,應(yīng)用描述就可以徹底與基礎(chǔ)設(shè)施部署和管理應(yīng)用的細(xì)節(jié)分開(kāi)。這種關(guān)注點(diǎn)分離(Seperation of Conerns)的設(shè)計(jì)好處是非常明顯的。 舉個(gè)例子,在實(shí)際生產(chǎn)環(huán)境中,無(wú)論是 Ingress , CNI,還是 Service Mesh,這些表面看起來(lái)一致的運(yùn)維概念,在不同的 Kubernetes 集群中可謂千差萬(wàn)別。 通過(guò)將應(yīng)用定義與集群的運(yùn)維能力分離,我們就可以讓?xiě)?yīng)用開(kāi)發(fā)者更專(zhuān)注于應(yīng)用本身的價(jià)值點(diǎn),而不是“應(yīng)用部署在哪”這樣的運(yùn)維細(xì)節(jié)。 此外,關(guān)注點(diǎn)的分離讓平臺(tái)架構(gòu)師可以輕松地把平臺(tái)的運(yùn)維能力封裝成可被復(fù)用的組件,從而讓?xiě)?yīng)用開(kāi)發(fā)者能夠?qū)W⒂趯⑦@些運(yùn)維組件與代碼進(jìn)行集成,從而快速、輕松地構(gòu)建可信賴(lài)的應(yīng)用。 Open Application Model 的目標(biāo)是讓簡(jiǎn)單的應(yīng)用管理變得更加輕松,讓復(fù)雜的應(yīng)用交付變得更加可控。
應(yīng)用組件(Components)
在 OAM 中,“應(yīng)用”是由多個(gè)概念共同組合而成的。 第一個(gè)概念是:應(yīng)用組件(Components),它是整個(gè)應(yīng)用的重要組成部分。 所以說(shuō),應(yīng)用組件既可以包括應(yīng)用運(yùn)行所依賴(lài)的服務(wù):比如 MySQL 數(shù)據(jù)庫(kù),也包括應(yīng)用服務(wù)本身:比如擁有多個(gè)副本的 PHP 服務(wù)器。 開(kāi)發(fā)者可以把他們寫(xiě)的代碼“打包”成一個(gè)應(yīng)用組件,然后編寫(xiě)配置文件來(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)的解耦。
應(yīng)用部署配置文件
而為了將這些應(yīng)用組件描述變成一個(gè)真正運(yùn)行起來(lái)的應(yīng)用,應(yīng)用運(yùn)維人員會(huì)通過(guò)一個(gè)專(zhuān)門(mén)的、包含了所有應(yīng)用組件信息的部署配置文件來(lái)實(shí)例化這個(gè)待運(yùn)行的應(yīng)用。 這個(gè)配置文件本身也是 OAM 規(guī)范中的一個(gè)聲明式 API,用來(lái)讓?xiě)?yīng)用運(yùn)維人員能夠根據(jù)開(kāi)發(fā)者或者平臺(tái)提交的應(yīng)用描述,實(shí)例化出對(duì)應(yīng)的、真正運(yùn)行起來(lái)的應(yīng)用。
應(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è)專(zhuān)門(mén)的硬件。這也就意味著針對(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)滿(mǎn)足它們各自的運(yùn)維要求(例如:不同環(huán)境里 Ingress 實(shí)現(xiàn)在滿(mǎn)足合規(guī)性和安全性上的差異)
OAM:平臺(tái)無(wú)關(guān)、高可擴(kuò)展的應(yīng)用描述能力
與 PaaS 應(yīng)用模型相比,OAM 有很多獨(dú)有的特點(diǎn),其中最重要一點(diǎn)是:平臺(tái)無(wú)關(guān)性。雖然我們目前發(fā)布的 OAM 實(shí)現(xiàn)(rudr)是基于 Kubernetes 的,但 Open Application Model 與 Kubernetes 并沒(méi)有強(qiáng)耦合。實(shí)際上 ,OAM 可以實(shí)現(xiàn)到任意平臺(tái)或運(yùn)行環(huán)境之上,這當(dāng)然也包括邊緣計(jì)算與物聯(lián)網(wǎng)的場(chǎng)景。我們也認(rèn)同 Kubernetes 在很多運(yùn)行環(huán)境中可能并不是最好的選擇,或者是像 Serverless 這類(lèi)用戶(hù)并不需要關(guān)心基礎(chǔ)設(shè)施復(fù)雜性的運(yùn)行環(huán)境。在這些場(chǎng)景下,OAM 都可以提供完全一致的應(yīng)用管理體驗(yàn)。
第二個(gè)重要的特點(diǎn)是,OAM 的 specification (OAM 規(guī)范) 在設(shè)計(jì)上天然是可擴(kuò)展的。OAM 不像 PaaS 那樣自成封閉體系,也不會(huì)通過(guò)某種獨(dú)有的應(yīng)用管理環(huán)境來(lái)屏蔽掉底層平臺(tái)的特點(diǎn)(比如:在 Kubernetes 之上“蓋一個(gè)大帽子”)。 相反,OAM 使平臺(tái)層可以通過(guò)應(yīng)用特征系統(tǒng) (Trait system)來(lái)體現(xiàn)平臺(tái)的特性和差異性。也就是說(shuō),只要不同的平臺(tái)都能夠提供應(yīng)用所需要的某些應(yīng)用特征 (Trait),開(kāi)發(fā)人員就能輕松地研發(fā)跨平臺(tái)的應(yīng)用。類(lèi)似地,哪怕最底層的硬件提供商,也可以通過(guò)應(yīng)用特征系統(tǒng)來(lái)體現(xiàn)其平臺(tái)特性。 OAM 的整體設(shè)計(jì),就是為了避免在平臺(tái)可移植性中經(jīng)常發(fā)生的“最小公分母”鎖定問(wèn)題。相反,OAM 不但提供了可移植性的能力,它還確保了每個(gè)平臺(tái)有能力去透出獨(dú)有的特性和用途。 OAM 讓開(kāi)發(fā)人員可以自由地針對(duì)不同平臺(tái)以標(biāo)準(zhǔn)方式在可移植性和差異化功能之間取得平衡。