
在云原生技術(shù)實(shí)踐峰會(huì )召開(kāi)前夕,匆匆奔赴北京的我,見(jiàn)到了剛剛從美國飛回來(lái),卻毫無(wú)時(shí)差之擾的陳愷——靈雀云的 CTO。
雖然我早就和靈雀云有了聯(lián)系,也有好幾位朋友在靈雀云任職,不過(guò)作為國內新銳云原生廠(chǎng)商靈雀云的創(chuàng )始人之一的陳愷,我之前并沒(méi)有直接接觸過(guò)。雖然我們是初次相識,但是在聊到了開(kāi)源,聊到云技術(shù),我們以云做老酒,以開(kāi)源為佐酒菜,很快就儼然如同老友般進(jìn)入了旁若無(wú)人的狀態(tài)——旁邊的朋友被我們暫時(shí)性忽視了,雖然這張合影就是她幫我們照的。
濫觴始于云計算。
緣起
陳愷和左玥等人在創(chuàng )立靈雀云之前,他們都曾在微軟 Azure 從事云計算領(lǐng)域的專(zhuān)業(yè)研究。回憶起那時(shí)候,陳愷說(shuō),那時(shí)他們也在想象云里面的應用應該長(cháng)什么樣子,設計最早版本的“云服務(wù)模型”、“云服務(wù)運行時(shí)”,而現在回過(guò)頭看,其實(shí)云計算的發(fā)展已經(jīng)千差萬(wàn)別。
2013 年 Docker 出現以后,左玥和陳愷他們第一時(shí)間就意識到容器技術(shù)會(huì )很有影響力,它重新了定義云技術(shù)之后發(fā)展的路徑,這恍然在他們面前掀開(kāi)了一個(gè)新的時(shí)代,于是靈雀云誕生了。
云技術(shù)領(lǐng)域發(fā)展演變的非常快,事實(shí)上,在云計算早期并不能預見(jiàn)到如今的云計算格局。“早期我們嘗試過(guò)很多東西,總的想法是覺(jué)得容器就像是一種輕量級虛擬機,一種新的虛擬化技術(shù)。就像虛擬機需要虛擬機平臺去作為它的管理平臺一樣,容器也需要一個(gè)容器云平臺,所以我們早期想做的就是容器云平臺,這一點(diǎn)一直沒(méi)變,現在也是在做企業(yè)級的容器平臺。”陳愷說(shuō),“我們最早的技術(shù)選型是 Mesos 技術(shù)棧,經(jīng)歷了幾次大的改變,包括從 Mesos 轉到支持當時(shí)的三種主流的調度系統,然后開(kāi)始傾向于Kubernetes,到最后全面轉向 Kubernetes,以及最近在架構上和 Kubernetes全面對齊,把我們的平臺做成一個(gè) Kubernetes 原生的平臺,技術(shù)上一直在做升級。”

云原生吞噬一切
不知不覺(jué)之間,云原生已經(jīng)吞噬了整個(gè)世界,如今,云原生已經(jīng)是技術(shù)界最時(shí)髦的詞匯之一。而應運而生并推動(dòng)了這一切發(fā)生的云原生計算基金會(huì )(CNCF)也在不同的時(shí)期、不同的場(chǎng)所,對云原生做了不同角度的解讀。那么作為一家很早就涉入云計算領(lǐng)域的新銳力量,陳愷對云原生的理解是什么呢?
陳愷說(shuō),“CNCF 旗下涵蓋這么多云計算的技術(shù)、產(chǎn)品和服務(wù),所以它對‘云原生’的定義必然會(huì )比較寬泛,但的確,‘云原生’不是一個(gè)特定的技術(shù)或者一種方法,很難把它精確的定義,也不應該把它和具體的技術(shù)對等,比如說(shuō)把它直接跟 Kubernetes 掛鉤,跟 Kubernetes 沒(méi)關(guān)系就不是云原生?跟 Kubernetes 有關(guān)系就叫云原生?這兩者都是不對的。”
他接著(zhù)補充說(shuō),“我對云原生定義的觀(guān)點(diǎn)也是比較寬泛的,(云原生)就是讓?xiě)媚軌蜃畲蠡尼尫旁朴嬎闵a(chǎn)力的一系列的思維方式、最佳實(shí)踐和技術(shù)體系,這里的關(guān)鍵詞是讓?xiě)萌メ尫旁朴嬎阕畲蟮纳a(chǎn)力。這是關(guān)鍵。所有的云原生我覺(jué)得都是首先應該圍繞應用的。什么叫‘云原生’?主要是以應用為中心的。‘原生’這個(gè)名字看起來(lái)起的不是很好,聽(tīng)上去似乎是只有在云上生出來(lái)的才叫‘云原生’,或者只有在公有云上才叫‘云原生’,并不是。關(guān)鍵不是說(shuō)你在哪里跑你的應用,而是你是不是能夠釋放云的生產(chǎn)力——廣義的云的生產(chǎn)力。”
在容器編排市場(chǎng)尚三分天下的時(shí)候,很多容器服務(wù)商都同時(shí)支持三種主流的編排系統,當時(shí)有一些觀(guān)點(diǎn)認為這種三分格局會(huì )持續比較久,然而 Kubernetes 迅速崛起,很快就一家獨大地統治了容器編排市場(chǎng)。
陳愷說(shuō),“我覺(jué)得當時(shí) Kubernetes 可以很快的從編排之爭當中勝出,并沒(méi)有那么讓人吃驚。為什么我們比較早的時(shí)候就開(kāi)始往 Kubernetes 發(fā)力?其實(shí)第一個(gè)觸發(fā)的點(diǎn)比較偶然。那時(shí)經(jīng)常會(huì )有人問(wèn)起三種容器編排系統各自的優(yōu)勢是什么?我們做了一些研究,業(yè)界有一些對比,當時(shí)我印象比較深的是一個(gè)細節,我覺(jué)得這才是關(guān)鍵——有一項對比的是基于這三種技術(shù)有哪些商業(yè)版?基于 Docker Swarm 的有一個(gè)商業(yè)版 Docker EE;Mesos 有一個(gè)商業(yè)版 MesosPhere;基于 Kubernetes 有好多商業(yè)版——這是本質(zhì)的區別。這一點(diǎn)對它們的社區的發(fā)展速度和后續影響很廣,因為它是開(kāi)放式的治理。Kubernetes 雖然是谷歌發(fā)明的,但是它是開(kāi)放式治理,背后有很多商業(yè)版。如果從開(kāi)源軟件本身社區發(fā)展角度看,很關(guān)鍵一點(diǎn)是上面有多少商業(yè)版,商業(yè)版越多說(shuō)明從開(kāi)源軟件里面可以獲利的公司越多,這樣就有了正向的良性循環(huán),會(huì )有更多資源投進(jìn)來(lái),社區里面參與的人就會(huì )更多,最后的發(fā)展會(huì )更好,生態(tài)會(huì )很繁榮。當時(shí)從這一點(diǎn)我們就覺(jué)得這個(gè)生態(tài)肯定會(huì )贏(yíng)。”
Kubernetes 一統容器編排市場(chǎng)的今天,業(yè)界一些專(zhuān)家對此有所憂(yōu)慮,擔心這種壟斷會(huì )形成市場(chǎng)壓制。從長(cháng)期來(lái)看,如果 Kubernetes 的發(fā)展會(huì )形成類(lèi)似 Android 一樣的巨頭化,那么作為下游廠(chǎng)商,靈雀云是如何看待和應對這種發(fā)展變化的呢?
陳愷說(shuō),“回到壟斷這個(gè)問(wèn)題,如果是商業(yè)軟件的話(huà)會(huì )有壟斷這個(gè)問(wèn)題,如果是開(kāi)源軟件的話(huà),它的治理模式有可能是封閉式的,也有可能是開(kāi)放式的,而 Kubernetes 是一個(gè)開(kāi)放式的治理模式,會(huì )有一些廠(chǎng)商有更大的影響力,但不是被一家完全控制,所以我覺(jué)得從這個(gè)角度來(lái)說(shuō),談不上壟斷,更多的是一個(gè)標準。它可能更多像 Linux 而不像是 Android。從標準的角度來(lái)說(shuō),肯定是利大于弊,而且是遠大于弊。因為有了標準,大家都圍繞著(zhù)標準做投入,風(fēng)險就大大降低,可以放心去投入,也就會(huì )有越來(lái)越多的技術(shù)廠(chǎng)商會(huì )向它靠攏。”
靈雀云的 Kubernetes 生態(tài)
靈雀云在圍繞 Kubernetes 生態(tài)方面也做了自己的發(fā)行版,他們是如何在符合 Kubernetes 標準的基礎上形成差異化的服務(wù)和產(chǎn)品的呢?
“Kubernetes 發(fā)行版首先必須是跟 Kubernetes 兼容的。在 Kubernetes 上可以增加各種各樣的能力,但它本身的第一屬性一定是一個(gè)真正的 Kubernetes。如果為了做差異性,把它做得不像 Kubernetes,不兼容會(huì )是個(gè)很大的問(wèn)題。”陳愷說(shuō),“我們走的比這個(gè)更深一步,我們的 ACP 2.0 是把整個(gè)平臺都做成 Kubernetes 原生的,因為 Kubernetes 本質(zhì)上是聲明式 API 加上基于控制器模型的架構設計范式,容器編排相當于它的一個(gè)副產(chǎn)品,是它基于這個(gè)架構的一種應用,當然也可以把這種架構應用到對任意資源的編排。前一段時(shí)間有一篇很多人轉發(fā)的《Kubernetes 編排一切》的文章,講的就是這個(gè)事情,它不光可以用來(lái)編排容器,可以做各種各樣的事情。我很贊同這個(gè)觀(guān)點(diǎn)。”

陳愷在云原生技術(shù)實(shí)踐峰會(huì ) 2019 上演講
靈雀云是從 2017 年底的時(shí)候決定這樣做的,當時(shí)的做法是一些新的產(chǎn)品開(kāi)始在新的架構上做一些實(shí)踐,比如 DevOps 平臺、基于 Istio 的 Service Mesh 等產(chǎn)品,完全基于新的架構來(lái)做。今年年初,靈雀云認為所有方面都成熟了:第一,方向肯定沒(méi)問(wèn)題,Kubernetes 編排一切;第二,對如何基于 Kubernetes 的架構構建上層產(chǎn)品有了更多的經(jīng)驗和體會(huì )。靈雀云于是把以前產(chǎn)品上的所有功能都逐漸遷移到 Kubernetes 原生架構上,重新融合到統一的架構里面,這就是 ACP 2.0。在此之上靈雀云還做了一些差異化。
靈雀云在這里的技術(shù)棧分為三層:
最底層的產(chǎn)品是一個(gè) Kubernetes 發(fā)行版,Kubernetes 是一個(gè)開(kāi)源的技術(shù),并不是一個(gè)平臺,大多數企業(yè)做不到直接把它當一個(gè)平臺用。靈雀云的做法是將 Kubernetes 技術(shù)變成一個(gè)企業(yè)就緒的 Kubernetes 發(fā)行版。
再往上是 ACP 層,定位是云原生應用賦能平臺。包含有三個(gè)子產(chǎn)品:容器平臺、DevOps 平臺和基于 Istio 的 Service Mesh 產(chǎn)品。容器平臺和發(fā)行版最接近,但對發(fā)行版進(jìn)行了大量擴展,比如在發(fā)行版之上增加了多集群管理和企業(yè)級多租戶(hù)。ACP 把單一的 Kubernetes 集群變成企業(yè)平臺級的產(chǎn)品,經(jīng)過(guò)了三年多 100+ 企業(yè)客戶(hù)生產(chǎn)環(huán)境的考驗,而且考慮到更多開(kāi)發(fā)者的場(chǎng)景。DevOps 也基于 Kubernetes 原生,用 Kubernetes 去編排所有的工具,定位是一個(gè)開(kāi)放式 DevOps 工具鏈集成和編排的平臺。
在此之上還有一層是靈雀云新的 ACE 3.0,它的定位是一個(gè)企業(yè)級的 PaaS 平臺,或者用現在更時(shí)髦的說(shuō)法,可以稱(chēng)之為企業(yè)技術(shù)中臺,集成了更多企業(yè)需要的其他服務(wù),比如第三方的中間件、開(kāi)發(fā)框架等。它是個(gè)完整的技術(shù)中臺,以容器平臺為底座,以云原生黃金三角為核心,其他服務(wù)在上面做成一個(gè)個(gè)插件。這部分主要是和生態(tài)合作伙伴合作,國內外的一些最優(yōu)秀的 PaaS 類(lèi)服務(wù)都可以放在里面,為企業(yè)提供完整的解決方案。
云原生之于微服務(wù)和 DevOps
我們知道微服務(wù)、DevOps 等模式在云原生概念發(fā)展起來(lái)之前就已經(jīng)存在,但是隨著(zhù)云原生的發(fā)展,似乎給它們注入了更多的活力。
陳愷認為云原生顯著(zhù)地推動(dòng)了 DevOps、微服務(wù)的發(fā)展,對于這一現象他還專(zhuān)門(mén)用了一個(gè)詞匯來(lái)形容:后 Kubernetes。這是在容器和 Kubernetes 出現之后開(kāi)始對 DevOps 側的微服務(wù)反過(guò)來(lái)的助推。
他認為,微服務(wù)架構的本質(zhì)是用運維復雜度為代價(jià)去換取敏捷性。企業(yè)至少要考慮兩件事:第一是否真的有這么高的敏捷性需求,值得用那么大的運維代價(jià)去替換,第二,假設你有著(zhù)敏捷性需求,那么多出來(lái)的復雜度怎么辦?早期微服務(wù)落地會(huì )很痛苦,因為大家沒(méi)有準備好怎么去應付這個(gè)復雜度,而且會(huì )低估它。這復雜度是未知的,用未知的復雜度去替代已知的復雜度,這通常都是不好的,所以才會(huì )有各種各樣的治理框架出來(lái)。其實(shí)它需要底下有一個(gè)好的基礎設施來(lái)支撐它。
容器和微服務(wù)天生一對,容器 Kubernetes 的出現,對微服務(wù)有非常明顯地推動(dòng)。Kubernetes 作為底層的應用管理平臺非常合適,而且很多微服務(wù)里面要考慮的與業(yè)務(wù)無(wú)關(guān)的能力也可以慢慢推到 Kubernetes 里面去。而進(jìn)一步,Service Mesh 等其上的技術(shù)棧就重新定義了微服務(wù)技術(shù)棧,微服務(wù)治理方式發(fā)生了變化,反過(guò)來(lái)作用到微服務(wù)上,形成了新的最佳實(shí)踐。
因此,要做微服務(wù)應該先容器化,才能解決運維復雜度的問(wèn)題,容器化的服務(wù)應該跑在 Kubernetes 之上;如果進(jìn)一步做服務(wù)治理,應該往 Service Mesh 方向走,Service Mesh 是基于 Kubernetes 平臺的微服務(wù)治理的最佳實(shí)踐。
云原生之于 DevOps 也是如此。早期大家很多的精力在持續集成上面,比如 Jenkins 最初是作為 CI 工具出現的,而有了容器和 Kubernetes 之后,持續集成變得簡(jiǎn)化了,最終生成 Docker 鏡像就好。重心開(kāi)始轉到部署,轉到 CD 上。而且,現在的 DevOps 實(shí)踐或 CI/CD 通常會(huì )把 Kubernetes 作為最重要的部署目標。也就是說(shuō)CI會(huì )圍繞容器鏡像,CD 會(huì )圍繞 Kubernetes。這是容器和 Kubernetes 帶給 DevOps 的影響,基礎設施越強大,對 DevOps、微服務(wù)就越有幫助。以 Kubernetes 為核心的基礎設施變成新的標準,DevOps 和微服務(wù)的一些最佳實(shí)踐都會(huì )圍繞它去改變。
源于開(kāi)源,茁壯于開(kāi)源
云計算構筑在開(kāi)源之上,靈雀云的基礎設施和服務(wù)也構建在開(kāi)源之上,那么靈雀云是如何擁抱開(kāi)源和貢獻開(kāi)源的?
陳愷說(shuō),“有幾個(gè)開(kāi)源社區跟我們是非常相關(guān)的,最早的時(shí)候是 Docker 社區,現在 Kubernetes 則是跟我們關(guān)系最大的開(kāi)源社區。我們核心的產(chǎn)品是容器、DevOps 和微服務(wù)三部分。Jenkins、Istio 等相關(guān)開(kāi)源項目是我們的重點(diǎn),我們非常重視在開(kāi)源社區的投入。我們的許多工程師會(huì )參與其中,對社區進(jìn)行貢獻,也會(huì )開(kāi)源一些項目,我們在一步一步持續地做這件事情。我們首先會(huì )選擇一些偏底層的技術(shù)或者機制,選擇那些有足夠亮點(diǎn),真的被需要的項目和技術(shù)開(kāi)源出來(lái)。”
目前靈雀云已經(jīng)開(kāi)源了的項目,包括基于 OVN 的網(wǎng)絡(luò )插件 Kube-OVN,它是把 OVN 的網(wǎng)絡(luò )和 Kubernetes 所集成的網(wǎng)絡(luò )插件。現在該項目在國內外都受到關(guān)注,也有來(lái)自外部貢獻者參與。另外一個(gè)開(kāi)源的項目叫 Captain,是一個(gè)基于 Helm v3 標準的 Kubernetes 控制器,對 Helm 應用分發(fā)進(jìn)行改進(jìn)。
后續靈雀云還計劃將更完整的東西放出來(lái),比如靈雀云的 Kubernetes 發(fā)行版,供社區用戶(hù)用來(lái)管理自己的 Kubernetes 平臺,可以達到和使用靈雀云產(chǎn)品接近的體驗。另外靈雀云也計劃將其 ACP 釋放社區版或者開(kāi)源版本出來(lái)。陳愷說(shuō),“我們很樂(lè )意把它開(kāi)源出來(lái),因為這是一個(gè)標準的產(chǎn)品,我們讓它較早期的接觸更多用戶(hù),也能得到更多反饋,甚至吸收一些外部的貢獻者參與進(jìn)來(lái)。”
尾聲
我采訪(fǎng)過(guò)很多技術(shù)領(lǐng)袖和技術(shù)專(zhuān)家,不過(guò)陳愷的這場(chǎng)采訪(fǎng)讓我有一點(diǎn)不同的感受。一場(chǎng)對話(huà)下來(lái),陳愷給我的感覺(jué)如同多年的老友一樣言無(wú)不盡,而他對于我提到的每個(gè)話(huà)題,都非常認真、仔細的做了闡述,讓人感到濃濃的專(zhuān)業(yè)技術(shù)風(fēng)格。我想,這就是陳愷的技術(shù)初心,也是靈雀云一直以來(lái)的風(fēng)格吧。
“穿山甲專(zhuān)訪(fǎng)”欄目是 Linux 中國社區推出的面向開(kāi)源界、互聯(lián)網(wǎng)技術(shù)圈的重要領(lǐng)軍人物的系列采訪(fǎng),將為大家介紹中國開(kāi)源領(lǐng)域中一些積極推動(dòng)開(kāi)源,諳熟開(kāi)源思想的技術(shù)人,并辨析其思考、挖掘其動(dòng)因,揭示其背后所發(fā)生的事情,為關(guān)注開(kāi)源、有志于開(kāi)源的企業(yè)和技術(shù)人標出一條路徑。
取名為“穿山甲”寓意有二:取穿山甲挖掘、深入之意來(lái)象征技術(shù)進(jìn)步和表征技術(shù)領(lǐng)袖的作用;穿山甲是珍稀保護動(dòng)物,宣傳公益。