同學(xué),你聽說過“云原生”嗎?
我相信大部分人會回答:“Yes,I do.”
是的,作為云計算領(lǐng)域的一個新興概念,云原生現(xiàn)在頻繁出現(xiàn)在我們的視野中。很多互聯(lián)網(wǎng)大咖把它奉為至寶,走到哪說到哪。
那么,我們不僅會好奇,究竟什么是“云原生”?它會給我們帶來什么改變?
今天這篇文章,我們來探尋答案。

云原生的起源
介紹云原生之前,我們先介紹一下CNCF。
CNCF,全稱為Cloud Native Computing Foundation,中文譯為“云原生計算基金會”。
這個基金會成立于2015年12月11日,屬于Linux基金會旗下。
CNCF致力于培育和維護(hù)一個廠商中立的開源生態(tài)系統(tǒng),來推廣云原生技術(shù)。
所以說,CNCF是云原生領(lǐng)域影響力最大最有話語權(quán)的組織。
說起CNCF的故事,還要從Cgroups(control groups,控制組群)開始說起。
十六年前,也就是2004年,谷歌開始使用容器技術(shù)。到了2006年,谷歌發(fā)布了Cgroups,最初叫Process Container(進(jìn)程容器)。
Process Container的目的非常直白,它希望能夠像虛擬化技術(shù)那樣,給進(jìn)程提供操作系統(tǒng)級別的資源限制、優(yōu)先級控制、資源審計能力和進(jìn)程控制能力。
帶著這樣的設(shè)計思路,Process Container發(fā)布后第二年就進(jìn)入了Linux內(nèi)核主干。
因為在Linux內(nèi)核中,容器(container)這個名詞有許多不同的意義,為避免混亂,就更名為Control Groups,也就是Cgroups。
2013年,Docker項目正式發(fā)布,2014年,Kubernetes項目也正式發(fā)布。
Kubernetes項目的初衷,就是提供一種方式去幫助大家方便、快速、優(yōu)雅地管理容器。(Kubernetes是云原生的基石,后面會細(xì)講。)
在Google和Redhat發(fā)布了Kubernetes之后,這個項目的發(fā)展速度非常之快。
2015年,由Google、Redhat以及微軟等大型云計算廠商以及一些開源公司共同牽頭成立了CNCF云原生基金會。
CNCF成立之初,就有22個創(chuàng)始會員,而且Kubernetes也成為了CNCF托管的第一個開源項目。
CNCF一直保持高速發(fā)展。截止2020年2月,已有433個會員。
會員名單(部分)
那么,CNCF是如何定義云原生的呢?
云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動態(tài)環(huán)境中,構(gòu)建和運行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
這些技術(shù)能夠構(gòu)建容錯性好、易于管理和便于觀察的松耦合系統(tǒng)。結(jié)合可靠的自動化手段,云原生技術(shù)使工程師能夠輕松地對系統(tǒng)作出頻繁和可預(yù)測的重大變更。
云原生計算基金會(CNCF)致力于培育和維護(hù)一個廠商中立的開源生態(tài)系統(tǒng),來推廣云原生技術(shù)。我們通過將最前沿的模式民主化,讓這些創(chuàng)新為大眾所用。
除了CNCF之外,網(wǎng)絡(luò)上還流傳著另一個版本的“云原生”定義和來源——
這種說法認(rèn)為,是Pivotal公司的Matt Stine,于2013年首次提出云原生概念。
2015年,云原生剛推廣時,Matt Stine在《遷移到云原生架構(gòu)》一書中定義了符合云原生架構(gòu)的幾個特征:12因素、微服務(wù)、自敏捷架構(gòu)、基于API 協(xié)作、扛脆弱性。
到了2017年,Matt Stine改了口風(fēng),將云原生架構(gòu)歸納為模塊化、可觀察、可部署、可測試、可替換、可處理6特質(zhì)。而Pivotal官網(wǎng)對云原生概括為4個要點:DevOps+持續(xù)交付+微服務(wù)+容器。
MattStine認(rèn)為云原生它是一個思想的集合,包括DevOps、持續(xù)交付(Continuous Delivery)、微服務(wù)(MicroServices)、敏捷基礎(chǔ)設(shè)施(Agile Infrastructure)、康威定律(Conways Law)等。
云原生既包含技術(shù)(微服務(wù),敏捷基礎(chǔ)設(shè)施),也包含管理(DevOps,持續(xù)交付,康威定律,重組等),可以說是一系列云技術(shù)、企業(yè)管理方法的集合。
我們還是以CNCF官方的定義為準(zhǔn)吧。
按CNCF的定義,云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
那么,這些技術(shù)都是什么?這些技術(shù)有什么聯(lián)系?

云原生的代表技術(shù)
容器
一般我們說的“容器”(LinuxContainer,LXC),都是“Linux容器”(當(dāng)然微軟也在搞容器,但還沒Linux那么成熟)。
開源解決方案供應(yīng)商紅帽官網(wǎng)給出的容器定義:
Linux?容器是與系統(tǒng)其他部分隔離開的一系列進(jìn)程。
運行這些進(jìn)程所需的所有文件都由另一個鏡像提供,這意味著從開發(fā)到測試再到生產(chǎn)的整個過程中,Linux 容器都具有可移植性和一致性。
因而,相對于依賴重復(fù)傳統(tǒng)測試環(huán)境的開發(fā)渠道,容器的運行速度要快得多。容器比較普遍也易于使用,因此也成了 IT 安全方面的重要組成部分。
容器提供進(jìn)程級的隔離,可以將操作系統(tǒng)管理的資源劃分到相互隔離的組中,在相互隔離的組之間解決資源使用存在沖突的問題。
比如應(yīng)用程序(Application)APP 1 ,只能在centos 操作系統(tǒng)上運行;APP2只能在Ubuntu操作系統(tǒng)上運行。而同一個操作系統(tǒng)同時運行APP1和APP2就產(chǎn)生沖突。容器技術(shù)則恰恰可以解決這類問題。目前主流的容器技術(shù)有Docker、LXD以及RKT等。
Docker
說到容器,就不得不說Docker。
2010年,幾個大胡子的年輕人在美國舊金山成立了一家名叫“dotCloud”的公司。這家公司主要提供基于PaaS的云計算技術(shù)服務(wù)。具體來說,是和LXC有關(guān)的容器技術(shù)。
LXC,就是Linux容器虛擬技術(shù)(Linux container)。
后來,dotCloud公司將自己的容器技術(shù)進(jìn)行了簡化和標(biāo)準(zhǔn)化,并命名為——Docker。
Docker項目發(fā)布時,無非也是LXC的一個使用者。它創(chuàng)建和使用應(yīng)用容器的邏輯跟Warden等競爭對手沒有本質(zhì)不同。
不過,我們現(xiàn)在也知道,真正讓PaaS項目無所適從的,是Docker項目最厲害的殺手锏:容器鏡像。
Docker項目通過容器鏡像,直接將一個應(yīng)用運行所需的完整環(huán)境,即:整個操作系統(tǒng)的文件系統(tǒng)也打包了進(jìn)去。
這種思路,可算是解決了困擾PaaS用戶已久的一致性問題,制作一個“一次發(fā)布、隨處運行”的Docker鏡像的意義,一下子就比制作一個連開發(fā)和測試環(huán)境都無法統(tǒng)一的Buildpack高明了太多。
Docker項目大大降低了容器技術(shù)的使用門檻。輕量級,可移植,虛擬化,語言無關(guān),寫了程序扔上去做成鏡像可以隨處部署和運行,開發(fā)、測試和生產(chǎn)環(huán)境徹底統(tǒng)一了,還能進(jìn)行資源管控和虛擬化。
Docker作為一種開源應(yīng)用容器引擎,是為開發(fā)人員和系統(tǒng)管理員設(shè)計的用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺,典型的Docker平臺Kubernetes、OpenShift V3、Flynn、Deis等。
Docker允許開發(fā)人員將各種應(yīng)用以及依賴包打包到一個可移植的Docker容器中,以Docker容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行時的環(huán)境,然后發(fā)布到Linux機(jī)器上。
按照Docker的設(shè)計方案,應(yīng)用軟件的交付過程如同海上運輸,操作系統(tǒng)OS如同一個貨輪,每一個在OS基礎(chǔ)上的軟件都如同一個集裝箱。
用戶可以通過標(biāo)準(zhǔn)化手段自由組裝運行環(huán)境,同時集裝箱的內(nèi)容可以由用戶自定義,也可以由專業(yè)人員(開發(fā)人員或系統(tǒng)管理員)定制。
如此一來,交付一個應(yīng)用軟件產(chǎn)品,就相當(dāng)于交付一系列標(biāo)準(zhǔn)化組件的集合。
