在云原生技術實踐峰會召開前夕,匆匆奔赴北京的我,見到了剛剛從美國飛回來,卻毫無時差之擾的陳愷——靈雀云的 CTO。
雖然我早就和靈雀云有了聯(lián)系,也有好幾位朋友在靈雀云任職,不過作為國內(nèi)新銳云原生廠商靈雀云的創(chuàng)始人之一的陳愷,我之前并沒有直接接觸過。雖然我們是初次相識,但是在聊到了開源,聊到云技術,我們以云做老酒,以開源為佐酒菜,很快就儼然如同老友般進入了旁若無人的狀態(tài)——旁邊的朋友被我們暫時性忽視了,雖然這張合影就是她幫我們照的。
濫觴始于云計算。
緣起
陳愷和左玥等人在創(chuàng)立靈雀云之前,他們都曾在微軟 Azure 從事云計算領域的專業(yè)研究。回憶起那時候,陳愷說,那時他們也在想象云里面的應用應該長什么樣子,設計最早版本的“云服務模型”、“云服務運行時”,而現(xiàn)在回過頭看,其實云計算的發(fā)展已經(jīng)千差萬別。
2013 年 Docker 出現(xiàn)以后,左玥和陳愷他們第一時間就意識到容器技術會很有影響力,它重新了定義云技術之后發(fā)展的路徑,這恍然在他們面前掀開了一個新的時代,于是靈雀云誕生了。
云技術領域發(fā)展演變的非常快,事實上,在云計算早期并不能預見到如今的云計算格局。“早期我們嘗試過很多東西,總的想法是覺得容器就像是一種輕量級虛擬機,一種新的虛擬化技術。就像虛擬機需要虛擬機平臺去作為它的管理平臺一樣,容器也需要一個容器云平臺,所以我們早期想做的就是容器云平臺,這一點一直沒變,現(xiàn)在也是在做企業(yè)級的容器平臺。”陳愷說,“我們最早的技術選型是 Mesos 技術棧,經(jīng)歷了幾次大的改變,包括從 Mesos 轉(zhuǎn)到支持當時的三種主流的調(diào)度系統(tǒng),然后開始傾向于Kubernetes,到最后全面轉(zhuǎn)向 Kubernetes,以及最近在架構(gòu)上和 Kubernetes全面對齊,把我們的平臺做成一個 Kubernetes 原生的平臺,技術上一直在做升級。”
云原生吞噬一切
不知不覺之間,云原生已經(jīng)吞噬了整個世界,如今,云原生已經(jīng)是技術界最時髦的詞匯之一。而應運而生并推動了這一切發(fā)生的云原生計算基金會(CNCF)也在不同的時期、不同的場所,對云原生做了不同角度的解讀。那么作為一家很早就涉入云計算領域的新銳力量,陳愷對云原生的理解是什么呢?
陳愷說,“CNCF 旗下涵蓋這么多云計算的技術、產(chǎn)品和服務,所以它對‘云原生’的定義必然會比較寬泛,但的確,‘云原生’不是一個特定的技術或者一種方法,很難把它精確的定義,也不應該把它和具體的技術對等,比如說把它直接跟 Kubernetes 掛鉤,跟 Kubernetes 沒關系就不是云原生?跟 Kubernetes 有關系就叫云原生?這兩者都是不對的。”
他接著補充說,“我對云原生定義的觀點也是比較寬泛的,(云原生)就是讓應用能夠最大化的釋放云計算生產(chǎn)力的一系列的思維方式、最佳實踐和技術體系,這里的關鍵詞是讓應用去釋放云計算最大的生產(chǎn)力。這是關鍵。所有的云原生我覺得都是首先應該圍繞應用的。什么叫‘云原生’?主要是以應用為中心的。‘原生’這個名字看起來起的不是很好,聽上去似乎是只有在云上生出來的才叫‘云原生’,或者只有在公有云上才叫‘云原生’,并不是。關鍵不是說你在哪里跑你的應用,而是你是不是能夠釋放云的生產(chǎn)力——廣義的云的生產(chǎn)力。”
在容器編排市場尚三分天下的時候,很多容器服務商都同時支持三種主流的編排系統(tǒng),當時有一些觀點認為這種三分格局會持續(xù)比較久,然而 Kubernetes 迅速崛起,很快就一家獨大地統(tǒng)治了容器編排市場。
陳愷說,“我覺得當時 Kubernetes 可以很快的從編排之爭當中勝出,并沒有那么讓人吃驚。為什么我們比較早的時候就開始往 Kubernetes 發(fā)力?其實第一個觸發(fā)的點比較偶然。那時經(jīng)常會有人問起三種容器編排系統(tǒng)各自的優(yōu)勢是什么?我們做了一些研究,業(yè)界有一些對比,當時我印象比較深的是一個細節(jié),我覺得這才是關鍵——有一項對比的是基于這三種技術有哪些商業(yè)版?基于 Docker Swarm 的有一個商業(yè)版 Docker EE;Mesos 有一個商業(yè)版 MesosPhere;基于 Kubernetes 有好多商業(yè)版——這是本質(zhì)的區(qū)別。這一點對它們的社區(qū)的發(fā)展速度和后續(xù)影響很廣,因為它是開放式的治理。Kubernetes 雖然是谷歌發(fā)明的,但是它是開放式治理,背后有很多商業(yè)版。如果從開源軟件本身社區(qū)發(fā)展角度看,很關鍵一點是上面有多少商業(yè)版,商業(yè)版越多說明從開源軟件里面可以獲利的公司越多,這樣就有了正向的良性循環(huán),會有更多資源投進來,社區(qū)里面參與的人就會更多,最后的發(fā)展會更好,生態(tài)會很繁榮。當時從這一點我們就覺得這個生態(tài)肯定會贏。”
Kubernetes 一統(tǒng)容器編排市場的今天,業(yè)界一些專家對此有所憂慮,擔心這種壟斷會形成市場壓制。從長期來看,如果 Kubernetes 的發(fā)展會形成類似 Android 一樣的巨頭化,那么作為下游廠商,靈雀云是如何看待和應對這種發(fā)展變化的呢?
陳愷說,“回到壟斷這個問題,如果是商業(yè)軟件的話會有壟斷這個問題,如果是開源軟件的話,它的治理模式有可能是封閉式的,也有可能是開放式的,而 Kubernetes 是一個開放式的治理模式,會有一些廠商有更大的影響力,但不是被一家完全控制,所以我覺得從這個角度來說,談不上壟斷,更多的是一個標準。它可能更多像 Linux 而不像是 Android。從標準的角度來說,肯定是利大于弊,而且是遠大于弊。因為有了標準,大家都圍繞著標準做投入,風險就大大降低,可以放心去投入,也就會有越來越多的技術廠商會向它靠攏。”
靈雀云的 Kubernetes 生態(tài)
靈雀云在圍繞 Kubernetes 生態(tài)方面也做了自己的發(fā)行版,他們是如何在符合 Kubernetes 標準的基礎上形成差異化的服務和產(chǎn)品的呢?
“Kubernetes 發(fā)行版首先必須是跟 Kubernetes 兼容的。在 Kubernetes 上可以增加各種各樣的能力,但它本身的第一屬性一定是一個真正的 Kubernetes。如果為了做差異性,把它做得不像 Kubernetes,不兼容會是個很大的問題。”陳愷說,“我們走的比這個更深一步,我們的 ACP 2.0 是把整個平臺都做成 Kubernetes 原生的,因為 Kubernetes 本質(zhì)上是聲明式 API 加上基于控制器模型的架構(gòu)設計范式,容器編排相當于它的一個副產(chǎn)品,是它基于這個架構(gòu)的一種應用,當然也可以把這種架構(gòu)應用到對任意資源的編排。前一段時間有一篇很多人轉(zhuǎn)發(fā)的《Kubernetes 編排一切》的文章,講的就是這個事情,它不光可以用來編排容器,可以做各種各樣的事情。我很贊同這個觀點。”
陳愷在云原生技術實踐峰會 2019 上演講
靈雀云是從 2017 年底的時候決定這樣做的,當時的做法是一些新的產(chǎn)品開始在新的架構(gòu)上做一些實踐,比如 DevOps 平臺、基于 Istio 的 Service Mesh 等產(chǎn)品,完全基于新的架構(gòu)來做。今年年初,靈雀云認為所有方面都成熟了:第一,方向肯定沒問題,Kubernetes 編排一切;第二,對如何基于 Kubernetes 的架構(gòu)構(gòu)建上層產(chǎn)品有了更多的經(jīng)驗和體會。靈雀云于是把以前產(chǎn)品上的所有功能都逐漸遷移到 Kubernetes 原生架構(gòu)上,重新融合到統(tǒng)一的架構(gòu)里面,這就是 ACP 2.0。在此之上靈雀云還做了一些差異化。
靈雀云在這里的技術棧分為三層:
最底層的產(chǎn)品是一個 Kubernetes 發(fā)行版,Kubernetes 是一個開源的技術,并不是一個平臺,大多數(shù)企業(yè)做不到直接把它當一個平臺用。靈雀云的做法是將 Kubernetes 技術變成一個企業(yè)就緒的 Kubernetes 發(fā)行版。
再往上是 ACP 層,定位是云原生應用賦能平臺。包含有三個子產(chǎn)品:容器平臺、DevOps 平臺和基于 Istio 的 Service Mesh 產(chǎn)品。容器平臺和發(fā)行版最接近,但對發(fā)行版進行了大量擴展,比如在發(fā)行版之上增加了多集群管理和企業(yè)級多租戶。ACP 把單一的 Kubernetes 集群變成企業(yè)平臺級的產(chǎn)品,經(jīng)過了三年多 100+ 企業(yè)客戶生產(chǎn)環(huán)境的考驗,而且考慮到更多開發(fā)者的場景。DevOps 也基于 Kubernetes 原生,用 Kubernetes 去編排所有的工具,定位是一個開放式 DevOps 工具鏈集成和編排的平臺。
在此之上還有一層是靈雀云新的 ACE 3.0,它的定位是一個企業(yè)級的 PaaS 平臺,或者用現(xiàn)在更時髦的說法,可以稱之為企業(yè)技術中臺,集成了更多企業(yè)需要的其他服務,比如第三方的中間件、開發(fā)框架等。它是個完整的技術中臺,以容器平臺為底座,以云原生黃金三角為核心,其他服務在上面做成一個個插件。這部分主要是和生態(tài)合作伙伴合作,國內(nèi)外的一些最優(yōu)秀的 PaaS 類服務都可以放在里面,為企業(yè)提供完整的解決方案。
云原生之于微服務和 DevOps
我們知道微服務、DevOps 等模式在云原生概念發(fā)展起來之前就已經(jīng)存在,但是隨著云原生的發(fā)展,似乎給它們注入了更多的活力。
陳愷認為云原生顯著地推動了 DevOps、微服務的發(fā)展,對于這一現(xiàn)象他還專門用了一個詞匯來形容:后 Kubernetes。這是在容器和 Kubernetes 出現(xiàn)之后開始對 DevOps 側(cè)的微服務反過來的助推。
他認為,微服務架構(gòu)的本質(zhì)是用運維復雜度為代價去換取敏捷性。企業(yè)至少要考慮兩件事:第一是否真的有這么高的敏捷性需求,值得用那么大的運維代價去替換,第二,假設你有著敏捷性需求,那么多出來的復雜度怎么辦?早期微服務落地會很痛苦,因為大家沒有準備好怎么去應付這個復雜度,而且會低估它。這復雜度是未知的,用未知的復雜度去替代已知的復雜度,這通常都是不好的,所以才會有各種各樣的治理框架出來。其實它需要底下有一個好的基礎設施來支撐它。
容器和微服務天生一對,容器 Kubernetes 的出現(xiàn),對微服務有非常明顯地推動。Kubernetes 作為底層的應用管理平臺非常合適,而且很多微服務里面要考慮的與業(yè)務無關的能力也可以慢慢推到 Kubernetes 里面去。而進一步,Service Mesh 等其上的技術棧就重新定義了微服務技術棧,微服務治理方式發(fā)生了變化,反過來作用到微服務上,形成了新的最佳實踐。
因此,要做微服務應該先容器化,才能解決運維復雜度的問題,容器化的服務應該跑在 Kubernetes 之上;如果進一步做服務治理,應該往 Service Mesh 方向走,Service Mesh 是基于 Kubernetes 平臺的微服務治理的最佳實踐。
云原生之于 DevOps 也是如此。早期大家很多的精力在持續(xù)集成上面,比如 Jenkins 最初是作為 CI 工具出現(xiàn)的,而有了容器和 Kubernetes 之后,持續(xù)集成變得簡化了,最終生成 Docker 鏡像就好。重心開始轉(zhuǎn)到部署,轉(zhuǎn)到 CD 上。而且,現(xiàn)在的 DevOps 實踐或 CI/CD 通常會把 Kubernetes 作為最重要的部署目標。也就是說CI會圍繞容器鏡像,CD 會圍繞 Kubernetes。這是容器和 Kubernetes 帶給 DevOps 的影響,基礎設施越強大,對 DevOps、微服務就越有幫助。以 Kubernetes 為核心的基礎設施變成新的標準,DevOps 和微服務的一些最佳實踐都會圍繞它去改變。
源于開源,茁壯于開源
云計算構(gòu)筑在開源之上,靈雀云的基礎設施和服務也構(gòu)建在開源之上,那么靈雀云是如何擁抱開源和貢獻開源的?
陳愷說,“有幾個開源社區(qū)跟我們是非常相關的,最早的時候是 Docker 社區(qū),現(xiàn)在 Kubernetes 則是跟我們關系最大的開源社區(qū)。我們核心的產(chǎn)品是容器、DevOps 和微服務三部分。Jenkins、Istio 等相關開源項目是我們的重點,我們非常重視在開源社區(qū)的投入。我們的許多工程師會參與其中,對社區(qū)進行貢獻,也會開源一些項目,我們在一步一步持續(xù)地做這件事情。我們首先會選擇一些偏底層的技術或者機制,選擇那些有足夠亮點,真的被需要的項目和技術開源出來。”
目前靈雀云已經(jīng)開源了的項目,包括基于 OVN 的網(wǎng)絡插件 Kube-OVN,它是把 OVN 的網(wǎng)絡和 Kubernetes 所集成的網(wǎng)絡插件,F(xiàn)在該項目在國內(nèi)外都受到關注,也有來自外部貢獻者參與。另外一個開源的項目叫 Captain,是一個基于 Helm v3 標準的 Kubernetes 控制器,對 Helm 應用分發(fā)進行改進。
后續(xù)靈雀云還計劃將更完整的東西放出來,比如靈雀云的 Kubernetes 發(fā)行版,供社區(qū)用戶用來管理自己的 Kubernetes 平臺,可以達到和使用靈雀云產(chǎn)品接近的體驗。另外靈雀云也計劃將其 ACP 釋放社區(qū)版或者開源版本出來。陳愷說,“我們很樂意把它開源出來,因為這是一個標準的產(chǎn)品,我們讓它較早期的接觸更多用戶,也能得到更多反饋,甚至吸收一些外部的貢獻者參與進來。”
尾聲
我采訪過很多技術領袖和技術專家,不過陳愷的這場采訪讓我有一點不同的感受。一場對話下來,陳愷給我的感覺如同多年的老友一樣言無不盡,而他對于我提到的每個話題,都非常認真、仔細的做了闡述,讓人感到濃濃的專業(yè)技術風格。我想,這就是陳愷的技術初心,也是靈雀云一直以來的風格吧。
“穿山甲專訪”欄目是 Linux 中國社區(qū)推出的面向開源界、互聯(lián)網(wǎng)技術圈的重要領軍人物的系列采訪,將為大家介紹中國開源領域中一些積極推動開源,諳熟開源思想的技術人,并辨析其思考、挖掘其動因,揭示其背后所發(fā)生的事情,為關注開源、有志于開源的企業(yè)和技術人標出一條路徑。
取名為“穿山甲”寓意有二:取穿山甲挖掘、深入之意來象征技術進步和表征技術領袖的作用;穿山甲是珍稀保護動物,宣傳公益。