Mesos Implicit Roles的新特性及注意事項(xiàng)
大?。?/span>0.6 MB 人氣: 2017-10-12 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
標(biāo)簽:roles(2222)
本文系作者根據(jù)自己在Mesos社區(qū)貢獻(xiàn)的經(jīng)驗(yàn),主要講解Mesos implicit roles這個(gè)新的特性,以及結(jié)合自身參與這個(gè)特性的設(shè)計(jì),開(kāi)發(fā)的過(guò)程,講解這個(gè)新的特性在實(shí)際應(yīng)用中應(yīng)該注意的問(wèn)題。【編者按】Role是Mesos中的一個(gè)非常重要的概念,Mesos圍繞它來(lái)定義資源在多個(gè)framework之間分配的策略。在Mesos 0.26之前,Mesos集群的操作員可以通過(guò)指定–roles這個(gè)參數(shù)來(lái)指定Mesos所支持的Roles,一個(gè)framework只能通過(guò)Mesos支持的role來(lái)加入到Mesos的集群進(jìn)而接收Mesos所發(fā)送的Resource Offer。如果后來(lái)有一個(gè)新的framework需要加入,集群操作員需要為它新增一個(gè)新的role的時(shí)候,他就必須重啟所有的Mesos Master節(jié)點(diǎn)來(lái)修改–roles這個(gè)參數(shù),這在實(shí)際的生產(chǎn)環(huán)境上實(shí)際上是不可取的,為了解決這一問(wèn)題,Mesos在0.27版本中引入了Implicit Roles這個(gè)新的特性來(lái)解決這一問(wèn)題。
Mesos Roles
在介紹Implicit Roles之前,我們先來(lái)大概的了解一下Role在Mesos中的作用。在Mesos中,role主要是用來(lái)在各個(gè)framework組之間進(jìn)行資源的配置,也就是說(shuō)role提供了多個(gè)租戶(hù)之間的資源隔離,使用同一個(gè)role來(lái)注冊(cè)的frameworks屬于一個(gè)租戶(hù)。在Mesos中和role相關(guān)的case主要有以下幾種:
1.資源的靜態(tài)分配。它是在Mesos agent啟動(dòng)的時(shí)候你可以把部分資源分配給某些role,或者一次性把所有的資源分配給某一個(gè)role。然后Mesos Allocator將會(huì)把這個(gè)agent上的資源根據(jù)DRF算法分配給這個(gè)role下注冊(cè)的所有frameworks。
2.資源的動(dòng)態(tài)分配。在Mesos運(yùn)行期,集群的操作員可以通過(guò)HTTP endpoint為某些role分配一些資源。
3.Quota配置。比如集群操作員可以通過(guò)為某個(gè)role配置quota來(lái)限制這個(gè)role下注冊(cè)的所有framework使用資源的數(shù)量,也可以通過(guò)配置quota來(lái)保證注冊(cè)在某個(gè)role下的所有framework至少有多少資源可以使用。
4.Weight的配置??梢詾椴煌膔ole來(lái)設(shè)置不同的weight來(lái)修改它們之間資源分配的優(yōu)先級(jí)。
5.配置磁盤(pán)組??梢詾槟硞€(gè)role創(chuàng)建一個(gè)persistent volumes,這樣就可以隔離不屬于這個(gè)role的framework來(lái)使用這塊存儲(chǔ)資源。
Implicit Roles前世今生
在介紹Implicit Roles之前,我們先來(lái)了解以下它的背景。為了支持在Mesos數(shù)據(jù)中心運(yùn)行期間動(dòng)態(tài)配置role這一問(wèn)題,社區(qū)開(kāi)始的想法是引入一個(gè)新的endpoint來(lái)支撐dynamic roles,讓集群操作員可以在運(yùn)行時(shí)動(dòng)態(tài)的配置roles。本文的作者作為這個(gè)proposal owner來(lái)簡(jiǎn)單介紹一下大概的設(shè)計(jì):
這個(gè)endpoint是這樣的:
$ curl -d JsonMessageBody–XPOSThttp://《master-ip》:《port》/roles
例如,如果我們要為新加入的framework新增一個(gè)role,則我們可以使用如下的
JsonMessageBody: { “name”: “sales”, “weight”: 2.0}
weight參數(shù)是可選的,它表示role1的資源分配的優(yōu)先級(jí),如果在以上的HTTP請(qǐng)求中不指定的話(huà),系統(tǒng)將采用默認(rèn)值(1.0)。在后續(xù)的章節(jié)中我們將會(huì)對(duì)weight相關(guān)的特性進(jìn)行介紹,這里不多說(shuō)明。
后來(lái)社區(qū)沒(méi)有采用這個(gè)設(shè)計(jì)的一個(gè)主要的原因,是它引入的一個(gè)新的endpoint,對(duì)集群操作員來(lái)說(shuō)操作過(guò)于繁瑣,沒(méi)有Implicit Roles的設(shè)計(jì)簡(jiǎn)潔。如果哪位讀者對(duì)Dynamic Roles有興趣的話(huà),你可以參考這個(gè)proposal的詳細(xì)設(shè)計(jì):
https://docs.google.com/document/d/1OIgceqpsjV3-_LGF83IMAFnrh1Ea3Zc16w9kWWPpUj4/edit#
Implicit Role從字面意思上來(lái)看,就是隱含的role,它主要的思想就是Mesos集群操作員將不需要為Mesos集群配置一個(gè)合法的role list,所有可能的role(在role所支持的字符集,長(zhǎng)度的范圍內(nèi))都是容許的。因此一個(gè)新的framework能不能使用這個(gè)role(例如sales)來(lái)注冊(cè),將主要取決與Mesos ACLs的配置,Mesos將不會(huì)額外驗(yàn)證這個(gè)role是不是合法的。也就是說(shuō)如果一個(gè)Mesos 集群沒(méi)有配置任何的ACLs,那么framework可以使用任意的(注:但必須是role所支持的字符集,以及長(zhǎng)度)role來(lái)注冊(cè)。
Implicit Roles實(shí)踐問(wèn)題歸納
從上邊的簡(jiǎn)介,我想大家已經(jīng)對(duì)Implicit Roles有一個(gè)大致的了解,但也會(huì)有不少的問(wèn)題,從我個(gè)人的理解,如果你要在實(shí)際中使用這個(gè)新的特性,你需要注意一下問(wèn)題:
兼容性問(wèn)題
作為一個(gè)不斷快速演進(jìn)中的開(kāi)源產(chǎn)品,雖然Mesos到現(xiàn)在仍然沒(méi)有達(dá)到一個(gè)比較穩(wěn)定的版本(V1.0),但它已經(jīng)應(yīng)用與很多企業(yè)的生產(chǎn)環(huán)境(比如國(guó)外的twitter,airbnb,蘋(píng)果的siri等,國(guó)內(nèi)的愛(ài)奇藝,豆瓣等),因此在對(duì)一個(gè)重要特性做大的改進(jìn)的時(shí)候,我們需要考慮兼容性問(wèn)題。
上邊介紹過(guò),在Implicit Roles實(shí)現(xiàn)之前,Mesos集群的操作員是通過(guò)–roles這個(gè)參數(shù)來(lái)在Mesos Master啟動(dòng)時(shí)配置所支持的role list,上層的framework只能使用這些role來(lái)注冊(cè)Mesos。Implicit Roles的設(shè)計(jì)為了兼顧向后的兼容性問(wèn)題,它時(shí)分了兩個(gè)階段來(lái)實(shí)施的:
1.第一階段,也就是在Mesos 0.27版本,Implicit Roles只有在Mesos集群操作員在啟動(dòng)Mesos Master時(shí)沒(méi)有指定–roles時(shí)生效。也就是說(shuō),這個(gè)新的特性在0.27版本中,它僅僅改變了–roles這個(gè)參數(shù)沒(méi)有指定時(shí)的Mesos的行為,如果一個(gè)靜態(tài)的role list在Mesos Master啟動(dòng)時(shí)被指定,那么Mesos集群仍然維持原有的行為。為了進(jìn)一步理解舉個(gè)例子:
如果你現(xiàn)在安裝了0.27版本,但你在啟動(dòng)Mesos Master時(shí)指定了–roles:
\#./bin/mesos-master.sh--ip=127.0.0.1--work_dir=/var/lib/mesos--roles=“sales,enginers”
那么Implicit Roles就被disabled,上層的framework仍然只能使用sales,enginers或者默認(rèn)的role(*)來(lái)注冊(cè)到Mesos集群,這時(shí)和role相關(guān)的行為和0.26之前的行為一致,比如集群操作員仍然不能為Mesos中不支持的role(也就是sales和enginers之外的role)reserve資源,配置quota等。
2.第二階段:也就是大概在一個(gè)貶值周期之后,Mesos的貶值周期一般大概為6個(gè)月,按照Mesos release的周期來(lái)算,大概在Mesos 0.33版本,–roles這個(gè)參數(shù)將會(huì)被廢棄掉,如果那時(shí)在啟動(dòng)Mesos master時(shí)指定了這個(gè)參數(shù),Mesos master將會(huì)啟動(dòng)失敗,告訴你不支持這個(gè)參數(shù)。
綜上所述:也就是在Mesos 0.27版本之后,Mesos不再推薦在啟動(dòng)Mesos master的時(shí)候使用–roles參數(shù),建議使用Implicit roles這個(gè)新特性。
資源分配的公平性問(wèn)題
在看了上邊對(duì)Implicit Roles的詳細(xì)解釋后, 我想大家一個(gè)直接的問(wèn)題就是如果允許framework用任意的role來(lái)注冊(cè)Mesos,那會(huì)不會(huì)影響Mesos對(duì)資源分配的公平性?會(huì)不會(huì)出現(xiàn)一個(gè)不良公民通過(guò)注冊(cè)多個(gè)role來(lái)惡意使用更多的資源?了解Mesos資源分配的人可能知道,Mesos默認(rèn)采用的是DRF allocator,它以一個(gè)相對(duì)公平的原則在各個(gè)role之間分配資源,如果有新的role加入,那它勢(shì)必會(huì)影響已有的資源分配格局。Implicit Roles的這個(gè)問(wèn)題它是通過(guò)Mesos 的Authentication和Authorization來(lái)解決的。
Mesos集群的操作員可以通過(guò)配置Authentication,來(lái)保證只有信任的framework可以訪(fǎng)問(wèn)Mesos集群?,F(xiàn)在的Authentication主要用在以下三個(gè)方面:
1.要求farmeworks注冊(cè)時(shí)進(jìn)行認(rèn)證。
2.要求計(jì)算節(jié)點(diǎn)slaves在注冊(cè)時(shí)進(jìn)行認(rèn)證。
3.要求集群操作員在使用某些HTTP endpoints訪(fǎng)問(wèn)Mesos集群時(shí)進(jìn)行認(rèn)證。
Authentication默認(rèn)情況下是不被激活的,操作員可以在啟動(dòng)Mesos Master的時(shí)候通過(guò)指定–authenticate,–authenticate_http 和–credentials參數(shù)來(lái)激活A(yù)uthentication。這樣Mesos集群就可以避免非法的framework來(lái)注冊(cè)Mesos集群。–credentials指定的是一個(gè)JSON格式的文件,例如:
{ “credentials”: [ { “principals”: “swarm”, “secret”: “passw0rd”} ] }
另外Mesos集群操作員可以通過(guò)配置Authorization來(lái)阻止framework以一個(gè)非法的role來(lái)注冊(cè)。Mesos Authorization是通過(guò)ACLs(Access Control List)來(lái)實(shí)現(xiàn)的,每一個(gè)ACL通過(guò)指定一個(gè)主題(Subject)來(lái)表示它可以對(duì)某些對(duì)象(Object)做哪些操作(Action)。它是一個(gè)JSON格式的配置文件,例如:
{ “register_frameworks”: [ { “principals”: { “values”: [“swarm”] }, “roles”: { “values”: [“docker-compose”, “docker-client”] } } ] }
上文的配置表示只有principal為swarm這個(gè)framework才可以注冊(cè)Mesos集群,并且它只能使用docker-compose和docker-client作為它的role。這樣就可以杜絕上層的framework使用非法的role來(lái)注冊(cè)。
綜上所述,其實(shí)在實(shí)際的生產(chǎn)環(huán)境,Implicit Roles這個(gè)特性必須要和Mesos的Authentication和Authorization結(jié)合來(lái)使用。
Implicit Roles對(duì)其他endpoints的影響
按照對(duì)傳統(tǒng)設(shè)計(jì)的理解,既然role作為Mesos的一個(gè)重要的實(shí)體,Mesos
圍繞它來(lái)定義各個(gè)framework之間共享resource的規(guī)則,因此作為Mesos集群的操作員,他/她應(yīng)該首先在Mesos集群中創(chuàng)建這個(gè)role,然后為這個(gè)role配置weight,static/dynamic reservation, quota, create persist volume等,然后framework可以使用這個(gè)role以及按照對(duì)它所定義的規(guī)則來(lái)使用集群的resources。
Implicit Roles的設(shè)計(jì)它打破了這一個(gè)傳統(tǒng),也就是它不強(qiáng)調(diào)上邊的操作順序。也就是說(shuō)集群的操作員可以為一個(gè)不存在的role設(shè)置weight,reserve資源,設(shè)置quota等。在Mesos 0.26之前,如果你要操作一個(gè)不存的role, 則會(huì)失敗。這種行為的改變影響的endpoints有:
?/master/create-volumes //為Role創(chuàng)建persistent volume.
?/master/quota //為Role配置quota
?/master/reserve //為Role reserve資源
?/master/weights //為一個(gè)Role配置weight,這個(gè)feature將在Mesos 0.28 release。
未來(lái)展望
Mesos到現(xiàn)在的0.27版本,其實(shí)對(duì)很多的配置都是不支持在運(yùn)行時(shí)進(jìn)行修改的,比如:Authentication,Authorization,F(xiàn)ramework的Meta信息,Agent的配置信息等。從長(zhǎng)期來(lái)看,作為下一代的數(shù)據(jù)中心的操作系統(tǒng),Mesos必須要對(duì)Master和Agent節(jié)點(diǎn)同時(shí)支持在運(yùn)行時(shí)的動(dòng)態(tài)配置,如:可以在Master/Agent運(yùn)行時(shí),動(dòng)態(tài)的修改Master/Agent的命令行參數(shù); 可以在Framework運(yùn)行時(shí),修改它的Meta信息等。請(qǐng)大家關(guān)注今年的Mesos Conference,將會(huì)有專(zhuān)門(mén)的topic來(lái)介紹Mesos的動(dòng)態(tài)配置。
IBM Platform DCOS Team作為Mesos社區(qū)的主要貢獻(xiàn)組織,結(jié)合自身在資源調(diào)度方面豐富的實(shí)踐應(yīng)驗(yàn),通過(guò)將自己的資源調(diào)度組件EGO與Mesos集成,為Mesos上層framework提供了更多的調(diào)度策略,以及一個(gè)集中式的資源調(diào)度策略配置界面,Mesos集群的操作員可以通過(guò)這個(gè)界面配置Global Resource Plan.提升了終端用戶(hù)使用Mesos的體驗(yàn)。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
