伴隨着Docker公司的容器技術生態在雲計算市場中站穩了腳跟,圍繞着Docker項目進行的各個層次的集成與創新產品,也如雨後春筍般出如今這個新興市場當中。
而Docker公司,不失時機地發佈了Docker Compose、Swarm和Machine「三件套」,在重定義PaaS走出了最關鍵的一步。docker
這段時間大量圍繞着Docker項目的網絡、存儲、監控、CI/CD,甚至UI項目紛紛出臺,涌現出如Rancher、Tutum這樣在開源與商業上均取得了巨大成功的創業公司。segmentfault
2014~2015年間,容器社區真是熱鬧非凡。設計模式
繁榮背後,更多擔心,即對Docker公司商業化戰略的種種顧慮。網絡
Docker項目此時已經成爲Docker公司一個商業產品。而開源,只是Docker公司吸引開發者羣體的一個重要手段。
不過這麼多年來,開源社區的商業化其實都是相似的思路,無非是高不高調、心不心急的問題罷了。架構
真正令大多數人不滿意的是Docker公司在Docker開源項目的發展上,始終保持絕對權威,並在多場合挑戰其餘玩家(CoreOS、RedHat,谷歌微軟)的切身利益。負載均衡
其實在Docker項目剛剛興起時
Google也開源了一個在內部使用多年、經歷過生產環境驗證的Linux容器框架
然而,面對Docker項目的強勢崛起,這個對用戶沒那麼友好的Google容器項目根本沒有招架之力。因此,知難而退的Google公司,向Docker公司表示了合做的願望:關停這個項目,和Docker公司共同推動一箇中立的容器運行時(container runtime)庫做爲Docker項目的核心依賴。ide
不過,Docker公司並無認同這個明顯會削弱本身地位的提議,還在不久後,本身發佈了一個容器運行時庫微服務
此次匆忙的、由一家主導的、並帶有戰略性考量的重構,成了Libcontainer被社區長期詬病代碼可讀性差、可維護性不強的一個重要緣由。工具
至此,Docker公司在容器運行時層面上的強硬態度,以及Docker項目在高速迭代中表現出來的不穩定和頻繁變動的問題,開始讓社區叫苦連天。
這種情緒在2015年達到了一個小高潮,容器領域的其餘幾位玩家開始商議「切割」Docker項目的話語權 --- 成立一箇中立的基金會。
2015年6月22日,由Docker公司牽頭,CoreOS、Google、RedHat等公司共同宣佈,Docker公司將Libcontainer捐出,並更名爲
交由一個徹底中立的基金會管理,而後以runc爲依據,你們共同制定一套容器和鏡像的標準和規範。
這套標準和規範,就是
OCI的提出,意在將容器運行時和鏡像的實現從Docker項目中徹底剝離出來
OCI更可能是高端玩家出於自身利益一個妥協結果
儘管Docker是OCI的發起者和創始成員,卻不多在OCI的技術推動和標準制定等事務上扮演關鍵角色,也沒動力推動這些所謂標準。
這也是OCI組織效率持續低下的根本緣由。
眼看着OCI無力改變Docker公司容器領域一家獨大現狀,Google和RedHat等第二把武器擺上了檯面。
Docker之因此不擔憂OCI威脅,就在於它的Docker項目是容器生態的事實標準,而它所維護的Docker社區也足夠龐大。
但是,一旦這場鬥爭被轉移到容器之上的平臺層,或者說PaaS層,Docker公司的競爭優點捉襟見肘
在這個領域裏,像Google和RedHat這樣的成熟公司,都擁有着深厚的技術積累
而像CoreOS這樣的創業公司,也擁有像Etcd這樣被普遍使用的開源基礎設施項目。
但是Docker公司呢?它卻只有一個Swarm。
因此此次,Google、RedHat等開源基礎設施領域玩家們,發起名爲
的基金會
基金會但願,以 Kubernetes
項目爲基礎,創建一個由開源基礎設施領域廠商主導的、按照獨立基金會方式運營
的平臺級社區,來對抗以Docker公司爲核心的容器商業生態
。
CNCF社區就須要至少確保兩件事情
在容器編排領域,Kubernetes項目須要面對來自Docker公司和Mesos社區兩個方向的壓力。
這兩個方向,也是大多數人作容器集羣管理項目時最容易想到的兩個出發點
也正由於如此,Kubernetes項目若是繼續在這兩個方向上作文章恐怕就不太明智了。
Kubernetes選擇的應對方式是
Kubernetes項目早期的GitHub Issue和Feature大多來自於Borg和Omega系統的內部特性
落到Kubernetes項目上,就是Pod、Sidecar等功能和設計模式。
Kubernetes項目的基礎特性是Google公司在容器化基礎設施領域多年來實踐經驗的沉澱與昇華
是Kubernetes項目可以從一開始就避免同Swarm和Mesos社區同質化的重要手段!
如何把這些先進的思想經過技術手段在開源社區落地,並培育出一個認同這些理念的生態?
RedHat就發揮了重要做用。
當時Kubernetes團隊規模很小,可以投入的工程能力也十分緊張,而這偏偏是RedHat的長處
更可貴的是,RedHat是世界上爲數很少的、能真正理解開源社區運做和項目研發真諦的合做夥伴。
因此,RedHat與Google聯盟的成立,不只保證了RedHat在Kubernetes項目上的影響力,也正式開啓了容器編排領域「三國鼎立」的局面。
Mesos社區與容器技術的關係,更像是「借勢」,而不是這個領域真正的參與者和領導者
這個事實,加上它所屬的Apache社區固有的封閉性,致使了Mesos社區雖然技術最爲成熟,卻在容器編排領域鮮有創新
這也是爲什麼Google很快就把注意力轉向了激進的Docker公司
Docker公司對Mesos社區也是相似的見解,因此從一開始,Docker公司就把應對Kubernetes項目的競爭擺在了首要位置:一方面,不斷強調「Docker Native」的「重要性」,另外一方面,與Kubernetes項目在多個場合進行了直接的碰撞。
發展態勢,很快超過Docker公司的預期。
Kubernetes項目並無跟Swarm項目展開同質化的競爭,因此「Docker Native」的說辭並無太大的殺傷力
相反地,Kubernetes項目讓人耳目一新的設計理念和號召力,很快就構建出了一個不同凡響的容器編排與管理的生態。
就這樣,Kubernetes項目在GitHub上的各項指標開始一騎絕塵,將Swarm項目遠遠地甩在了身後。
有了這個基礎,CNCF社區就能夠放心地解決第二個問題了。
在已經囊括了容器監控事實標準的
項目以後
CNCF社區迅速在成員項目中添加了
等一系列容器生態的知名工具和項目。
而在看到了CNCF社區對用戶表現出來的巨大吸引力以後,大量的公司和創業團隊也開始專門針對CNCF社區而非Docker公司制定推廣策略。
面對這樣的競爭態勢,Docker公司決定更進一步
在2016年,Docker公司宣佈了一個震驚全部人的計劃:放棄現有的Swarm項目,將容器編排和集羣管理功能所有內置到Docker項目中
顯然,Docker公司意識到了Swarm項目目前惟一的競爭優點,就是跟Docker項目的無縫集成。那麼,如何讓這種優點最大化呢?那就是把Swarm內置到Docker項目當中。
實際上,從工程角度來看,這種作法的風險很大。
內置容器編排、集羣管理和負載均衡能力,當然可使得Docker項目的邊界直接擴大到一個完整的PaaS項目的範疇,但這種變動帶來的技術複雜度和維護難度,長遠來看對Docker項目是不利的。
不過,在當時的大環境下,Docker公司的選擇恐怕也帶有一絲背注一擲的意味。
而Kubernetes的應對策略則是反其道而行之,開始在整個社區推動「民主化」架構
從API到容器運行時的每一層,Kubernetes項目都爲開發者暴露出了能夠擴展的插件機制
鼓勵用戶經過代碼的方式介入到Kubernetes項目的每個階段。
Kubernetes項目的這個變革的效果立竿見影,很快在整個容器社區中催生出了大量的、基於Kubernetes API和擴展接口的二次創新工做,好比:
就這樣,在這種鼓勵二次創新的總體氛圍當中,Kubernetes社區在2016年以後獲得了空前的發展
不一樣於以前侷限於「打包、發佈」這樣的PaaS化路線,這一次容器社區的繁榮,是一次徹底以Kubernetes項目爲核心的「百花爭鳴」。
面對Kubernetes社區的崛起和壯大,Docker公司也不得不面對本身豪賭失敗的現實
但在早前拒絕了微軟的天價收購以後,Docker公司實際上已經沒有什麼迴旋餘地,只能選擇逐步放棄開源社區而專一於本身的商業化轉型。
因此,從2017年開始,Docker公司先是將Docker項目的容器運行時部分
捐贈給CNCF社區,標誌着Docker項目已經全面升級成爲一個PaaS平臺
緊接着,Docker公司宣佈將Docker項目更名爲
而後交給社區自行維護,而Docker公司的商業產品將佔有Docker這個註冊商標。
Docker公司這些舉措背後的含義很是明確:它將全面放棄在開源社區同Kubernetes生態的競爭,轉而專一於本身的商業業務
而且經過將Docker項目更名爲Moby的舉動,將本來屬於Docker社區的用戶轉化成了本身的客戶。
2017年10月,Docker公司出人意料地宣佈,將在本身的主打產品Docker企業版中內置Kubernetes項目
持續了近兩年之久的「編排之爭」落下帷幕!
2018年1月30日,RedHat斥資2.5億美圓收購CoreOS
2018年3月28日,一切紛爭的始做俑者,Docker公司的CTO Solomon Hykes宣佈辭職,紛紛擾擾的容器技術圈子,至此塵埃落定。
容器技術圈子在短短几年裏發生了不少變數,但不少事情其實也都在情理之中。就像Docker這樣一家創業公司,在經過開源社區的運做取得了巨大的成功以後,就不得不面對來自整個雲計算產業的競爭和圍剿。而這個產業的壟斷特性,對於Docker這樣的技術型創業公司其實天生就不友好。
在這種局勢下,接受微軟的天價收購,在大多數人看來都是一個很是明智和實際的選擇。但是Solomon Hykes卻多少帶有一些理想主義的影子,既然不甘於「寄人籬下」,那他就必須帶領Docker公司去對抗來自整個雲計算產業的壓力。
只不過,Docker公司最後選擇的對抗方式,是將開源項目與商業產品緊密綁定,打造了一個極端封閉的技術生態。而這,其實違背了Docker項目與開發者保持親密關係的初衷。
相比之下,Kubernetes社區,正是以一種更加溫和的方式,承接了Docker項目的未盡事業,即:以開發者爲核心,構建一個相對民主和開放的容器生態。
這也是爲什麼,Kubernetes項目的成功實際上是必然的。
Docker公司在過去五年裏的風雲變幻,以及Solomon Hykes本人的傳奇經歷,都已經在雲計算的長河中留下了濃墨重彩的一筆。