一個虛擬化老兵的Docker淺見-2
筆者在上一篇文章中分析了Docker為什么會在當前這個時間點火起來,Docker與虛擬化的技術對比,以及我們該怎么辦等相關問題。那具體來說,如何構建一個融合Docker與虛擬化的平臺呢,筆者將按照理想平臺DCOS應該包括什么,現有四種開源解決方案的介紹和比較,以及我們如何構筑DCOS平臺的思路來展開本文。由于筆者水平有限,認識不一定正確,歡迎批評指正。
一. 理想平臺的需求和架構
筆者認為融合了Docker與虛擬化的云平臺應該包括三個層次:資源管理層,虛擬化層,服務層。當然docker與虛擬化會共用大部分模塊,這也是筆者認為要構筑融合平臺的好處。
資源管理層至少包括:計算資源管理,存儲資源管理,網絡管理,安全管理。
虛擬化層肯定包括:虛擬化引擎(一般情況下就是KVM),容器引擎(一般情況下就是Docker)
服務層至少包括:高可用性,編排管理,容災備份,服務發現,應用發布,應用升級,自感擴容,編排管理,平臺高可用性,生命周期管理,用戶權限認證,監控報警,日志審計,負載均衡,鏡像管理,系統維護等模塊。
二. 開源解決方案介紹和對比
1. Everybody wants to rule the world
這是一個群雄逐鹿的時代,Kubernetes,Docker,Mesos,Openstack們都想“控制”云世界。
2.Kubernetes方案
Kubernetes的優勢在于它是第一個Docker集群管理平臺,第一個提出并實現了Pod,Replication,Services Discovery等概念。關于技術細節,筆者在此不做過多介紹,請自行百度,Google,或者自己搭建平臺體驗。下面的其他方案也相同。
3.Docker Swarm
Swarm是Docker在2014年12月份新發布的Docker集群管理工具。Swarm可管理Docker集群,管理和分配計算資源,也包含服務發現(可以選用etcd,zookeeper,Consul),容器編排等功能。Swarm的優勢是與Docker接口API統一。
4.Mesos
Mesos的目標是下一代數據中心操作系統(DCOS),其最核心功能在于集群管理,計算資源管理,任務分發,原本用作Hadoop等分布式任務管理。從0.20版開始,Mesos支持Docker形式的任務調度(主要看中Docker的任務隔離,資源限制,隨鏡像發布)。在Mesos之上,Marathon可以用作為Docker編排和生命周期管理。
5.OpenStack Magnum方案
為保證云計算領域的領先地位,2015年5月份溫哥華峰會上,OpenStack提出了“集成引擎”的思路。其實說白了就是在Kubernetes、Swarm和Mesos的上面套一層,用OpenStack Magnum的接口來管理它們。OpenStack的優勢在于在虛擬化上積累的多租戶,編排,存儲以及網絡能力。
筆者認為這個方案有點另類,OpenStack不會甘心僅僅做個"集成商"的。筆者大膽猜測,憑借強大的內生能力,OpenStack Magnum一定會慢慢學習和消化Kubernetes、Swarm和Mesos的優勢,并最終替代它們變成另一個"Nova",這個"Nova"操作和管理Docker。
6. 方案比較
下面對四種方案進行全方位的比較,按照0(沒有此項功能),1(有,但不完善),2(有,且比較完善)。
三.技術思路
筆者推薦的思路還是與IaaS平臺混合在一起,用戶需要什么提供什么,并且這些功能模塊盡量獨立,之間的耦合度不高,在特定場景下不需要的功能模塊,可以選擇不部署。下面是筆者對幾個關鍵點的技術思路(僅僅是思路啊)
1. 關于存儲
a. 將Docker的rootfs以及volume跑在Ceph集群中。據說Docker社區即將實現Ceph RBD Graph Driver。
b.Ceph模塊Docker化,與Docker節點統一起來,實現超融合理念。
2. 關于網絡
a. 與虛擬化一體實現DHCP,實際IP分配通過Docker 1.9以上的--ip參數設定
b. 利用ovs實現Docker與VM互聯互通
c. 用vxlan tunnel實現大二層
3. 關于服務發現和負載均衡
服務發現可以讓一個應用或者組件發現其運行環境以及其它應用或組件的信息。當一個服務啟動時,注冊自身信息,例如,一個MySQL數據庫服務會在這注冊它運行的ip和端口。負載均衡的策略可根據負載在Ngnix和DNS上體現,不如發現某個負載太高,就Ngnix或者DNS到另外的Docker Server上。
4. 關于高可用性
a. 靜態遷移&Docker HA:ceph共享存儲 + IP設定 == 可實現Docker遷移功能
b. 動態遷移: 熱遷移CRIU(凍結進程 --> 保存在存儲上 --> 讀取并恢復出來)
5. 關于應用升級和無感擴容
一個Set跑一個業務,由多個Docker組成,支持灰度升級,如果監控到負載太高,也可在Set內增加docker數量。
6. 關于用戶,租戶管理
用戶管理,權限管理,三權分立,租戶管理等功能與IaaS平臺無差異,可完全復用。
7. 關于日志
a. Docker內日志:對于每一個創建的Docker容器,Docker Daemon均會在內部創建一個goroutine來監聽容器內部進程的標準輸出stdout以及標準錯誤stderr,并將內容傳遞至日志文件中。
b. 操作日志:支持日志查詢,審計,下載等功能。操作日志至少需保存:用戶,操作對象,狀態,用戶IP,時間等五個元素。
本文作者徐安,2010年開始投身云計算,目前是漢柏科技虛擬化產品技術負責人。
來自: http://dockone.io/article/1095