Marathon的設(shè)計(jì)宗旨是讓用戶在同一組服務(wù)器之上,更智能地運(yùn)行多種應(yīng)用程序和服務(wù)——Hadoop、Storm,甚至一個(gè)標(biāo)準(zhǔn)的Web應(yīng)用?;贛esos的數(shù)人云使用了Marathon技術(shù),將它用于部署及監(jiān)控長期運(yùn)行及容器化應(yīng)用程序,還會(huì)在不遠(yuǎn)的將來進(jìn)行版本的更新,及時(shí)跟進(jìn)國外的腳步,為大家提供更好的服務(wù)。
隨著越來越多的企業(yè)開始轉(zhuǎn)向多租戶數(shù)據(jù)中心或者私有云體系,為了在新的平臺(tái)上提高IT執(zhí)行效率,運(yùn)行分析能力亦變得越來越重要。負(fù)責(zé)管理數(shù)據(jù)中心與預(yù)算分配的領(lǐng)導(dǎo)者當(dāng)然希望了解哪些服務(wù)正處于運(yùn)行狀態(tài)、由誰負(fù)責(zé)其運(yùn)行,各服務(wù)又各自消耗多少資源。有鑒于此,當(dāng)我們在數(shù)據(jù)中心操作系統(tǒng)(簡稱DCOS)集群之上部署應(yīng)用程序或者容器時(shí),可以為各組件添加標(biāo)簽,從而追蹤及報(bào)告其使用情況。
舉例來說,大家可能希望為一款Mesos應(yīng)用程序分配一個(gè)成本中心標(biāo)識(shí)符或者客戶號(hào)碼,而后在每月月末生成一份匯總報(bào)告。這份報(bào)告當(dāng)中可以涵蓋各類使用量指標(biāo),例如由成本中心或者客戶為該應(yīng)用程序分配的CPU與內(nèi)存資源量。更進(jìn)一步,大家也可以使用REST API或者JSON載荷同Splunk或者Jaspersoft等分析工具進(jìn)行交互,從而以輕松但卻強(qiáng)大的方式對任務(wù)數(shù)據(jù)進(jìn)行分析。
下面來看具體實(shí)現(xiàn)方式:
為應(yīng)用程序及任務(wù)分配標(biāo)簽
Mesosphere DCOS當(dāng)中包含的Marathon用于部署及監(jiān)控長期運(yùn)行及容器化應(yīng)用程序。大家可以利用Marathon的Web界面實(shí)現(xiàn)應(yīng)用程序手動(dòng)部署,或者使用DCOS Marathon命令行界面實(shí)現(xiàn)同樣的作用。

圖一:Marathon Web界面——應(yīng)用1標(biāo)簽
圖一所示為如何利用Marathon Web界面為啟動(dòng)的容器或者命令行應(yīng)用程序指定一個(gè)標(biāo)簽。圖中所示的應(yīng)用程序名為gregs-app-1,大家可以看到其標(biāo)簽名稱COST_CENTER已經(jīng)被定義及設(shè)置為0001。當(dāng)此應(yīng)用程序被部署之后,其將收集與自身相關(guān)的成本中心值且允許管理者通過Marathon REST API進(jìn)行查詢。
圖二所示為利用Marathon Web界面部署的第二款應(yīng)用程序,但這一次其COST_CENTER標(biāo)簽被設(shè)置為0002。此標(biāo)簽及值將顯示在Marathon Web界面當(dāng)中,并通過REST API調(diào)用返回結(jié)果。

圖二:Web界面——應(yīng)用程序2標(biāo)簽
大家也可以在利用DCOS合作行界面部署應(yīng)用程序時(shí),通過以下方式為其指定標(biāo)簽值:
`dcos marathon app add <my json file>`
圖三所示為DCOS命令中用于通過Marathon部署應(yīng)用程序的JSON格式。與在Marathon Web界面當(dāng)中一樣,大家也可以為其指定超過一個(gè)標(biāo)簽,不過每個(gè)標(biāo)簽都只能擁有一個(gè)值。

圖三:應(yīng)用2的Marathon JSON文件
顯示標(biāo)簽信息
現(xiàn)在上述應(yīng)用程序已經(jīng)部署完成并開始運(yùn)行,大家可以利用DCOS提供的Marathon Web界面通過相關(guān)標(biāo)簽查看兩款應(yīng)用程序的運(yùn)行狀態(tài)。圖四所示為兩款應(yīng)用程序在顯示其COST_CENTER標(biāo)簽值時(shí)的的運(yùn)行效果。

圖四:Marathon Web界面——運(yùn)行應(yīng)用程序
大家也可以利用Marathon REST API以根據(jù)標(biāo)簽值標(biāo)準(zhǔn)對運(yùn)行中的應(yīng)用程序進(jìn)行查詢。圖五所示為指向運(yùn)行在Mesos集群內(nèi)的Marathon服務(wù)的一條REST請求。在本示例當(dāng)中,curl程序用于提交HTTP GET請求,但大家也可以使用任何能夠發(fā)送HTTP GET/PUT/DELETE請求的程序?qū)崿F(xiàn)同樣的功能。大家可以看到其REST端點(diǎn)為:
`https://52.88.210.228/marathon/v2/apps`
通過REST請求發(fā)送的參數(shù)中即包含有以下標(biāo)準(zhǔn):
`?label=COST_CENTER==0001`

圖五:Marathon REST API使用情況
大家也可以通過以下方式同時(shí)指定多條標(biāo)簽標(biāo)準(zhǔn):
`?label=COST_CENTER==0001,COST_CENTER==0002`
當(dāng)Marathon收到HTTP GET請求時(shí),其會(huì)以JSON載荷的形式回復(fù)響應(yīng)。JSON在設(shè)計(jì)上不易讀取,但如果大家使用python json.tool類等工具,則可以對其進(jìn)行格式化調(diào)整,從而實(shí)現(xiàn)一定程度的可讀性。在一套實(shí)際生產(chǎn)系統(tǒng)當(dāng)中,大家應(yīng)該還擁有能夠?qū)SON格式響應(yīng)數(shù)據(jù)解碼為具備一定可讀性格式(或者圖表)的報(bào)告工具。不過在本示例中,我們姑且只查看JSON的原始輸出結(jié)果。
如大家所見,響應(yīng)信息當(dāng)中只包含標(biāo)簽定義為COST_CENTER且相關(guān)值為0001的應(yīng)用程序。其相關(guān)資源指標(biāo)亦被包含在內(nèi),例如CPU共享數(shù)量以及內(nèi)存分配量。在響應(yīng)信息的最下方,我們可以看到該應(yīng)用程序的部署日期/時(shí)間,這部分信息可用于計(jì)算應(yīng)用的正常運(yùn)行時(shí)間,從而核對資源費(fèi)用賬戶或者辦理退費(fèi)。
總結(jié)
通過在DCOS以及Marathon之上運(yùn)行應(yīng)用程序或者容器化服務(wù),我們能夠追蹤集群資源使用量以進(jìn)行賬單核對或者退費(fèi)辦理。展望未來,隨著越來越多企業(yè)開始部署私有云、多租戶數(shù)據(jù)中心以及容器化工作負(fù)載以削減資源成本及提升業(yè)務(wù)運(yùn)營效率,這種能力將變得愈發(fā)重要。在應(yīng)用程序運(yùn)行工作中采取資源共享的方式確實(shí)值得稱道,但我們的目標(biāo)是讓資源共享機(jī)制發(fā)揮更好、更理想的實(shí)際效果。