技術(shù)分享:OpenStack Magnum社區(qū)及項(xiàng)目介紹
今天主要跟大家簡(jiǎn)單介紹下Magnum社區(qū)和Magnum項(xiàng)目的一些介紹。Magnum到現(xiàn)在為止,功能做的其實(shí)不是很多,希望通過(guò)這次機(jī)會(huì)能和大家多多討論下,看看怎樣讓Magnum提供更好的容器服務(wù)。
1.Magnum社區(qū)
Mangum現(xiàn)在應(yīng)該是OpenStack里邊比較熱門的一個(gè)和Docker集成的新項(xiàng)目。Magnum是去年巴黎峰會(huì)后開始的一個(gè)新的專門針對(duì)Container的一個(gè)新項(xiàng)目,用來(lái)向用戶提供容器服務(wù)。從去年11月份開始在stackforge提交第一個(gè) patch,今年3月份進(jìn)入OpenStack namespace,這個(gè)項(xiàng)目應(yīng)該是OpenStack社區(qū)從stackforge遷移到OpenStack namespace最快的一個(gè)項(xiàng)目。Magnum現(xiàn)在可以為用戶提供Kubernetes as a Service、Swarm as a Service和這幾個(gè)平臺(tái)集成的主要目的是能讓用戶可以很方便的通過(guò)OpenStack云平臺(tái)來(lái)管理k8s,swarm,這些已經(jīng)很成型的Docker 集群管理系統(tǒng),使用戶很方便的使用這些容器管理系統(tǒng)來(lái)提供容器服務(wù)。
通過(guò)這個(gè)圖主要是想強(qiáng)調(diào)下,就是Magnum社區(qū)現(xiàn)在發(fā)展很迅速,大家可以看一下patch set和commit的對(duì)比,基本上平均三個(gè)patch set就會(huì)產(chǎn)生一個(gè)commit,所以希望對(duì)Docker感興趣的人,可以參與到Magnum的開發(fā)中來(lái)。
這一頁(yè)是Magnum社區(qū)的一些情況,主要列出了一些為Magnum做貢獻(xiàn)的公司,包括IBM、Rackspace、hp、cisco等等,IBM目前在這個(gè)項(xiàng)目排第一位。
通常情況下,一個(gè)公司對(duì)哪些項(xiàng)目比較看重,或者它對(duì)OpenStack社區(qū)的最近的一些策略,都可以通過(guò)分析每個(gè)公司對(duì)OpenStack的貢獻(xiàn)來(lái)得到一定的結(jié)論。如果某個(gè)公司在某個(gè)項(xiàng)目貢獻(xiàn)比較多的話,可能就意味著這個(gè)公司會(huì)在相關(guān)領(lǐng)域有一些動(dòng)作。大家如果感興趣的話,可以通過(guò)http://stackalytics.com/去研究一下自己感興趣的公司最近在OpenStack的一些動(dòng)態(tài)。
在這簡(jiǎn)單介紹下Magnum的一些主要Contributor,Adrian Otto是Rackspace的杰出工程師,Magnum和Solum的雙重PTL;Steven Dake剛剛從RedHat加入Cisco,他是Heat的創(chuàng)始人之一,現(xiàn)在Kolla的PTL,同時(shí)還在積極推動(dòng)一個(gè)新項(xiàng)目Machine Learning-As-A-Service;Davanum Srinivas (dims)剛剛從IBM加入Mirantis,現(xiàn)在擔(dān)任Oslo的PTL。
2. Why Magnum
接下來(lái)我們看下為什么需要Magnum、OpenStack現(xiàn)在和Docker集成現(xiàn)在主要有三塊,包括 nova Docker driver,heat Docker driver和Kilo推出的Magnum,當(dāng)然還包含一些別的項(xiàng)目,例如Sahara,Murano,Kolla,Solum等等。
2.1 Nova Docker driver
上圖是nova Docker driver,這個(gè)driver是OpenStack和Docker的第一次集成,相信對(duì)Docker和OpenStack感興趣的人,應(yīng)該都用過(guò)這個(gè)driver
這個(gè)driver的話,主要是把把Docker作為一種新的Hypervisor來(lái)處理,把所有的container當(dāng)成vm來(lái)處理。提供了一個(gè) Docker的nova compute driver。我不知道@Gnep@北京-VisualOp 的Hyper是不是可以考慮先弄個(gè)driver試試,我們待會(huì)可以討論。
這個(gè)driver的優(yōu)點(diǎn)是實(shí)現(xiàn)比較簡(jiǎn)單,只需要把nova compute中的一些對(duì)虛擬機(jī)操作的常用接口實(shí)現(xiàn)就可以,現(xiàn)在主要支持創(chuàng)建,啟動(dòng),停止,pause,unpause等虛擬機(jī)的基本操作。
另外一個(gè)是因?yàn)閚ova Docker driver也是一個(gè)nova的compute driver,所以他可以像其他的compute driver一樣使用OpenStack中的所有服務(wù),包括使用nova scheduler來(lái)做資源調(diào)度,使用heat來(lái)做應(yīng)用部署,服務(wù)發(fā)現(xiàn),擴(kuò)容縮容等等,同時(shí)也可以通過(guò)和neutron集成來(lái)管理Docker網(wǎng)絡(luò)。也支持多租戶,為不同的租戶設(shè)置不同的quota,做資源隔離等等。IBM現(xiàn)在的SuperVessel Cloud使用的就是這個(gè)Driver。
他的缺點(diǎn)也很明顯,因?yàn)镈ocker和虛擬機(jī)差別也挺大的,Docker還有一些很高級(jí)的功能是VM所沒有的,像容器關(guān)聯(lián),就是使不同容器之間能夠共享一些環(huán)境變量,來(lái)實(shí)現(xiàn)一些服務(wù)發(fā)現(xiàn)的功能,例如k8s的pod就是通過(guò)容器關(guān)聯(lián)來(lái)實(shí)現(xiàn)的。另外一個(gè)是端口映射,k8s的pod也使用了端口映射的功能,可以把一個(gè)pod中的所有container的port都通過(guò)net container export出去,便于和外界通信。還有一個(gè)是不同網(wǎng)絡(luò)模式的配置,因?yàn)镈ocker的網(wǎng)絡(luò)模式很多,包括host模式,container模式等等,以上的所有功能都是nova Docker driver不能實(shí)現(xiàn)的。
2.2 Heat Docker Driver
上圖是heat Docker driver,因?yàn)閚ova Docker driver不能使用Docker的一些高級(jí)功能,所以社區(qū)就想了另一個(gè)方法,和heat去集成,因?yàn)閔eat采用的也是插件模式,所以就在heat實(shí)現(xiàn)了一個(gè)新的resource,專門來(lái)和Docker集成。這個(gè)heat插件是直接通過(guò)rest api和Docker交互的,不需要和nova、cinder、neutron等等來(lái)進(jìn)行交互。
所以這個(gè)driver的優(yōu)點(diǎn)是首先它完全兼容Docker的api,因?yàn)槲覀兛梢栽趆eat template里邊去定義我們關(guān)心的參數(shù),可以實(shí)現(xiàn)Docker的所有高級(jí)功能,用戶可以在heat template定義任意的參數(shù)。另外因?yàn)楹蚳eat集成了,所以默認(rèn)就有了multi tenat的功能,可以實(shí)現(xiàn)不同Docker應(yīng)用之間的隔離。
但是他的缺點(diǎn)也非常明顯,因?yàn)樗莌eat直接通過(guò)rest api和Docker交互的,所以heat Docker driver沒有資源調(diào)度,用戶需要在template中指定需要在哪一臺(tái)Docker服務(wù)器上去部署應(yīng)用,所以這個(gè)driver不適合大規(guī)模應(yīng)用,因?yàn)闆]有資源調(diào)度。另外因?yàn)闆]有和neutron去交互,所以網(wǎng)絡(luò)管理也只能用Docker本身的網(wǎng)絡(luò)管理功能,沒有subnet,網(wǎng)絡(luò)隔離也做得不是太好,需要依賴于用戶手動(dòng)配置flannel或者ovs等等
#p#
3. Magnum簡(jiǎn)介
所以社區(qū)就推出了Magnum這個(gè)項(xiàng)目。上圖是Magnum的一個(gè)架構(gòu)圖。
3.1 Magnum主要概念
它的結(jié)構(gòu)其實(shí)很簡(jiǎn)單,首先我們看下magnum的主要概念,在這個(gè)圖的右邊,主要有這么幾個(gè):Bay、Baymodel、Node、Pod、Service、RC、Container。
Bay:bay在magnum主要表示一個(gè)集群,現(xiàn)在通過(guò)magnum可以創(chuàng)建k8s和swarm的bay,也就是k8s和swarm的集群。
Baymodel:baymodel是flavor的一個(gè)擴(kuò)展,flavor主要是定義虛擬機(jī)或者物理機(jī)的規(guī)格,baymodel主要是定義一個(gè) Docker集群的一些規(guī)格,例如這個(gè)集群的管理節(jié)點(diǎn)的flavor,計(jì)算節(jié)點(diǎn)的flavor,集群使用的image等等,都可以通過(guò)baymodel去定義。
Node主要是指Bay中的某個(gè)節(jié)點(diǎn)。
Container就是具體的某個(gè)Docker容器。
Pod, Replication Controller和Service的意思和在k8s的意思是一樣的。在這簡(jiǎn)單介紹下這三個(gè)概念。
Pod是Kubernetes最基本的部署調(diào)度單元,可以包含多個(gè)container,邏輯上表示某種應(yīng)用的一個(gè)實(shí)例。比如一個(gè)web站點(diǎn)應(yīng)用由前端、后端及數(shù)據(jù)庫(kù)構(gòu)建而成,這三個(gè)組件將運(yùn)行在各自的容器中,那么我們可以創(chuàng)建包含三pod,每個(gè)pod運(yùn)行一個(gè)服務(wù)。或者也可以將三個(gè)服務(wù)創(chuàng)建在一個(gè)pod,這個(gè)取決于用戶的應(yīng)用需求。一個(gè)pod會(huì)包含n 1個(gè)container,多出來(lái)的那一個(gè)container是net container,專門做路由的。
Service:可以理解為是pod的一個(gè)路由,因?yàn)閜od在運(yùn)行中可能被刪除或者ip發(fā)生變化,service可以保證pod的動(dòng)態(tài)變化對(duì)訪問(wèn)端是透明的。
Replication Controller:是pod的復(fù)制抽象,用于解決pod的擴(kuò)容縮容問(wèn)題。通常,分布式應(yīng)用為了性能或高可用性的考慮,需要復(fù)制多份資源,并且根據(jù)負(fù)載情況動(dòng)態(tài)伸縮。通過(guò)replicationController,我們可以指定一個(gè)應(yīng)用需要幾份復(fù)制,Kubernetes將為每份復(fù)制創(chuàng)建一個(gè)pod,并且保證實(shí)際運(yùn)行pod數(shù)量總是與預(yù)先定義的數(shù)量是一致的(例如,當(dāng)前某個(gè)pod宕機(jī)時(shí),自動(dòng)創(chuàng)建新的pod來(lái)替換)。
3.2 Magnum主要服務(wù)
接下來(lái)看下magnum中的主要服務(wù),現(xiàn)在主要有兩個(gè)服務(wù),一個(gè)是magnum-api,一個(gè)是magnum-conductor。具體如上圖所示。
Magnum-api和其它的項(xiàng)目的api的功能是一樣的,主要是處理client的請(qǐng)求,將請(qǐng)求通過(guò)消息隊(duì)列發(fā)送到backend,在magnum,后臺(tái)處理主要是通過(guò)magnum-conductor來(lái)做的。
magnum現(xiàn)在支持的backend有k8s,Swarm,Docker等等,Magnum conductor的主要作用是將client的請(qǐng)求轉(zhuǎn)發(fā)到對(duì)用的backend,backend在Magnum的官方術(shù)語(yǔ)叫CoE(Container Orchestration Engine)
3.3 Magnum工作流程
第一步需要?jiǎng)?chuàng)建baymodel,就是為需要提供容器服務(wù)的bay創(chuàng)建一些集群的定義規(guī)格。
第二步就可以在第一步創(chuàng)建的baymodel基礎(chǔ)上創(chuàng)建bay了,用戶可以選擇使用Kubernetes或者Swarm,未來(lái)還會(huì)有Mesos。
第三步,當(dāng)bay創(chuàng)建完成后,用戶就可以通過(guò)調(diào)用Magnum API和后臺(tái)的k8s或者swarm交互來(lái)創(chuàng)建container了
3.4 Magnum Notes
另外想強(qiáng)調(diào)一下,Magnum現(xiàn)在沒有調(diào)度模塊,因?yàn)楝F(xiàn)在支持的CoE有Swarm和 Kubernetes,所以對(duì)Container的調(diào)度,完全是通過(guò)Kubernetes和Swarm本身的調(diào)度器來(lái)工作的,Magnum只是負(fù)責(zé)將用戶創(chuàng)建container的請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)到對(duì)應(yīng)的CoE,最終的請(qǐng)求由具體的backend去調(diào)度。
Magnum現(xiàn)在也支持對(duì)Docker進(jìn)行管理,但是因?yàn)闆]有調(diào)度,目前建議對(duì)Docker的管理通過(guò)Swarm Bay來(lái)進(jìn)行管理,因?yàn)镾warm是Docker官方的Docker集群管理工具。
Magnum現(xiàn)在還支持Multi tenant,每個(gè)租戶可以有自己的bay,baymodel,pod,service,rc等等,這樣可以保證不同租戶的資源隔離。每個(gè)租戶只能看到和操作屬于自己的資源。
Magnum現(xiàn)在本身不管理Docker的網(wǎng)絡(luò),都是通過(guò)上層的CoE自己去管理的,例如Kubernetes的bay現(xiàn)在通過(guò)flannel去管理,其實(shí)用的還是tunnel技術(shù)。
3.5 Magnum Bay
上圖是Magnum目前支持的兩個(gè)bay,Kubernetes和Swarm,Bay創(chuàng)建完成后,可以直接通過(guò)Magnum API和Kubernetes或者Swarm交互創(chuàng)建container。Magnum現(xiàn)在自己通過(guò)swagger實(shí)現(xiàn)了一套kubernetes api,magnum通過(guò)kubernetest的rest api來(lái)和后臺(tái)的kubernetes交互。
#p#
3.6 Magnum Roadmap
3.6.1網(wǎng)絡(luò)
第一個(gè)是網(wǎng)絡(luò),網(wǎng)絡(luò)永遠(yuǎn)是熱門話題,不管是在哪次峰會(huì),現(xiàn)在 Magnum也碰到了同樣的問(wèn)題:Container的網(wǎng)絡(luò)怎樣管理,現(xiàn)在主要是通過(guò)Kubernetes依賴于overlay network的flannel來(lái)管理,但是因?yàn)閒lannel的性能和擴(kuò)展性的問(wèn)題,Magnum社區(qū)正在討論對(duì)網(wǎng)絡(luò)方面進(jìn)行改進(jìn),例如和 libnetwork或者neutron集成。這個(gè)bp在這https://blueprints.launchpad.net/magnum/ spec/native-Docker-network,非常歡迎對(duì)Docker網(wǎng)絡(luò)感興趣的人參與討論及實(shí)現(xiàn)。Magnum現(xiàn)在非常需要對(duì)網(wǎng)絡(luò)比較熟的人來(lái)共同推動(dòng)這個(gè)bp。我現(xiàn)在在調(diào)查libnetwork,看能不能在Magnum去使用。
3.6.2 Mesos支持
另外一個(gè)是因?yàn)楝F(xiàn)在能夠提供容器服務(wù)的工具很多,Mesos也是比較流行的一個(gè),所以Magnum正在計(jì)劃把Mesos集成進(jìn)來(lái),提供容器服務(wù)。這個(gè)bp在這https://blueprints.launchpad.net/magnum/ spec/mesos-bay-type 第一版的Mesos支持,會(huì)是Mesos Marathon這樣一個(gè)組合。因?yàn)槿绻灰蕾囈粋€(gè)framework的話,mesos很難去使用。
3.6.3 Magnum界面
還有就是Magnum打算在L版做一個(gè)GUI界面,讓用戶更簡(jiǎn)單的使用Magnum?,F(xiàn)在這個(gè)bp正在review https://review.OpenStack.org/#/c/188958/
3.7 使用Magnum
3.7.1 檢查所有Baymodel
首先是通過(guò)命令”Magnum baymodel-list”查看Magnum中現(xiàn)在的所有的baymodel,可以看到現(xiàn)在主要有兩個(gè)OOB的baymodel:kubernetes和swarm
3.7.2 查看Baymodel詳細(xì)信息
通過(guò)“baymodel-show”查看Kubernetes Baymodel的詳細(xì)信息
3.7.3 創(chuàng)建Kubernetes Bay
通過(guò)“bay-create”創(chuàng)建了一個(gè)有兩個(gè)minions節(jié)點(diǎn)的kubernetes bay
3.7.4 檢查Kubernetes Bay拓?fù)浣Y(jié)構(gòu)
因?yàn)镵ubernetes的bay實(shí)際上是heat的一個(gè)stack,所以創(chuàng)建后,可以通過(guò)horizon查看stack拓?fù)浣Y(jié)構(gòu)的顯示,從這里邊可以看到heat創(chuàng)建kubernetes bay的所有對(duì)象。
3.7.5 檢查Magnum Bay
我們可以通過(guò)bay-list查看bay的狀態(tài),從這個(gè)圖可以看到Kubernets Bay已經(jīng)創(chuàng)建完成了
3.7.6創(chuàng)建Kubernetes Pod
在Kubernetes bay的基礎(chǔ)上通過(guò)“pod-create”創(chuàng)建一個(gè)nginx pod,在這主要是通過(guò)Magnum的命令行創(chuàng)建這個(gè)pod。
3.7.7檢查Kubernetes Pod
創(chuàng)建完成后,可以通過(guò)Magnum “pod-list”,“pod-show”來(lái)查看pod狀態(tài)
3.7.8 Swarm相關(guān)
我們可以用同樣的方法來(lái)創(chuàng)建swarm的bay,通過(guò)swarm的bay來(lái)提供container service。
#p#
Q&A
問(wèn):我觀察到k8s里面的cloud-provider里面有了OpenStack的插件。想問(wèn)下,這個(gè)cloud-provider在magnum里是否有使用?如果使用了,是如何使用的?
答:現(xiàn)在Magnum在和Kubernetes社區(qū)合作,這個(gè)是Kubernetes社區(qū)貢獻(xiàn)給Magnum社區(qū)的,但是現(xiàn)在還沒用。
問(wèn):magnum現(xiàn)在是可以創(chuàng)建swarm集群,但是Swarm沒有pod/service/Replication Controller的概念,這個(gè)magnum后期會(huì)有這方面的計(jì)劃把這些概念引入Swarm集群么?
答:暫時(shí)沒有,現(xiàn)在Magnum還是分開管理k8s和Swarm對(duì)象的,magnum api端的調(diào)用就可以指定用戶用的是k8s還是Swarm。
問(wèn):magnum可以作為獨(dú)立模塊使用嗎?
答:現(xiàn)在還不行,因?yàn)樾枰蕾噃eat和keystone。
問(wèn):我看你的命令截圖,想問(wèn)下底層架構(gòu)是OpenStack嗎?
答:是的,Magnum是OpenStack生態(tài)圈的一員,主打Container Service。
問(wèn):架構(gòu)圖中左邊最下面那個(gè)micro os是Docker引擎的載體?這是相當(dāng)于還是要起一個(gè)實(shí)例嗎?能不能去掉這個(gè)載體,由OpenStack直接提供統(tǒng)一的Docker引擎。
答:因?yàn)楝F(xiàn)在micro os已經(jīng)提供了,所以社區(qū)暫時(shí)么有計(jì)劃通過(guò)OpenStack去提供,可能不想重復(fù)造輪子。
問(wèn):Magnum支持GUI的 L版什么時(shí)候出 ,會(huì)區(qū)分個(gè)人版和企業(yè)版嗎,會(huì)收費(fèi)嗎?
答:L版會(huì)有個(gè)draft的gui,不收費(fèi)的,OpenStack社區(qū)都是免費(fèi)的。
問(wèn):bay可以動(dòng)態(tài)擴(kuò)容嗎?
答:可以,通過(guò)magnum bay-update。
問(wèn):在magnum的網(wǎng)絡(luò)解決上libnetwork和Neutron區(qū)別在什么地方,各自的優(yōu)勢(shì)是什么,現(xiàn)在有哪些難點(diǎn)需要解決?
答:這個(gè)我還在調(diào)查 現(xiàn)在還沒有一些結(jié)論 具體的可以關(guān)注這個(gè)bp ,https://blueprints.launchpad.net/magnum/ spec/native-docker-network ,我會(huì)定期的去append一些調(diào)查結(jié)果.希望對(duì)網(wǎng)絡(luò)感興趣的人 參與到https://blueprints.launchpad.net/magnum/ spec/native-docker-network 這個(gè)bp的討論中來(lái)。
問(wèn):Magnum的Blueprint寫著“Add support for mesos bay type”,bay type支持mesos, k8s, swarm,這個(gè)以后真的能做到統(tǒng)一抽象嗎?這三者之間差異化還不小。Magnum社區(qū)是怎么考慮的?
答:這是個(gè)非常難解的問(wèn)題,這個(gè)可能還得需要在開發(fā)中,和社區(qū)討論,看能不能有一個(gè)折中的辦法:能抽象的盡量抽象,不能抽象的再定制。我們可以在OpenStack ML討論。
問(wèn):Magnum相對(duì)Kubernetes的優(yōu)勢(shì)?
答:magnum相對(duì)與Kubernetes的優(yōu)勢(shì)主要有這么幾個(gè):1)多租戶,不同的租戶有不同bay,baymodel等等 2)OpenStack為Kubernetes提供底層的基礎(chǔ)設(shè)施服務(wù),OpenStack負(fù)責(zé)IaaS,Kubernetes負(fù)責(zé) PaaS,Magnum負(fù)責(zé)聯(lián)通Kubernetes和OpenStack。
問(wèn):magnum沒有顯式創(chuàng)建master node,是不是創(chuàng)建bay的時(shí)候就創(chuàng)建了k8s/swarm的master節(jié)點(diǎn)?多個(gè)k8s/swarm cluster就是創(chuàng)建多個(gè)bay就ok了?
答:答案都是yes,Magnum會(huì)自動(dòng)創(chuàng)建Master節(jié)點(diǎn)。