1. 程式人生 > >正確認識Docker、Kubernetes 、Apache Mesos

正確認識Docker、Kubernetes 、Apache Mesos

無數的文章、社交媒體在探討Docker、Kubernetes、Mesos三者之間孰優孰劣。如果你聽信了某些一知半解者的言論,你可能會認為這三個開源專案正在為爭奪容器霸權而殊死戰鬥。同時,你也會相信,在這三者間的選擇無異於對其所奉宗教的信仰,而且真正的信徒敢於大膽和異教徒作鬥爭,並且擁護自己的信仰。

那些都是扯淡。

雖然這三種技術都可以使用容器來部署、管理和擴充套件應用程式,但實際上它們每個都側重解決不同的問題,並且紮根非常不同的環境之上。事實上,這三種被廣泛採用的工具鏈彼此完全不同。

與其比較這些快速演進的技術的重疊特性,不如讓我們回顧一下每個專案的原始任務、架構以及它們之間如何相互補充和互動。

讓我們從Docker開始

今天的Docker公司脫胎於一個平臺即服務的初創公司dotCloud。dotCloud團隊發現,在許多應用程式和客戶之間管理依賴關係和二進位制檔案需要做大量的工作。因此,他們將Linux cgroups和namespaces的一些功能組合成一個簡單易用的包,這樣應用程式就可以在任何基礎設施上持續執行。這個包就是Docker映象,它提供以下功能:

  • 將應用程式和庫封裝在單個包中(Docker映象),因此應用程式可以跨多環境一致部署;
  • 提供類似於git的語義,例如“dockerpush”,“docker commit”,這樣可以讓應用程式開發人員可以輕鬆地採用新技術,並將其融入到現有的workflow中;
  • 將Docker映象定義為不可變層,啟用不可變的基礎設施。提交的更改被儲存為一個單獨的只讀層,這讓映象複用和跟蹤更改變得更加容易。另外,層還可以通過傳輸更新而不是整個映象來節省磁碟空間和網路流量;
  • 通過使用可以臨時儲存執行時更改的可寫層來例項化不可變映像,從而方便快速部署和擴充套件應用程式的多個例項。

隨著Docker的風靡,開發人員開始從膝上型電腦轉移到在生產環境中執行。這就需要藉助工具來協調這些容器,我們稱為容器編排。有趣的是,Apache Mesos的Marathon成為當時(2014年6月)第一個支援Docker映象的容器編排工具(我們將在下面詳細描述它)。就連Docker創始人、首席技術官Solomon Hykes也推薦Mesos為“生產叢集的黃金標準”。不久之後,除了Marathon之外,許多容器編排技術出現了,這其中包括:Nomad、Kubernetes、DockerSwarm(現在是Docker引擎的一部分)。

隨著Docker開始商業化開原始檔格式,該公司也開始引入工具來補充核心Docker檔案格式和runtime引擎,包括:

  • Dockerhub
  • Docker registry
  • Docker cloud
  • Dockerdatacenter

圖片描述

​Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中的特性,使其成為軟體行業的遊戲規則改變者;這有點類似mp3格式幫助重塑了音樂產業。Docker檔案格式成為行業標準,並且領導容器技術供應商(包括Docker、Pivotal, Mesosphere以及其他許多)成立CNCF和OCI。今天,CNCF和OCI的目標就是確保跨容器技術的互操作性和標準化介面,並確保使用任何工具構建的Docker容器,都可以在任何runtime或基礎設施上執行。

Kubernetes

谷歌很早就認識到Docker映象的潛力,並試圖在谷歌雲平臺上交付“容器編排即服務”。谷歌在容器方面有豐富的經驗(他們在Linux中引入了cgroups),但是現有的內部容器和像Borg這樣的分散式計算工具與它們的基礎設施直接耦合。因此,谷歌沒有使用現有系統中的任何程式碼,而是從頭開始設計了Kubernetes,以編排Docker容器。Kubernetes於2015年2月釋出,並提出以下目標和考慮:

  • 為應用程式開發人員提供一個強大的工具,用於Docker容器編排,而不必與底層基礎設施互動;
  • 跨雲環境下,為一致的應用程式部署經驗和APIs 提供標準部署介面和原型;
  • 構建一個模組化的API核心,允許供應商圍繞核心Kubernetes技術整合系統。

截至2016年3月,谷歌向CNCF捐贈了Kubernetes,至今谷歌仍是該專案的主要貢獻者(其次是Redhat、CoreOS等)。

圖片描述

Kubernetes對應用程式開發人員非常有吸引力,因為它減少了對基礎設施和操作團隊的依賴。供應商也非常喜歡Kubernetes,因為它提供了一種簡單的方式來讓他們擁抱容器運動,併為他們執行自己的Kubernetes部署提供一個商業化解決方案。Kubernetes之所以很有吸引力,因為它是CNCF下的開源專案,與Docker叢集相比,後者雖然是開源的,但卻受到Docker Inc .的嚴格控制。

Kubernetes的核心優勢是為應用程式開發人員提供強大的工具來編排無狀態的Docker容器。雖然有多個計劃將專案的範圍擴充套件到更多的工作負載(如分析和有狀態的資料服務),但這些計劃仍然處於非常早期的階段,還有待觀察。

Apache Mesos

Apache Mesos最初是UCBerkeley為建立下一代叢集管理器而誕生的專案,並從如谷歌的Borg和Facebook的Tupperware中吸取經驗教訓。但是Borg和Tupperware是單體架構,並且是和物理基礎設施繫結的封源專有技術。Mesos引入了模組化架構,採用開源的方法,且其設計完全獨立於底層基礎架構。基於這些因素,Mesos很快被Twitter、Apple(Siri)、Yelp、Uber、Netflix以及許多領先的科技公司所採用,以支援他們在微服務、大資料和實時分析到彈性伸縮的一切實踐。

作為一個叢集管理器,Mesos的架構是為了解決一組非常不同的挑戰:

  • 將資料中心資源整合成一個單一的池,以簡化資源配置,同時在私有或公共雲之間提供一致的應用程式和操作體驗;
  • 在相同的基礎設施上使用不同的工作負載,比如分析、無狀態微服務、分散式資料服務和傳統應用程式,以提高利用率,降低成本和空間;
  • 特定應用程式的任務(如部署、自修復、擴充套件和升級)設定為自動化day-two 操作;提供高可用的容錯基礎設施;
  • 在不修改叢集管理器或現有應用程式的情況下,提供常綠的可擴充套件性來執行新的應用程式和技術;
  • 將應用程式和底層基礎設施彈性擴充套件到數萬個節點。

Mesos的獨特之處還在於,可以單獨管理各種不同的工作負載——包括傳統的應用程式,如Java、無狀態Docker微服務、批處理作業、實時分析和有狀態的分散式資料服務。Mesos廣泛的工作負載覆蓋來自於它的兩級架構,它支援“應用感知”的排程。應用感知排程是通過將應用程式特定操作邏輯封裝到“Mesos框架”(類似於執行中的runbook)來完成的。

Mesos Master資源管理器,提供這些底層基礎設施的框架部分,同時保持隔離。這種方法允許每個工作負載有自己專用的應用程式排程器,它瞭解其對部署、縮放和升級的具體操作需求。應用程式排程程式也獨立地被開發、管理和更新,這讓Mesos保持高度可擴充套件性,支援新的工作負載,或者隨著時間的推移增加更多的操作能力。

圖片描述

以一個團隊如何管理升級為例。無狀態應用程式可以從“藍/綠”部署方法中獲益;當舊的應用程式還在使用的時候,另一個完整版本的應用程式已經spun up,當舊的應用程式被銷燬時,流量切換到新的應用程式。但是,升級像HDFS或Cassandra這樣的資料工作負載需要一次離線,維護本地資料量以避免資料丟失,執行特定序列的升級,並在升級之前和之後對每個節點型別執行特殊檢查和命令。這些步驟中的所有環節針對特定的應用程式或服務,甚至是特定版本進行的。這使得用常規容器編排排程器管理資料服務變得非常困難。

Mesos具備按需管理每個工作負載的能力,使得許多公司將Mesos作為一個統一的平臺,並通過其將微服務和資料服務結合執行。執行資料密集型應用程式的一個通用參考架構是“SMACK堆疊”。

清晰時刻

注意:我們在描述Apache Mesos的過程中,沒有提及任何關於容器編排的內容。那麼,為什麼人們總是會將Mesos與容器編排聯絡起來呢?容器編排是一個可以在Mesos模組化架構上執行的工作負載的例子,它使用的是構建在Mesos上的一個專門的編排“框架”Marathon。Marathon最初是為了在cgroup容器中編排應用程式(如JARs、tarball、ZIP檔案)而開發的,並且在2014年成為第一批支援Docker容器的容器編排之一。

因此,當人們拿Docker、Kubernetes和Mesos比較時,他們實際上是在對比Kubernetes、Docker Swarm和Mesos上執行的Marathon。

為什麼這很重要?因為Mesos根本不關心上面跑的是什麼。Mesos可以為Java應用伺服器、Docker容器編排、Jenkins CI Jobs, Apache Spark analytics, Apache Kafka streaming以及更多的共享基礎設施提供叢集服務。Mesos甚至可以執行Kubernetes或其他容器編排,儘管還沒有對外整合。

圖片描述

Mesos的另一個考慮(以及為什麼它對許多企業架構師有吸引力)是它在執行任務關鍵工作負載時的成熟度。Mesos已經在大規模生產環境下執行(數萬臺伺服器)超過7年,這就是為什麼它比市場上其他技術更成熟,更可靠的原因。

這一切意味著什麼?

總之,這三種技術都與Docker容器有關,並允許您訪問容器編排,以獲得應用程式的可移植性和伸縮性。那麼在這三者間要如何選擇呢?這就要視不同的工作環境需求而定,工作需求不同,所適用的工具自然也是各不相同。如果您是一名應用程式開發人員,並且正在尋找一種現代的方法來構建和打包您的應用程式,或者加快微服務專案,那麼Docker容器格式和開發工具是你最好的選擇。

如果你是一個dev / devops團隊,想要構建一個專門的docker容器編排系統,並願意親自動手讓你的解決方案和底層基礎設施整合(或依賴於公共雲基礎設施如谷歌引擎或Azure容器服務),Kubernetes將是你一個很好的選項。

如果您想構建一個可靠的平臺,用以執行多工關鍵工作負載,包括Docker容器、遺留應用程式(例如Java)和分散式資料服務(例如Spark、Kafka、Cassandra、Elastic),並希望所有這些都可以在雲或資料中心上可移植,那麼,Mesos是最適合你的。

無論你作何選擇,你所擁抱的一系列工具都將提升你的伺服器資源利用率,同時簡化應用程式移植,並提高開發人員的敏捷性。你真的值得擁有!

原文連結:

全天候聚焦IaaS/PaaS/SaaS最新技術動態,深度挖掘技術大咖第一手實踐,及時推送雲行業重大新聞,一鍵關注,總覽國內外雲端計算大勢!
圖片描述

相關推薦

正確認識DockerKubernetes Apache Mesos

無數的文章、社交媒體在探討Docker、Kubernetes、Mesos三者之間孰優孰劣。如果你聽信了某些一知半解者的言論,你可能會認為這三個開源專案正在為爭奪容器霸權而殊死戰鬥。同時,你也會相信,在這三者間的選擇無異於對其所奉宗教的信仰,而且真正的信徒敢於大膽

Linux核心bug引起MesosKubernetesDocker的TCP/IP資料包失效

最近發現Linux核心bug,會造成使用veth裝置進行路由的容器(例如Docker on IPv6、Kubernetes、Google Container Engine和Mesos)不檢查TCP校驗碼(checksum),這會造成應用在某些場合下,例如壞的網路裝置,接收錯誤資料。這個bug

Introducing Makisu: Uber’s Fast, Reliable Docker Image Builder for Apache Mesos and Kubernetes

轉自:https://eng.uber.com/makisu/?amp To ensure the stable, scalable growth of our diverse tech stack, we leverage a microservices-oriented archite

Dockerkubernetes微服務SpringBoot/Cloud...好亂!到底要不要學?

        Docker、微服務日益火熱的今天,相信標題上這些名詞大家都不陌生。但也相信有很多同學並不夠清楚他們的概念,不理解它們的關係,也可能有這樣的疑惑:不知道跟我有沒有關係?要不要學習?怎麼去學習?學哪些東西?沒關係,今天我們就從頭捋捋,讓大家都能得到自己的答案。 

秦天歡:DockerKubernetesNeutron中的網路簡介

Docker、Kubernetes、Neutron中的網路簡介 分享人:秦天歡 UnitedStack 有云網路組

巔峰對決之SwarmKubernetesMesos

轉載自:http://dockone.io/article/1138  感謝作者和編者的分享 【編者的話】這篇文章對比了三大主流排程框架:Swarm、Kubernetes和Mesos。文章不僅從理論上討論了各個框架的優缺點,還從兩個實際的案例出發,分析了每個框架具體

容器DockerKubernetes——從基礎設施的容器化談起

作為一名長期從事運維的工程師來說,我會時常審視維護伺服器工作的簡單性與可重現性;而我的一個最重要的工作原則便是“永遠不要手動操作伺服器”。所有伺服器都必須由工具進行啟動(provisioned)與配置以執行,同時通過工具來監控、維護伺服器的狀態——而我的選擇是Chef;當然你也可以有很多其他選擇如:

DockerKubernetes(k8s)與OpenShift之間的關係

openshift是基於容器計數搭建的一個雲平臺。這裡的容器技術即包括Docker和Kunbernetes。如下圖所示,OPenshift底層以Docker作為容器引擎驅動,以Kubernetes作為容器編排引擎元件。OpenShift提供了開發語言、中介軟體、

招聘: Kubernetes/Docker,ofo騰訊雲七牛雲錢包金服汽車之家靈雀雲京東金融_Kubernetes中文社群

大家好,我是第6人 致敬2017 2018我們擼起袖子加油幹 成熟型公司、網紅公司、上市企業背景、優秀創業公司 這裡以Kubernetes、容器為主,職位涵蓋開發、運維、實施、架構師。 本文職位可以直接聯絡相應Email。或聯絡Vincet,加微信(備註姓名/崗位)推薦你與負責人微信溝通。掃描

基於 DockerKubernetes 實現高效可靠的規模化 CI/CD 流水線的搭建

本文來自作者 邸富傑 在 GitChat 上分享,「閱讀原文」檢視交流實錄 「文末高能」 編輯 | 庫克 高效可靠的 CI/CD 流水線是一個IT組織實現軟體服務快速交付的基礎,現如今大量

centos7設定EPEL源docker-ce-stable源kubernetesceph源

選擇一個好的映象源,可以加快Centos7系統的更新升級或者安裝軟體的速度。 1. 更新系統,配置優先順序 更新系統,安裝epel源 # yum update -y # yum install -y epel-release 安裝並配置yum

KubernetesMesos和Swarm:Rancher編排引擎的比較

Kubernetes是Google開源的容器叢集管理系統,其提供應用部署、維護、 擴充套件機制等功能。Mesos是Apache下的開源分散式資源管理框架,它被稱為是分散式系統的核心。Mesos最初是由加州大學伯克利分校的AMPLab開發的,後在Twitter得到廣泛使用。S

基於KubernetesDocker的機器學習微服務系統設計系列——(二)架構與部署

  本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用的架構與部署。 1 系統介紹 1.1 核心功能   主要完成功能: 支援Docker映象化釋出,支援Kuberneetes雲化部署; 微服務化設計支援服務自治

可能是Asp.net Core On host dockerkubernetes(K8s) 配置讀取的最佳實踐

![](https://img2020.cnblogs.com/blog/641760/202008/641760-20200803235106453-1133624102.png) # 寫在前面 為了不違反廣告法,我竭盡全力,不過“最佳實踐”確是標題黨無疑,如果硬要說的話 只能是個人最佳實踐。

(六)構建Docker私有倉庫Gitlab倉庫和持續集成環境

持續集成 gitlab 私有倉庫 docker registry 環境說明IP功能eth0:192.168.124.139eth1:172.16.100.10Docker私有倉庫、Gitlab、持續集成eth0:192.168.124.138eth1:172.16.100.20Docker服務

nginxtomcatapache-ftpservermariadb 環境的簡單安裝搭建

nginx   tomcat   ftpserver mariadb內部測試環境部署文檔因為內網並沒有聯網,故使用的rpm包安裝的形式進行相關軟件的安裝涉及軟件及應用版本:Linux版本: CentOS 7.2Nginx版本:nginx-1.10.1Java版本: jdk-8u101Tom

wampServer(windowsapachemysqlphp)

list mysql 配置 allow error del 默認 virtual listen wampServer(windows/apche/mysql/php)集成環境 在線狀態:區域網內可以訪問 離線狀態:本地設備可以訪問 自擬定網站根目錄: Apache -- h

docker】02docker安裝

docker一、在CentOS上安裝Docker以下版本的CentOS 支持 Docker :CentOS 7 (64-bit) # CentOS 從 7 開始,和 RHEL 7 一樣都只支持 64 位架構。CentOS 6.5 (64-bit) or later請註意,由於 Docker 的局限

Ubuntu搭建 ApacheMySQLPHP環境

分享 管理員 mysq ima 表示 ubunt ets .cn image 以Ubuntu 16.04為例: 1、安裝MysSQL 打開命令行輸入 :sudo apt-get install mysql-server 輸入管理員密碼 選擇Y 在安裝的中間會出現輸

一張圖看懂開源許可協議,開源許可證GPLBSDMITMozillaApache和LGPL的區別

軟件發布 csdn 合作 title ref 沒有 版本 簡單介紹 著名 開源許可證GPL、BSD、MIT、Mozilla、Apache和LGPL的區別 首先借用有心人士的一張相當直觀清晰的圖來劃分各種協議:開源許可證GPL、BSD、MIT、Mozilla、Apache和L