容器儲存架構比較:Kubernetes、Docker和MesosCompare
【3 天燒腦式基於Docker的CI/CD實戰訓練營 | 北京站】本次培訓圍繞基於Docker的CI/CD實戰展開,具體內容包括:持續整合與持續交付(CI/CD)概覽;持續整合系統介紹;客戶端與服務端的 CI/CD 實踐;開發流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及實踐經驗分享等。
“There is no such thing as a stateless architecture” —— Jonas Boner
任何應用程式都需要資料支撐,這也是我們商業存在基石。最初,容器應運而生的主要目的之一也是為了解決無狀態服務。但短期時間內,隨著技術的不斷成熟,允許容器化應用程式直接訪問資料的需求也在不斷的增加。現代化的應用程式和傳統的應用程式都需要諸如檔案、塊,或者工具化檔案儲存物件、關係型資料庫、流媒體檔案等這些不同型別的儲存。
虛擬機器也可以管理應用程式,但是這種方法對硬體模擬有一定的要求,容器可以保證應用程式的可移植性遠大於虛擬化的實現。實際應用程式的可移植性的能力,還依賴於個容器編排工具的互操作性。對於當前的原生雲應用程式,儲存也是一個很關鍵的元件,因為應用程式可以利用持久儲存平臺以及圍繞其特性進一步開發特性功能。通過Clinton Kitson`s的部落格:理解原雲應用儲存獲取更多資訊。
容器的協調者和執行時對儲存服務發起特定的請求,可以實現諸如建立/刪除、檢查/清單、附加/分離、安裝/解除安裝等操作。這是解決容器協調者之間儲存問題的一種獨特的嘗試,不過在行業中也是有分歧的。對外儲存編排請求API分為兩種情況:首先,是in-tree驅動程式,它是直接將原生程式碼編譯到容器協調器;第二,是out-of-tree,藉助於外部外掛驅動。每一種方式都有自己的優缺點:in-tree驅動器受制於容器協調器的釋出週期;而out-of-tree外掛式驅動可能無法提供與容器協調器繫結的增強特性集。
Docker
Docker是在1.7的實驗版本中通過建立Docker Volume 驅動介面首次解決了外部儲存的問題。1.13版本中Docker又引入了外掛模型,也就是Docker Store。通過查詢目錄/run/docker/plugins
,Docker發現並可使用UNIX外掛(.sock檔案),這是一個使用out-of-tree模型的例子。
UNIX域套接字( Unix domain socket)檔案必須在相同的Docker主機上執行。但如果指定了遠端訪問URL,外掛也可以通過spec和json配置檔案實現在不同的主機上執行。實現儲存功能的集中化,這也是外掛職責之一。該介面接受JSON、RPC型別的HTTP請求。out-of-tree模型公開的介面提供了完整的Volume生命週期,也為Docker CLI提供了編排功能。但是,如快照或複製等高階儲存功能,還未提供暴露給Docker CLI。
Mesos
Mesos直到v0.23版本才開始支援本地儲存。Mesos-Module-Dvdi就是為這個問題而提出的方案,隨後它的特性被合併到Mesos,直到Mesos 1.0+版本方能使用。DVDCLI是將Docker Volume Driver CLI打包封裝到Mesos中,允許在所有的Mesos容器內使用任何Docker Volume驅動,Mesos-Module-Dvdi就是利用正在實施中的DVDCLI實現了本地儲存。與Docker類似,框架與DVDCLI互聯通訊支援JSON格式,並且也提供使用JSON/RPC通過HTTP與Docker Volume Driver Interface通訊。
正如前面所提及的,由於它使用了Docker Volume 驅動,因此它是一個out-of-tree外掛,並且具有和Docker CLI相同的Volume生命週期和限制。
Kubernetes
Kubernetes的獨特之處在於它既有in-tree又有out-of-tree驅動。我們已經在“Kubernetes儲存說明”和“Kubernetes 1.6版本中關於儲存的新功能“這兩篇文章中詳細說明,我們再次回顧下:
in-tree驅動來自於Kubernetes原始碼,也是其標準發行版的一部分。通過這些驅動,可以根據Kubernetes提供的介面(如Mount/Umount、Create/Delete等)向其儲存平臺暴露API,Kubernetes執行所有功能,並向驅動程式執行特定的API呼叫,從而執行所需的操作。這也可以充分利用Kubernetes的特性,比如:動態供應的儲存類。這樣也是有缺點的,如果系統BUG或增加需要新增一些平臺特性,則依賴於Kubernetes的釋出週期。釋出週期可能意味著3-6個月的等待修復、持續維護、回合程式碼等流程。
Out-of-tree驅動使用Flexvolume介面。Flexvolume允許使用者編寫自己的驅動程式,並在Kubernetes中新增對其Volume的支援。供應商的驅動應該被安裝在在每個Kubelet節點和主節點上,Volume外掛的路徑:usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor~driver>/
。這使得驅動程式可以在核心的Kubernetes程式碼之外執行,並且可以根據自己的時間節點表釋出更新或者修復BUG。Flexvolume介面預期Volume的建立和刪除可以基於外部外掛進行。因此,Flexvolume只使用Attach/Detach 和 Mount/Unmount功能,而不是整個Volume的生命週期。
當前總概
把所有的儲存功能結合在一起,我們可以看到這是一個非常碎片化的空間,以及三者之間各有千秋。
而所有這一切都意味著儲存供應商需要建立多層次封裝整合,從而支援整個容器生態系統。容器儲存介面(CSI)專案處於早期階段,但最終將會成為儲存和容器成功的關鍵因素。
與此同時,我們已經將所有的功能整合,並且整合了針對每一種容器協調者功能的儲存方法。我們深知當前和未來的容器化應用程式依賴儲存,而且這個解決方案適應每一個場景:Docker和Mesos中的REX-Ray,FlexREX和Kubernetes,Docker中的REX-RAY外掛,Kubernetes的本地ScaleIO驅動程式。
原文連結:Container Storage Architectures: How Does Kubernetes, Docker, and Mesos Compare?(翻譯:ylzhang)
原文釋出時間為:2017-08-11
本文作者:ylzhang
本文來自雲棲社群合作伙伴Dockerone.io,瞭解相關資訊可以關注Dockerone.io。
原文標題:容器儲存架構比較:Kubernetes、Docker和Mesos Compare
相關文章
- 細述Kubernetes和Docker容器的儲存方式Docker
- docker容器儲存Docker
- Transformer和MoE架構比較ORM架構
- 儲存結構的種類與比較
- Docker 與 Podman 容器管理的比較Docker
- docker更換容器儲存位置Docker
- 容器雲環境下如何設計儲存架構?架構
- Docker_05 容器-修改及儲存Docker
- 比較Windows和Linux SQL容器WindowsLinuxSQL
- 利用Kubernetes實現容器的持久化儲存持久化
- Docker 基礎-映象&容器&網路&儲存Docker
- 使用Spring Cloud Kubernetes基於Kubernetes、Spring Boot和Docker構建微服務架構 - MoriohCloudSpring BootDocker微服務架構
- 比較 Apache Hadoop 資料儲存格式 - techwellApacheHadoop
- Docker配置本地映象與容器的儲存位置Docker
- 神話還是現實?Docker 和 Kubernetes 的完美架構Docker架構
- [雲原生微服務架構](十二) Kubernetes和docker都做了啥微服務架構Docker
- kubernetes/k8s CSI分析-容器儲存介面分析K8S
- 儲存解決方案DAS、NAS與SAN比較
- 容器雲架構–瞭解 Kubernetes 網路模型架構模型
- docker學習系列2儲存對容器的修改Docker
- Kubernetes 幾種儲存方式效能對比 (轉載)
- kubernetes 儲存流程
- 容器化 RDS:藉助 CSI 擴充套件 Kubernetes 儲存能力套件
- 幾種非易失性儲存器的比較
- Ceph儲存後端ObjectStore架構和技術演進後端Object架構
- 《MySQL 基礎篇》十:邏輯架構和儲存引擎MySql架構儲存引擎
- 容器引擎Docker和容器編排kubernetes如何優雅的收集容器日誌Docker
- 容器、Docker與Kubernetes——Kubernetes的配置入門Docker
- Hybris service layer和SAP CRM WebClient UI架構的橫向比較WebclientUI架構
- 在Linux中,如何使用Docker和Kubernetes管理容器?LinuxDocker
- Streaming Data Warehouse 儲存:需求與架構架構
- 容器附加儲存(CAS)是雲原生儲存
- 容器儲存介面--CSI
- 淺析雲端儲存的TCS和LCA兩大架構架構
- Docker storage儲存Docker
- docker 儲存映象Docker
- Jenkins vs Kubernetes:比較 DevOps 工具Jenkinsdev
- 從零開始入門 K8s | Kubernetes 儲存架構及外掛使用K8S架構
- 大前端技術選型總結和一些架構比較前端架構