官术网_书友最值得收藏!

2.1 開源容器集群方案

2.1.1 容器社區(qū)的“四朵金花”

技術(shù)社區(qū)從來(lái)不缺乏各種各樣的輪子,容器的圈子里也一度百花齊放地誕生過(guò)許多輔助規(guī)模化容器運(yùn)維的工具和平臺(tái)。且不說(shuō)企業(yè)自研和未開源的項(xiàng)目,單是在GitHub上就能輕松找到數(shù)百種工具,功能從簡(jiǎn)單的批量部署腳本到設(shè)計(jì)精良的全功能平臺(tái),讓人目不暇接。縱觀這些開源項(xiàng)目,核心解決的問(wèn)題都是如何高效地進(jìn)行容器集群的資源調(diào)度和任務(wù)編排,其中SwarmKit、Kubernetes、Mesos和Rancher是目前在這個(gè)領(lǐng)域中最知名且使用者數(shù)量最龐大的四種全功能解決方案。

接下來(lái)將用連續(xù)的四個(gè)章節(jié)(包括本章)依次討論這四種主流容器的部署、使用和適用場(chǎng)景。值得一提的是,雖然這些容器集群管理項(xiàng)目能夠獨(dú)立提供十分相似的功能,但它們之間并非是完全互斥而毫無(wú)交集的。例如,Mesos社區(qū)曾多次嘗試將Swarm或Kubernetes作為其管轄的數(shù)據(jù)中心中的一種擴(kuò)展任務(wù)調(diào)度框架,Rancher則能夠快速構(gòu)建和管理Swarm、Kubernetes和Mesos集群環(huán)境,并通過(guò)Web UI統(tǒng)一監(jiān)控在這些節(jié)點(diǎn)上運(yùn)行的容器資源。

對(duì)初識(shí)容器集群應(yīng)用的用戶來(lái)說(shuō),SwarmKit是很好的起點(diǎn)。一方面它與Docker深度集成,能夠充分運(yùn)用許多用戶已經(jīng)熟悉的Docker概念和周邊設(shè)施,學(xué)習(xí)曲線相對(duì)平緩。另一方面,它的部署結(jié)構(gòu)簡(jiǎn)單緊湊,內(nèi)置配置存儲(chǔ)、服務(wù)域名路由、跨容器網(wǎng)絡(luò)等集群基礎(chǔ)能力,因此幾乎不會(huì)因操作復(fù)雜而讓人感到信心受挫。

2.1.2 經(jīng)典Swarm、SwarmKit和Swarm Mode

SwarmKit并不是Docker公司在集群方式運(yùn)用方面的第一次嘗試。早在2014年年底,Docker公司就著手設(shè)計(jì)一組容器集群的組合方案:Machine、Swarm和Compose。在這個(gè)方案中,Machine是一款用于各種主流虛擬機(jī)和云平臺(tái)快速創(chuàng)建Docker運(yùn)行環(huán)境的工具,它支持在創(chuàng)建出來(lái)的節(jié)點(diǎn)上自動(dòng)部署Swarm。當(dāng)時(shí)的Swarm是一款整合跨節(jié)點(diǎn)網(wǎng)絡(luò)的集群式容器運(yùn)維管理服務(wù),它利用Docker守護(hù)進(jìn)程的API,將多節(jié)點(diǎn)的計(jì)算資源進(jìn)行匯總,并提供完全兼容Docker的運(yùn)行API,使用者只需在執(zhí)行Docker命令工具時(shí),用--host參數(shù)將目標(biāo)設(shè)置為Swarm服務(wù)的IP和端口,即可像操作單個(gè)節(jié)點(diǎn)的Docker服務(wù)一樣操作整個(gè)容器集群。但這種方式具有先天的局限性,比如在單節(jié)點(diǎn)Docker中并沒有為服務(wù)高可用而設(shè)計(jì)的副本集和負(fù)載均衡等概念,也不存在服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)的問(wèn)題。此外,集群中的服務(wù)間關(guān)系和啟動(dòng)順序編排也遠(yuǎn)比單節(jié)點(diǎn)時(shí)復(fù)雜,這些功能過(guò)去是由Compose組件完成的,而它所支持的定義項(xiàng)對(duì)于集群的場(chǎng)景也一度顯得捉襟見肘,直到其v2版本API推出之后才逐漸完善。

在一年多后的2016年2月,Docker公司低調(diào)地開始了SwarmKit項(xiàng)目。這個(gè)項(xiàng)目的作用與Swarm相似,但也許是意識(shí)到了Docker的API和服務(wù)模型與集群化場(chǎng)景的不匹配,SwarmKit從一開始就重新設(shè)計(jì)了獨(dú)立的一套API和模型體系,并且采用了獨(dú)立的客戶端命令行工具:swarmctl。在SwarmKit里,集群的節(jié)點(diǎn)管理被設(shè)計(jì)成了API中十分自然的一部分,而不再是像Machine這樣的單獨(dú)組件。同時(shí),SwarmKit將過(guò)去Swarm所依賴的外部集群一致性存儲(chǔ)組件Etcd的核心部分內(nèi)置到了軟件中,這樣雖然讓使用者失去了選擇存儲(chǔ)組件的自由,卻大大地簡(jiǎn)化了集群的部署過(guò)程。本書在第7章中會(huì)單獨(dú)介紹Etcd這個(gè)項(xiàng)目。

真正讓SwarmKit項(xiàng)目為眾人所知的事件是Docker 1.12版本開始提供了一個(gè)一鍵創(chuàng)建容器集群的新命令:docker swarm。事實(shí)上,在這個(gè)后來(lái)被稱為Swarm Mode的功能背后,正是SwarmKit的功勞。Docker將SwarmKit的核心模塊內(nèi)嵌在了Docker后臺(tái)服務(wù)中。Swarm Mode并非一種特別的運(yùn)行“模式”,而是Docker中的一組與集群相關(guān)功能的統(tǒng)稱,因此并不存在像“模式切換”這樣的概念,Docker通過(guò)不同的命令允許使用者同時(shí)以“當(dāng)前節(jié)點(diǎn)”和“整個(gè)集群”兩種視角來(lái)操作容器。

在Docker Daemon服務(wù)默認(rèn)啟動(dòng)時(shí),使用者只能用與過(guò)去的Docker命令相同的操作在當(dāng)前節(jié)點(diǎn)上啟動(dòng)和管理容器,與集群相關(guān)的命令處于禁用的狀態(tài)。直到使用者通過(guò)docker swarm命令從當(dāng)前節(jié)點(diǎn)創(chuàng)建出新的集群,或是將當(dāng)前節(jié)點(diǎn)加入到一個(gè)已經(jīng)存在的集群里,就解封了Swarm Mode帶來(lái)的一系列全新的命令集,包括docker service、docker stack、docker node、docker config和docker secret等,本章稍后會(huì)詳細(xì)地介紹它們。

圖2-1表示了Swarm、SwarmKit和Swarm Mode以及其他相關(guān)項(xiàng)目之間的關(guān)系。圖中重疊的部分表示相應(yīng)的項(xiàng)目之間存在代碼層面的相互引用或組件形式的依賴。

圖2-1 SwarmKit和相關(guān)項(xiàng)目的關(guān)系

Swarm Mode所創(chuàng)建的集群,本質(zhì)上就是SwarmKit的集群,二者在代碼實(shí)現(xiàn)層面上其實(shí)是同樣的事物。但相比于Swarm Mode這個(gè)名稱,SwarmKit一詞更具有識(shí)別性,因此社區(qū)里有時(shí)會(huì)用“SwarmKit集群”來(lái)指代Swarm Mode所創(chuàng)建的集群,以便與過(guò)去的經(jīng)典Swarm集群劃清界限,本章的標(biāo)題“SwarmKit集群解決方案”就采用了這樣的表述方式。本章的內(nèi)容會(huì)嚴(yán)格區(qū)分“Swarm Mode”和“SwarmKit”的名稱使用,以避免產(chǎn)生混淆。

主站蜘蛛池模板: 三门县| 韶关市| 和田县| 阜新市| 苍溪县| 论坛| 高要市| 恭城| 句容市| 株洲县| 留坝县| 闸北区| 静安区| 平顶山市| 晴隆县| 酒泉市| 张家川| 金华市| 银川市| 湄潭县| 北碚区| 云浮市| 汝阳县| 冕宁县| 德钦县| 长葛市| 会东县| 彭泽县| 铅山县| 洛宁县| 凉城县| 丽江市| 桓台县| 松潘县| 博湖县| 鄂伦春自治旗| 宁蒗| 楚雄市| 三台县| 临桂县| 思南县|