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