云計(jì)算容器服務(wù)該何去何從
容器技術(shù)最近很火,各家項(xiàng)目紛紛提出自己的支持方案,比如 OpenStack、CF、Mesos,以及一堆本身就基于容器的平臺(tái)方案,更是跟容器技術(shù)脫不開(kāi)關(guān)系。
這也直接導(dǎo)致了曖昧已久的 IaaS 和 PaaS 開(kāi)始正面的跨界沖突。
在 IaaS 看來(lái),做 PaaS 無(wú)非就是提供幾個(gè)應(yīng)用模板嘛,原來(lái)虛機(jī)不好做,現(xiàn)在用 Docker,瞬間給你把服務(wù)整起來(lái)。更別提還有最近出來(lái)攪局的 hyper,虛機(jī)要跟容器比性能。
而在 PaaS 看來(lái),你 IaaS 就該老老實(shí)實(shí)地做底層物理資源給抽象出虛擬資源的事情。原來(lái)都是虛機(jī)的時(shí)候,感覺(jué)好復(fù)雜,我們搞軟件的人確實(shí)不懂?,F(xiàn)在有了一堆基于 Docker 的容器平臺(tái),往上就都是我做軟件的人可以做的事情了,所以以后其實(shí)可以不再?gòu)?qiáng)調(diào) IaaS 了。
這些討論直接導(dǎo)致現(xiàn)在的云計(jì)算技術(shù)發(fā)展到了一個(gè)很關(guān)鍵的節(jié)骨眼上,將決定未來(lái)至少十年內(nèi)云計(jì)算產(chǎn)業(yè)的形態(tài)。
當(dāng)前狀況
姑且放下這些爭(zhēng)論,我們來(lái)看一下 IaaS 領(lǐng)域的 Top 開(kāi)源項(xiàng)目 OpenStack 現(xiàn)在是怎么對(duì)待容器的。
目前有三種方案:
Nova-Docker:把容器作為虛機(jī)管起來(lái)?;旧掀渌M件都不需要?jiǎng)印?**的問(wèn)題就是容器畢竟不是虛機(jī),比如需要提供一些額外的參數(shù)支持啦,需要引入組的概念啦,需要性能的優(yōu)化啦。
Heat Docker Driver:用 Heat 來(lái)管容器。Heat 大家都知道,是個(gè)十分靈活且強(qiáng)大的解釋引擎,理論上 Docker 需要的支持它都能有。***的問(wèn)題是 Heat 畢竟是個(gè)解釋引擎,它本質(zhì)上還是要基于其它服務(wù)提供的 API。由于不是個(gè)運(yùn)維引擎,導(dǎo)致運(yùn)行時(shí)的管理沒(méi)法保障,比如自動(dòng)的資源調(diào)度啊,網(wǎng)絡(luò)功能啊,等等。如果這些都做了,那就等于在更高一層上重復(fù)發(fā)明輪子了。
Magnum:玩容器的人看問(wèn)題基本上都是從應(yīng)用層往上開(kāi)始考慮。一幫人跑去 Nova 項(xiàng)目談,應(yīng)該怎么支持基于容器的 DevOps 啊,應(yīng)用模板啊,Nova 組一幫做系統(tǒng)的人就傻了,這事我們咋能干,這分明是 PaaS 該做的事情。但架不住大家都覺(jué)得 Docker 很火啊,我們肯定還是要玩點(diǎn)花樣的,于是一個(gè)新的項(xiàng)目誕生了。但玩應(yīng)用的人畢竟不懂系統(tǒng),于是調(diào)研了下,現(xiàn)在能管理 Docker 的開(kāi)源方案還真有幾個(gè),比如 Swarm 和 Kubernetes。太好了,那么,怎么把 Swarm 和 Kubernetes 這樣的 PaaS 平臺(tái)給集成到 OpenStack 這樣的 IaaS 平臺(tái)上呢?這個(gè)聽(tīng)起來(lái)好像也不懂唉,有人又想起 Heat 來(lái)了,一拍腦袋,可以先拿 Heat 來(lái)裝一套啊。每次需要的時(shí)候就調(diào)個(gè) Heat 命令,動(dòng)態(tài)的裝一套。所有問(wèn)題看起來(lái)都解決了,皆大歡喜啊,真是皆大歡喜!
思考云計(jì)算
某位名人說(shuō)過(guò),之所以能看得遠(yuǎn),是因?yàn)檎驹诹饲叭说募绨蛏稀?/p>
讓我們拋開(kāi)系統(tǒng)和應(yīng)用之爭(zhēng),姑且也膽大地站在前人的肩膀上來(lái)重新發(fā)明輪子。
還是要忍不住重復(fù),信息技術(shù)的領(lǐng)域離不開(kāi)分層和抽象。在不同的時(shí)代和位置進(jìn)行分層和抽象,誕生了小型機(jī),誕生了處理器,誕生了編程語(yǔ)言,誕生了 Web 服務(wù),誕生了云計(jì)算……
拋開(kāi) IaaS,拋開(kāi) PaaS,云計(jì)算到底要提供啥?這個(gè)問(wèn)題毫無(wú)疑問(wèn),是便捷服務(wù)。 于是,用戶需要操作系統(tǒng),可以直接給你一個(gè);用戶需要一個(gè)運(yùn)行環(huán)境,可以直接給你一個(gè);用戶需要一套軟件,也可以直接給你一個(gè);用戶需要一套方案,這個(gè)目前還沒(méi)法直接給你一個(gè),屬于外包公司的業(yè)務(wù)。:)
那么,對(duì)于云平臺(tái)的設(shè)計(jì)者來(lái)說(shuō),就是要提供這些不同層次的服務(wù)給用戶,這才有了所謂的 IaaS 和 PaaS。所以,要記住,各種 XaaS 是呈獻(xiàn)給用戶的服務(wù)層次的不同,根本不是設(shè)計(jì)層次和技術(shù)方案的不同。
就好比你買(mǎi)了一個(gè)手機(jī),可以玩游戲,也可以打電話。游戲和電話是手機(jī)提供給你的不同服務(wù)形態(tài)而已,并非說(shuō)游戲是一種特殊的手機(jī),電話是另外一種特殊的手機(jī)。
OK,那么,下面的問(wèn)題就是討論為了滿足用戶的這些需求,在設(shè)計(jì)上該如何分層。前人的智慧是毫無(wú)疑問(wèn)的,總結(jié)出了計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)這三個(gè)根本的基礎(chǔ)業(yè)務(wù)。其中計(jì)算又是最核心和最直接的。
我們來(lái)看直接面向用戶的計(jì)算業(yè)務(wù)。數(shù)據(jù)中心里面放著的都是物理機(jī)器,物理機(jī)器上可以裝操作系統(tǒng),操作系統(tǒng)上可以裝各種軟件,可以運(yùn)行虛擬機(jī),可以運(yùn)行容器。無(wú)論物理機(jī)、虛擬機(jī)、容器,都是屬于計(jì)算資源。統(tǒng)統(tǒng)都應(yīng)該用云方案給實(shí)現(xiàn)供應(yīng)出來(lái)。
如果說(shuō) IDC 是讓用戶可以拿物理機(jī)作為計(jì)算資源載體,那么現(xiàn)在的云計(jì)算是更進(jìn)一步,讓用戶可以直接忽略計(jì)算資源的實(shí)際載體,無(wú)論是操作系統(tǒng)還是應(yīng)用,直接提供給你即可,無(wú)需關(guān)心具體的載體。
總之一句話,云計(jì)算就是要方便提供計(jì)算資源!
問(wèn)題與方向
Magnum 目前被認(rèn)為 OpenStack 里面最有活力的容器項(xiàng)目,但是很可惜,一開(kāi)始的路子就是偏的。
Magnum 的定位是提供一套 OpenStack API,底下可以兼容/依賴多種第三方的容器管理平臺(tái)。OpenStack 本來(lái)就是要做一套資源管理平臺(tái),現(xiàn)在是用別人的,意味著這跟 OpenStack 其實(shí)關(guān)系不大。但是如果拋開(kāi) OpenStack,上面封裝的一套 OpenStack API 又沒(méi)有了意義。第三方的管理平臺(tái)都有自己現(xiàn)成的 API。
真正的 Container as a Service,其實(shí)應(yīng)該是在 OpenStack 中實(shí)現(xiàn)一套容器平臺(tái),而不是在 OpenStack 中安裝了別人的一套平臺(tái),然后進(jìn)行了 API 的封裝。
或許有人會(huì)猜測(cè),之所以不做底下的實(shí)現(xiàn),可能跟 Nova-Docker 有關(guān)。
如果我們只談技術(shù),其實(shí)很容易在 Nova 中實(shí)現(xiàn)真正的 Container as a Service。在 Nova 看來(lái),都是計(jì)算節(jié)點(diǎn),但計(jì)算節(jié)點(diǎn)可以帶上各自的類(lèi)型,比如有的計(jì)算節(jié)點(diǎn)是物理機(jī)、有的是虛擬機(jī)、有的是容器甚至容器組。不同的類(lèi)型意味著底層不同的驅(qū)動(dòng)。用一套抽象的資源調(diào)度的框架(參考 Mesos 的二層調(diào)度機(jī)制),帶上不同的底層 framework,問(wèn)題很容易得到解決。
但偏偏是現(xiàn)在已經(jīng)有了 Nova-Docker,已經(jīng)有了 Magnum,不知道要經(jīng)過(guò)多少波折才可能走到這個(gè)方向上來(lái)?;蛟S在 OpenStack 的大環(huán)境下,是一件太困難的事情了。
或許,這就是開(kāi)源的魅力,分分合合,曲折中前行。