摘要:公司始于名為的平臺即服務(wù)供應(yīng)商??缍鄠€機(jī)器之間協(xié)調(diào)這些容器需要額外的工具,這稱之為容器編排。的核心優(yōu)勢是為應(yīng)用程序開發(fā)人員提供了用于編排無狀態(tài)容器的強(qiáng)大工具。
有無數(shù)的文章都在討論和比較Docker、Kubernetes 以及Mesos。如果你是初學(xué)者,那么你可能會認(rèn)為這三個開源項(xiàng)目正為了稱霸容器界而殊死搏斗。
雖然這三種技術(shù)都使得使用容器部署、管理和伸縮應(yīng)用成為可能,但實(shí)際上它們各自解決了不同的問題,并且根植于迥異的上下文環(huán)境中。事實(shí)上,這三種被廣泛采用的工具鏈,都是有差別的。
讓我們來對三個項(xiàng)目的原始任務(wù)、技術(shù)架構(gòu),以及它們是如何相互補(bǔ)充和交互的來進(jìn)行對比。
Docker
Docker 公司-始于名為dotCloud 的平臺即服務(wù)(PaaS)供應(yīng)商。dotCloud 團(tuán)隊發(fā)現(xiàn),在許多應(yīng)用和客戶之間管理依賴和二進(jìn)制文件時需要付出大量的工作。因此他們將Linux 的cgroups和namespace 的一些功能合并成一個單一且易于使用的軟件包,以便于應(yīng)用程序可以一致地運(yùn)行在任何基礎(chǔ)設(shè)施上。這個軟件包就是所謂的Docker 鏡像,它提供了如下的功能:
將應(yīng)用程序和依賴庫封裝在一個軟件包(即Docker 鏡像)中,因此應(yīng)用可以被一致地部署在各個環(huán)境上;
提供類似Git 的語義,例如 docker push,docker commit 等命令讓應(yīng)用開發(fā)者可以快速接受這門新的技術(shù),并將其融入到現(xiàn)有的工作流中;
定義Docker 鏡像為不可變的層,支持不可變的基礎(chǔ)設(shè)施。新提交的變更被分別保存為只讀層,讓復(fù)用鏡像和追蹤變更記錄變得十分簡單。還通過只傳輸更新而不是整個鏡像來節(jié)省磁盤空間和網(wǎng)絡(luò)流量;
通過實(shí)例化不可變的鏡像和讀寫層來運(yùn)行Docker 容器,讀寫層可以臨時地存儲運(yùn)行時變更,從而輕松部署和擴(kuò)展應(yīng)用程序的多個實(shí)例。
Docker 變得越來越受歡迎,開發(fā)者們開始從在筆記本電腦上運(yùn)行容器轉(zhuǎn)而在生產(chǎn)環(huán)境中運(yùn)行容器。跨多個機(jī)器之間協(xié)調(diào)這些容器需要額外的工具,這稱之為”容器編排”。第一個支持Docker 鏡像的容器編排工具是Apache Mesos 的marathon。那年,Docker 的創(chuàng)始人兼首席技術(shù)官Solomon Hykes 將Mesos 推薦為”生產(chǎn)集群的黃金標(biāo)準(zhǔn)“。不久之后,除了Mesos 的Marathon 之外,還出現(xiàn)了許多的容器編排技術(shù):Nomad、Kubernets,Docker Swarm 。
隨著Docker 開始商業(yè)化其開源的文件格式,該公司還開始引入工具來完善其核心的Docker 文件格式和運(yùn)行時引擎,包括:
為公開存儲Docker 鏡像的而生的Docker hub;
存儲私有鏡像的Docker 倉庫(Docker registry);
Docker cloud,用于構(gòu)建和運(yùn)行容器的管理性服務(wù);
Docker數(shù)據(jù)中心作為一種商業(yè)產(chǎn)品體現(xiàn)了許多Docker 技術(shù);
Docker 將軟件及其依賴關(guān)系封裝在一個軟件包中的洞察力改變了軟件行業(yè)的游戲規(guī)則,Docker 文件格式成為行業(yè)標(biāo)準(zhǔn),領(lǐng)先的容器技術(shù)供應(yīng)商(包括Docker、Google、Pivotal、Mesosphere 等) 組建了 CNCF和OCI 。如今,CNCF 和OCI 旨在確保容器技術(shù)之間的互操性和標(biāo)準(zhǔn)化接口,并確保使用任何工具構(gòu)建的任何Docker 容器都可以在任何運(yùn)行時或基礎(chǔ)架構(gòu)上運(yùn)行。
Kubernetes
Google 很早就認(rèn)識到了Docker 的潛力,并試圖在Google Cloud Platform (GCP)上提供容器編排“即服務(wù)”。Google 在容器方面擁有豐富的經(jīng)驗(yàn)(是他們在Linux 中引入了cgroups),但現(xiàn)有的內(nèi)部容器和Borg 等分布式計算工具直接與其基礎(chǔ)架構(gòu)相耦合。所以,Google 沒有使用原有系統(tǒng)的任何代碼,而是從頭開始設(shè)計Kubernetes (K8S)來編排Docker 容器。Kubernetes 于2015 年2 月發(fā)布,其開發(fā)目標(biāo)包括:
為應(yīng)用程序開發(fā)人員提供編排Docker 容器的強(qiáng)大工具,而無需與底層基礎(chǔ)設(shè)施交互;
提供標(biāo)準(zhǔn)部署接口。以實(shí)現(xiàn)云端一致的應(yīng)用部署體驗(yàn)和API;
基于模塊化API 核心。允許供應(yīng)商圍繞Kubernetes 的核心技術(shù)集成其系統(tǒng)。
Kubernetes 對應(yīng)用程序開發(fā)人員非常有吸引力,因?yàn)樗鼫p輕了對基礎(chǔ)架構(gòu)和運(yùn)營團(tuán)隊的依賴程度。供應(yīng)商也喜歡Kubernetes,因?yàn)樗峁┝艘粋€容易的方式來擁抱容器化運(yùn)動,并為客戶部署自己的Kubernetes提供商業(yè)解決方案。
Kubernetes 的核心優(yōu)勢是為應(yīng)用程序開發(fā)人員提供了用于編排無狀態(tài)Docker 容器的強(qiáng)大工具。
Apache Mesos
Apache Mesos應(yīng)用了從云計算級別的分布式基礎(chǔ)架構(gòu)中習(xí)得的經(jīng)驗(yàn)和教訓(xùn)。并且,Mesos 推出了一種模塊化架構(gòu),一種開源的開發(fā)方法,旨在完全獨(dú)立于基礎(chǔ)架構(gòu)。Mesos 迅速被Twitter ,Apple ,Yelp ,Netflix和許多領(lǐng)先的技術(shù)公司采用,支持從微服務(wù)、大數(shù)據(jù)和實(shí)時分析到彈性擴(kuò)展的一切。
Apache Mesos在設(shè)計之初,設(shè)定的開發(fā)目標(biāo)如下:
將數(shù)據(jù)中心資源抽象為單個池來簡化資源分配,同時在私有云或公有云中提供一致的應(yīng)用和運(yùn)維體驗(yàn);
在相同的基礎(chǔ)架構(gòu)上協(xié)調(diào)多個工作負(fù)載,如分析、無狀態(tài)微服務(wù)、分布式數(shù)據(jù)服務(wù)和傳統(tǒng)應(yīng)用程序,以提高利用率,降低成本和臺面空間;
為應(yīng)用程序特定的任務(wù)(如部署、自我修復(fù)、擴(kuò)展和升級),自動執(zhí)行第二天的操作;提供高度可用的容錯基礎(chǔ)設(shè)施;
提供持久的可擴(kuò)展性來運(yùn)行新的應(yīng)用程序和技術(shù),而無需修改集群管理器或其上構(gòu)建的任何現(xiàn)有應(yīng)用程序;
彈性擴(kuò)展可以將應(yīng)用程序和底層基礎(chǔ)設(shè)施從少量擴(kuò)展到數(shù)十到數(shù)萬個節(jié)點(diǎn)。
Mesos 獨(dú)有的獨(dú)立管理各種工作負(fù)載的能力—— 包括Java 這樣的傳統(tǒng)應(yīng)用程序、無狀態(tài)Docker 微服務(wù)、批處理作業(yè)、實(shí)時分析和有狀態(tài)的分布式數(shù)據(jù)服務(wù)。Mesos 廣泛的工作負(fù)載覆蓋來自于其兩級架構(gòu),從而實(shí)現(xiàn)了“應(yīng)用感知”調(diào)度。通過將應(yīng)用程序特定的操作邏輯封裝在“Mesos 框架”中來實(shí)現(xiàn)應(yīng)用程序感知調(diào)度。資源管理器Mesos Master 提供了這些框架基礎(chǔ)架構(gòu)的部分,同時保持隔離。這種方法允許每個工作負(fù)載都有自己的專門構(gòu)建的應(yīng)用程序調(diào)度程序,可以了解其部署、擴(kuò)展和升級的特定操作要求。應(yīng)用程序調(diào)度程序也是獨(dú)立開發(fā)、管理和更新的,這讓Mesos 擁有高度可擴(kuò)展的能力,支持新的工作負(fù)載或隨著時間的推移而增加更多的操作功能。
Mesos的運(yùn)行機(jī)制是新版本的應(yīng)用運(yùn)行起來時,原先舊版本的軟件依然還正常運(yùn)轉(zhuǎn)著,然后當(dāng)舊應(yīng)用被銷毀時流量將會切換到新的應(yīng)用上。但是升級數(shù)據(jù)工作負(fù)載例如HDFS 或者Cassandra 要求節(jié)點(diǎn)停機(jī)一次,此時需要持久化本地數(shù)據(jù)卷以防止數(shù)據(jù)丟失,并且按照特定的順序執(zhí)行原位升級,在升級之前和升級完成之后,都要在每一個節(jié)點(diǎn)類型上執(zhí)行特定的檢查和命令。任何這些步驟都是應(yīng)用程序或服務(wù)特定的,甚至可能是版本特定的。這讓使用常規(guī)容器編排調(diào)度程序來管理數(shù)據(jù)服務(wù)變得非常困難。
總結(jié)
三種項(xiàng)目的運(yùn)行機(jī)制和運(yùn)行目的并不相同,所以當(dāng)人們將Docker 和Kubernetes 與Mesos 進(jìn)行比較時,他們實(shí)際上是將Kubernetes 和Docker Swarm 與在Mesos 上運(yùn)行的Marathon 進(jìn)行比較。
Mesos 坦率地講并不在乎它上面運(yùn)行了什么。Mesos 可以在共享的基礎(chǔ)設(shè)施上彈性地為Java 應(yīng)用服務(wù)器提供集群服務(wù)、Docker 容器編排、Jenkins 持續(xù)集成任務(wù)、Apache Spark 分析、Apache Kafka 流,以及更多其他的服務(wù)。Mesos 甚至可以運(yùn)行Kubernetes 或者其他的容器編排工具。所有這三種技術(shù)都與Docker 容器有關(guān),可以讓你在容器編排上實(shí)現(xiàn)應(yīng)用程序的可移植性和擴(kuò)展性。至于選擇哪種項(xiàng)目,這主要取決于你的身份。
如果你是一個應(yīng)用開發(fā)人員,正在尋找現(xiàn)代化的方式來構(gòu)建和打包你的應(yīng)用程序,或者想加速你的微服務(wù)計劃,Docker 容器和開發(fā)工具就是最好的選擇。
如果你是一個開發(fā)人員或者DevOps 的團(tuán)隊,并希望構(gòu)建一個專門用于Docker 容器編排的系統(tǒng),而且愿意花時間折騰集成解決方案與底層基礎(chǔ)設(shè)施,Kubernetes 是一個可以考慮的好技術(shù)。
如果你想要建立一個運(yùn)行多個關(guān)鍵任務(wù)工作負(fù)載的可靠平臺,包括Docker 容器、傳統(tǒng)應(yīng)用程序和分布式數(shù)據(jù)服務(wù),并希望所有這些可依移植到云端提供商或者數(shù)據(jù)中心,那么Mesos,更適合你們的需求。
互動區(qū)
* 你對以上內(nèi)容有什么看法?你最關(guān)注云計算哪個趨勢?如果你還有想了解的技術(shù)話題,歡迎留言分享。
第三十二期 啟迪云交付工程師 ?王中杰
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/5872.html
摘要:應(yīng)用實(shí)例創(chuàng)建完成后,會持續(xù)監(jiān)視這些實(shí)例。創(chuàng)建時,會創(chuàng)建了一個來托管應(yīng)用。通過請求,可以從集群的外部訪問一個服務(wù)。使用云提供商的負(fù)載均衡器如果支持,可以向外部暴露服務(wù)。使用在中部署第一個應(yīng)用本文以為例進(jìn)行。目標(biāo)是將簡單的應(yīng)用部署在上運(yùn)行。 Kubernetes是什么? Kubernetes是容器集群管理系統(tǒng),是一個開源的平臺,可以實(shí)現(xiàn)容器集群的自動化部署、自動擴(kuò)縮容、維護(hù)等功能??梢栽谖?..
摘要:應(yīng)用實(shí)例創(chuàng)建完成后,會持續(xù)監(jiān)視這些實(shí)例。創(chuàng)建時,會創(chuàng)建了一個來托管應(yīng)用。通過請求,可以從集群的外部訪問一個服務(wù)。使用云提供商的負(fù)載均衡器如果支持,可以向外部暴露服務(wù)。使用在中部署第一個應(yīng)用本文以為例進(jìn)行。目標(biāo)是將簡單的應(yīng)用部署在上運(yùn)行。 Kubernetes是什么? Kubernetes是容器集群管理系統(tǒng),是一個開源的平臺,可以實(shí)現(xiàn)容器集群的自動化部署、自動擴(kuò)縮容、維護(hù)等功能。可以在物...
摘要:的核心是以容器為中心的管理環(huán)境。命名空間提供了名稱范圍。換句話說,確?;蛲惤M始終可用。用于管理有狀態(tài)應(yīng)用程序,它管理一組的部署和擴(kuò)展,并提供有關(guān)這些的排序和唯一性的保證。 條分縷析帶你充分理解Kubernetes的各個細(xì)節(jié)與部分:它是什么,它如何解決容器編排問題,它包含哪些你必須掌握的關(guān)鍵對象,以及如何快速上手部署使用Kubernetes。 showImg(https://segme...
摘要:當(dāng)然此時的局限性較大,比如沒有副本和負(fù)載均衡的概念,這導(dǎo)致服務(wù)無法高可用當(dāng)然也更不存在什么服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點(diǎn)數(shù)據(jù)存儲這些東西沒有服務(wù)模型集群中服務(wù)間關(guān)系和啟動順序編排也很復(fù)雜于是就有了下面的的誕生。 showImg(https://segmentfault.com/img/remote/1460000015317037?w=1885&h=1153); 概述 在我的《Docker S...
摘要:年我們開始專注于開源云計算技術(shù),當(dāng)時開源的力量正在逐漸浮現(xiàn)。問你現(xiàn)在在實(shí)驗(yàn)室的工作是什么我主要負(fù)責(zé)實(shí)驗(yàn)室云計算團(tuán)隊的技術(shù)工作,以及與技術(shù)相關(guān)的其他事宜,包括開源以及一些商業(yè)上的技術(shù)合作。 非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/203520 張磊,浙江大學(xué)計算機(jī)學(xué)院博士生,科研人員,VLIS實(shí)驗(yàn)室云計算組技...
閱讀 3064·2021-10-12 10:12
閱讀 5404·2021-09-26 10:20
閱讀 1529·2021-07-26 23:38
閱讀 2821·2019-08-30 15:54
閱讀 1654·2019-08-30 13:45
閱讀 1971·2019-08-30 11:23
閱讀 3095·2019-08-29 13:49
閱讀 840·2019-08-26 18:23