容器技術(shù)提供了組件化的環(huán)境,可以幫助業(yè)務(wù)應(yīng)用在云之間輕松遷移而無需顯著的返工。隨著容器在企業(yè)持續(xù)獲得發(fā)展,廠商將增加新的功能讓用戶可以創(chuàng)建可擴(kuò)展的基于容器的環(huán)境。然而,大范圍控制容器部署也會有一些并發(fā)癥。容器肯定是跟資源相匹配的。這些挑戰(zhàn)會導(dǎo)致集群管理和編排的并發(fā)需求。
集群管理工具是一個通過圖形界面或者通過命令行來幫助你管理一組集群的軟件程序。有了這個工具,你就可以監(jiān)控集群里的節(jié)點(diǎn),配置services,管理整個集群服務(wù)器。集群管理可以從像發(fā)送工作到集群的低投入活動,到像負(fù)載均衡和可得性的高介入工作。
當(dāng)前主流的容器集群管理技術(shù),包括了 Docker 官方的 Docker Swarm、Twitter 背書的 Mesos 和 Google 背書的 Kubernetes。
這些可選的編排工具有一些共同的特征,如容器配置、發(fā)布和發(fā)現(xiàn)、系統(tǒng)監(jiān)控和故障恢復(fù)、聲明式系統(tǒng)配置以及有關(guān)容器布置和性能的規(guī)則和約束定義機(jī)制。除此之外,有些工具還提供了處理特定需求的特性。
其中,由于Apache Mesos 只是一個分布式內(nèi)核,目前的發(fā)展方向是數(shù)據(jù)中心操作系統(tǒng),它同時支持 Marathon、Kubernetes 和 Swarm 等多種框架,連 Mesosphere 也是 Kubernetes 生態(tài)的一員,從編排的角度,討論 Mesos 意義不大,故而只對比 Docker Swarm 和 Kubernetes。
來自Docker的原生解決方案
Docker Swarm的優(yōu)點(diǎn)之一在于,它是一種原生解決方案――你可以使用Docker命令,實(shí)施Docker網(wǎng)絡(luò)、插件和卷。Swarm管理器創(chuàng)建幾個主節(jié)點(diǎn),并為領(lǐng)導(dǎo)選舉創(chuàng)建特定規(guī)則。萬一首要的主節(jié)點(diǎn)出現(xiàn)故障,就可以實(shí)施這些管理機(jī)制。Swarm調(diào)度器擁有諸多過濾器,包括親和標(biāo)簽和節(jié)點(diǎn)標(biāo)簽。過濾器可以將容器與底層節(jié)點(diǎn)聯(lián)系起來,提高資源利用率、提升性能。
Swarm對用戶來說,之前使用Docker的經(jīng)驗可以繼承過來。非常容易上手,學(xué)習(xí)成本和二次開發(fā)成本都比較低。同時Swarm本身專注于Docker集群管理,非常輕量,占用資源也非常少。簡單說,就是插件化機(jī)制,Swarm中的各個模塊都抽象出了API,可以根據(jù)自己一些特點(diǎn)進(jìn)行定制實(shí)現(xiàn)。
與所有的開源項目一樣,Swarm項目也成立了自己的社區(qū),參與社區(qū)的方法基本上和其他社區(qū)一致。當(dāng)遇到問題時,可以在社區(qū)創(chuàng)建issue,然后描述問題,最好能上環(huán)境信息以及問題重現(xiàn)的步驟,這樣有利于問題的定位。當(dāng)然也可也直接通過IRC或者郵件直接交流。
經(jīng)驗老道的Kubernetes
另外一個非常重要的編排技術(shù)就是Kubernetes,前身是Borg,是Google 內(nèi)部使用的集群管理工具,迄今已在 Google 生產(chǎn)環(huán)境中運(yùn)行15年,說久經(jīng)考驗并不過分。
Kubernetes的開發(fā)者致力于保持它一直處于可訪問、輕量級狀態(tài),并且易于使用。它可以在很多云環(huán)境中使用,包括私有云,公有云,多云端和混合云。Kubernetes可以在fly上進(jìn)行自我修復(fù),它以自動復(fù)制,自動再啟動,自動定位為特色。它可以被不斷擴(kuò)展,它的特點(diǎn)是hookable,可插拔和模塊化。
Kubernetes對計算資源進(jìn)行了更高層次的抽象,通過將容器進(jìn)行細(xì)致的組合,將最終的應(yīng)用服務(wù)交給用戶。Kubernetes在模型建立之初就考慮了容器跨機(jī)連接的要求,支持多種網(wǎng)絡(luò)解決方案,同時在Service層次構(gòu)建集群范圍的SDN網(wǎng)絡(luò)。其目的是將服務(wù)發(fā)現(xiàn)和負(fù)載均衡放置到容器可達(dá)的范圍,這種透明的方式便利了各個服務(wù)間的通信,并為微服務(wù)架構(gòu)的實(shí)踐提供了平臺基礎(chǔ)。而在Pod層次上,作為Kubernetes可操作的最小對象,其特征更是對微服務(wù)架構(gòu)的原生支持。
可以說,基于 Borg 成熟的經(jīng)驗打造的 Kubernetes,為容器編排管理提供了完整的開源方案,并且社區(qū)活躍,生態(tài)完善,積累了大量分布式、服務(wù)化系統(tǒng)架構(gòu)的最佳實(shí)踐,從目前的支持率上看,Kubernetes也是遙遙領(lǐng)先。