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

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

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