大家好,歡迎大家參加這次DC/OS的技術(shù)分享。
先做個自我介紹,劉超,Linker Networks首席架構(gòu)師,Open DC/OS社區(qū)貢獻者,長期專注于OpenStack, Docker, Mesos等開源軟件的企業(yè)級應(yīng)用與產(chǎn)品化。
從事容器方面工作的朋友可能已經(jīng)聽說過DC/OS,往往大家誤解DC/OS就是marathon + mesos,其實DC/OS包含很多的組件,DC/OS 1.8九月份發(fā)布了,此次分享給大家做一個介紹。
一、DC/OS的基本思想
所謂的DC/OS,全稱為數(shù)據(jù)中心操作系統(tǒng),其基本的思想就是使得運維人員操作整個數(shù)據(jù)中如操作一臺電腦一樣。
DC/OS使用了哪些技術(shù)可以做到這一點呢?

如圖,左面是普通的Linux操作系統(tǒng),右面是DC/OS,在這里做了一個對比。
無論是哪種操作系統(tǒng),都需要管理外部的硬件設(shè)備,最重要的四種硬件資源即CPU,內(nèi)存,存儲,網(wǎng)絡(luò)。
最初使用匯編語言寫程序的前輩,還是需要指定使用那些硬件資源的,例如指定使用哪個寄存器,放在內(nèi)存的哪個位置,寫入或者讀取那個串口等,對于這些資源的使用,需要程序員自己心里非常的清楚,要不然一旦JUMP錯了位置,程序就無法運行。這就像運維數(shù)據(jù)中心的一臺臺物理機的前輩一樣,那個程序放在了哪臺機器上,使用多少內(nèi)存,多少硬盤,都需要心里非常的清楚。
為了將程序員從對硬件的直接操作中解放出來,提升程序設(shè)計的效率,從而有了操作系統(tǒng)這一層,實現(xiàn)對于硬件資源的統(tǒng)一管理。某個程序使用哪個CPU,哪部分內(nèi)存,哪部分硬盤,程序只需要調(diào)用API就可以了,由操作系統(tǒng)自行分配和管理,其實操作系統(tǒng)只做了一件事情,就是調(diào)度。對應(yīng)到數(shù)據(jù)中心,也需要一個調(diào)度器,將運維人員從指定物理機或者虛擬機的痛苦中解放出來,這就是Mesos。Mesos即使數(shù)據(jù)中心操作系統(tǒng)的內(nèi)核。
在使用操作系統(tǒng)的時候,我們可以開發(fā)驅(qū)動程序來識別新的硬件資源,可以開發(fā)內(nèi)核模塊(例如openvswitch.ko)來干預(yù)對于硬件資源的使用,對于Mesos,同樣可以開發(fā)isolator來識別新的硬件資源例如GPU,也可以開發(fā)Executor來干預(yù)資源的使用。
在內(nèi)核之上,就是系統(tǒng)服務(wù),例如systemd,是用來維護進程運行的,如果systemctl enable xxx,則保證服務(wù)掛掉后自動重啟。對于DC/OS,保持服務(wù)long run的是marathon,但是僅僅只有marathon還不夠,因為服務(wù)是啟動在多臺機器上的,而且服務(wù)之間是有依賴關(guān)系的,一個服務(wù)掛掉了,在另外一臺機器啟動起來,如何保持服務(wù)之間的調(diào)用不需要人工干預(yù)呢?這需要另外的技術(shù),稱為服務(wù)發(fā)現(xiàn),多是通過DNS,負載均衡,虛擬機IP等技術(shù)實現(xiàn)的。
使用操作系統(tǒng),需要安裝一些軟件,于是需要yum之類的包管理系統(tǒng),使得軟件的使用者和軟件的編譯者分隔開來,軟件的編譯者需要知道這個軟件需要安裝哪些包,包之間的依賴關(guān)系是什么,軟件安裝到什么地方,而軟件的使用者僅僅需要yum install就可以了。DC/OS就有這樣一套包管理軟件,和其他的容器管理平臺需要自己編譯Docker鏡像,自己寫yml,自己管理依賴不同,DC/OS的軟件使用者只需要dcos package install就可以安裝好軟件了,軟件的配置,節(jié)點數(shù)目,依賴關(guān)系都是有軟件編譯者設(shè)置。
在最外層,DC/OS像普通的操作系統(tǒng)一樣,有統(tǒng)一的界面和命令行。通過它們,可以管理安裝包,管理節(jié)點,運行任務(wù)等。DC/OS不僅僅是運行容器的平臺,如果僅僅運行容器,就是容器管理平臺,而非數(shù)據(jù)中心操作系統(tǒng)。通過DC/OS,你可以在每臺機器上運行一個命令來進行統(tǒng)一的配置,而無需登錄到每臺機器上去。你可以運行容器應(yīng)用和大數(shù)據(jù)分析應(yīng)用并共享資源,并且可以相互發(fā)現(xiàn),這更加符合現(xiàn)代互聯(lián)網(wǎng)應(yīng)用,微服務(wù)和大數(shù)據(jù)不可分割。而且Mesos的架構(gòu)非常開放,你可以通過開發(fā)Framework, Executor, Modules, Hooks等,輕松干預(yù)微服務(wù)或者大數(shù)據(jù)任務(wù)的執(zhí)行過程,來定制化你的應(yīng)用。這也符合操作系統(tǒng)微內(nèi)核的概念。
二、DC/OS的內(nèi)核模塊Mesos
Mesos架構(gòu)如下

這個圖比較的著名了,也有很多文章介紹這個圖,詳情可以看文章 http://mesos.apache.org/docume ... ture/ ,這里不做過多的介紹。