
容器管理和編排將成云計算主戰(zhàn)場
從云化的誘因說起。中國云計算實踐八年多,市場認知逐漸提升,銳意創(chuàng)新企業(yè)對云的期待已經不是資源彈性、成本優(yōu)勢那么簡單,業(yè)務的靈活性和穩(wěn)定性才是直接目標,當然這背后的應用彈性是研發(fā)部門要考慮的,所以 DevOps 的理念正在刺激技術團隊的神經,敏捷、靈活、高效的容器技術和微服務架構越來越被關注。
Docker 的理念為“Build, Ship and Run Any App, Anywhere”,通過容器和鏡像的特性讓 DevOps 變得容易,但 Docker 的前景,更在于支持分布式、服務化設計,實現一系列可獨立開發(fā)、獨立部署和獨立擴展的服務組合,以保證業(yè)務的靈活性和穩(wěn)定性。當前AWS、微軟、阿里云、IBM、Redhat、VMWare、華為、Intel 等各大公有云和私有云提供商都不約而同地大力投資 Docker,實際上就是認可了這樣的趨勢。當然,各家技術的選擇和產品化的程度是另一回事了。
符合企業(yè)需要的容器云技術架構,需要符合DevOps、微服務的方向,能支持分布式應用,故而合適的容器的管理和編排(Orchestration)工具尤為重要。初級的編排,是資源的編排,即針對物理機或者虛擬機;但更高層次的是服務的編排,需要對架構層次在整體上有一個完整的定義。新浪微博平臺運維架構師王關勝就曾經分享說,容器編排的核心內容包括服務定義、資源管理、容器調度、服務檢測和服務發(fā)現等五個方面。
所以說,容器的管理和編排正在成為容器云的主戰(zhàn)場。Docker 公司推 Swarm 技術,收購專注于編排的 Conductant 公司,正是為此。
Docker Swarm vs Kubernetes
當前主流的容器集群管理技術,包括了 Docker 官方的 Docker Swarm、Twitter 背書的 Mesos 和 Google 背書的 Kubernetes。由于Apache Mesos 只是一個分布式內核,目前的發(fā)展方向是數據中心操作系統(tǒng)(DCOS),它同時支持 Marathon、Kubernetes 和 Swarm 等多種框架,連 Mesosphere 也是 Kubernetes 生態(tài)的一員,從編排的角度,討論 Mesos 意義不大,故而只對比 Docker Swarm 和 Kubernetes。
1. Docker Swarm
Docker Swarm 是 Docker 官方推出的容器管理工具,支持容器的跨宿主節(jié)點的集群管理,這讓傳統(tǒng)的云計算資源管理方式有了新的發(fā)展。Docker Swarm 的推出,也是 Docker 從善如流的結果。因為 Docker 曾在很長一段時間內只能運行在單個宿主機上,這讓外界和社區(qū)感到不滿意。于是 Docker 在2014年12月推出了第一個版本的 Swarm,同時發(fā)布的 Docker 工具還有 Machine 和 Compose - 后者是 Docker 收購來輔助完善容器編排的產品。
年輕的“三劍客”并不能立即讓 Docker 集群對分布式應用的支持達到爐火純青的境界,外部出自 Google 的 Kubernetes 項目橫空出世,提供另一種方案,而內部的 Swarm 目前也正在不斷完善之中。Swarm 的最新進化,是在今年 6 月 DockerCon 大會上發(fā)布的 Docker 1.12 內置了 Docker 公司聲稱的“最佳的容器編排工具”——Swarm 模式(Swarm mode),引入了服務的概念,不再以容器作為主要管理對象單元,不再需要額外的KV存儲支持服務模型,讓擴容縮容、服務發(fā)現、滾動更新、負載均衡和路由等功能都更容易實現。

作為 Docker 的編排模式,Swarm mode 是通過獨立開發(fā)的 SwarmKit 項目來實現的。SwarmKit 的主要功能包括節(jié)點發(fā)現、基于raft算法的一致性和任務調度等。SwarmKit 通過 Containerd 類似的方式接入Docker Engine,最終通過新的 Docker API 對外提供容器集群服務。根據 Docker 公司的態(tài)度,Swarm mode 將會取代之前的 Docker Swarm。新的 Swarm 吸收了 Kubernetes 的一些優(yōu)點,但作為內置的可選工具讓開發(fā)者更易于使用——不用另外部署第三方的 Kubernetes 了。

2. Kubernetes
Kubernetes 是一個以 Google Borg 為原型的開源項目。Borg 是 Google 內部使用的集群管理工具,迄今已在 Google 生產環(huán)境中運行15年,說久經考驗并不過分。Google 新書《Site Reliability Engineering - How Google Runs Production Systems》里面強調,其全球百萬臺服務器正是通過 Borg 來實現高效管理的,可謂能力卓絕。本來 Borg 是 Google 的秘密武器,但 Google 為了贏得容器云之戰(zhàn),基于 Borg 的經驗,結合了來自社區(qū)的頂級創(chuàng)意和實踐,構建了支持 Docker 容器的 Kubernetes,并將后者開源。
Kubernetes 功能完善,資源調度、服務發(fā)現、運行監(jiān)控、擴容縮容、負載均衡、灰度升級、失敗冗余、容災恢復、DevOps等樣樣精通,可實現大規(guī)模、分布式、高可用的 Docker 集群,Kubernetes面向 PaaS,它直接為解決業(yè)務的分布式架構、服務化設計,完整定義了構建業(yè)務系統(tǒng)的標準化架構層,即Cluster、Node、Pod、Label等一系列的抽象都是定義好的,為服務編排提供了一個簡單、輕量級的方式。

Kubernetes 目前也已經被大量的云計算技術提供商和用戶采用,如 eBay、Yahoo、微軟、IBM、英特爾、華為、VMware、HPE、Mirantis、網易、普元、亞信等,當然還包括國內的多家容器云初創(chuàng)公司。
Kubernetes 社區(qū)的支持者,則包括(但不限于) Google、Redhat、CoreOS、華為、浙大SEL(浙江大學軟件工程實驗室)、網易等。Google 卯足了勁兒推廣 Kubernetes,在去年不僅加入 OpenStack 基金會,還聯合其他20家公司成立開源組織 Cloud Native Computing Foundation(CNCF),就是要保證 Kubernetes 未來在任何基礎設施(公有云、私有云、裸機)上都能良好運行,并將推動開源以及合作伙伴社區(qū)共同開發(fā)容器工具集。

3. 主要特點對比
結合上文,將 Swarm 和 Kubernetes 最新的主要特點對比如下,可見 Kubernetes 增加了很多應用級別的功能,適用于快速應用的部署和維護。
結論
基于 Borg 成熟的經驗打造的 Kubernetes,為容器編排管理提供了完整的開源方案,并且社區(qū)活躍,生態(tài)完善,積累了大量分布式、服務化系統(tǒng)架構的最佳實踐。SwarmKit 當然還會迭代會更加優(yōu)秀的版本,但一來模式有根本的不同,二來完善還需要時間。同時,Docker 公司對未來容器編排管理的技術路線也有挑戰(zhàn),把編排的精華加入 Docker,自然有利于開發(fā)者獲得集群的能力,卻也顛覆了系統(tǒng)級程序專注、松耦合的理念,新架構在生產環(huán)境中的穩(wěn)定可靠,可能還需要更多的說服力。此外,Docker 推出不完全開源的 Docker Datacenter 商業(yè)套件,也有可能讓社區(qū)和生態(tài)玩家對 Docker Engine 的商業(yè)傾向有所擔憂。
所以,從設計模式、工具鏈、最佳實踐和商業(yè)模式來看,Kubernetes 都是目前更加讓人放心的容器編排管理技術。