何為云原生
隨著云計(jì)算的應(yīng)用普及,最近幾年,云原生技術(shù)(Cloud Native)的概念很火。Pivotal公司的Matt Stine于2013年首次提出云原生的概念;云原生的具體含義在過去的幾年中也在不斷發(fā)生變化。最近Pivotal官網(wǎng)對云原生的概念概括為4個要點(diǎn):DevOps、持續(xù)交付、微服務(wù)、容器。

云原生的概念組成
符合云原生架構(gòu)的應(yīng)用應(yīng)該是這樣的:采用以kubernetes(k8s)和容器(Docker)為代表的技術(shù)對應(yīng)用進(jìn)行容器化部署;基于微服務(wù)架構(gòu)提高應(yīng)用的靈活性和可維護(hù)性;借助敏捷方法、DevOps支持持續(xù)迭代和運(yùn)維自動化;利用云平臺設(shè)施實(shí)現(xiàn)彈性伸縮、動態(tài)調(diào)度、優(yōu)化資源利用率。
云原生技術(shù)在邊緣計(jì)算
如前文《物聯(lián)網(wǎng)關(guān)鍵技術(shù):邊緣計(jì)算》所述,邊緣計(jì)算技術(shù)已廣泛應(yīng)用于物聯(lián)網(wǎng)應(yīng)用中,已在云計(jì)算領(lǐng)域?qū)嵺`多年的各種云原生技術(shù),也可引入到邊緣計(jì)算的場景中。
在邊緣計(jì)算場景中應(yīng)用云原生技術(shù),可以為邊緣計(jì)算帶來很多好處:
- 體驗(yàn):云原生技術(shù)以統(tǒng)一的標(biāo)準(zhǔn),實(shí)現(xiàn)在邊緣基礎(chǔ)設(shè)施上和云上一致的體驗(yàn)。
- 魯棒:基于云原生技術(shù)的邊緣容器能力,能保證弱網(wǎng)、斷網(wǎng)的自治性,提供有效的自恢復(fù)能力
- 運(yùn)維:在海量邊、端設(shè)備上實(shí)現(xiàn)應(yīng)用的大規(guī)模批量交付、運(yùn)維和管控
- 安全:提供安全的工作負(fù)載運(yùn)行環(huán)境,以及流量控制、網(wǎng)絡(luò)策略能力,有效提升邊緣服務(wù)和邊緣數(shù)據(jù)的安全性
依托云原生領(lǐng)域強(qiáng)大的社區(qū)和廠商支持,云原生技術(shù)對異構(gòu)資源的適用性逐步提升。在物聯(lián)網(wǎng)領(lǐng)域,云原生技術(shù)已經(jīng)能夠支持多種 CPU 架構(gòu)和通信協(xié)議,并實(shí)現(xiàn)較低的資源占用,這意味著云原生技術(shù)不僅僅可以應(yīng)用在云端,還可以應(yīng)用在邊緣網(wǎng)絡(luò)及終端設(shè)備上。
目前已經(jīng)有不少廠商在進(jìn)行云原生邊緣計(jì)算的嘗試,并有了部分成功案例。適用于邊緣計(jì)算的云原生容器技術(shù)主要可分為微虛機(jī)(MicroVM)和沙箱(Sandbox)兩大類。
微虛機(jī)技術(shù)
所謂的微虛機(jī)是指可以在容器環(huán)境下運(yùn)行的虛擬機(jī),這樣既可以服用容器化的便利,輕量,同時又考慮了虛擬機(jī)的隔離安全性。亞馬遜AWS的Firecracker、OpenStack基金會的Kata Container以及VMWare的vSphere Integrated Containers都屬于微虛機(jī)技術(shù)。
Firecracker是一種利用 KVM 的虛擬化技術(shù),專門用于創(chuàng)建和管理多租戶容器以及基于函數(shù)的服務(wù)。 可以在幾分之一秒內(nèi)在非虛擬化環(huán)境中啟動輕量級微虛擬機(jī),充分利用傳統(tǒng)虛擬機(jī)提供的安全性和工作負(fù)載隔離,同時兼具容器的資源效率。通過 RESTful API 控制 Firecracker 進(jìn)程,可精確控制同一臺計(jì)算機(jī)上數(shù)千個微虛機(jī)使用的網(wǎng)絡(luò)和存儲資源。
Kata Containers是由OpenStack基金會管理,但獨(dú)立于OpenStack項(xiàng)目之外的容器項(xiàng)目。Kata Containers能夠支持不同平臺的硬件 (比如x86-64,arm等),符合開放容器規(guī)范(OCI:Open Container Initiative),同時還可以兼容k8s的 容器運(yùn)行時接口規(guī)范(CRI:Container Runtime Interface)。這意味著Kata Container可以和容器生態(tài)的各種已有產(chǎn)品兼容,如docker、k8s等。

Docker引擎以前啟動容器使用runc,現(xiàn)在可以換成kata了。
Kata Container可以當(dāng)做docker的一個插件,可以通過docker命令啟動Kata Container。Kata最大的亮點(diǎn)是解決了傳統(tǒng)容器共享內(nèi)核的安全和隔離問題,辦法就是讓每個容器運(yùn)行在一個輕量級的虛擬機(jī)中,使用單獨(dú)的內(nèi)核。

k8s也使用kata取代runc創(chuàng)建容器
k8s傳統(tǒng)創(chuàng)建pods的方法默認(rèn)也是使用 runC 創(chuàng)建容器,現(xiàn)在是使用kata container先創(chuàng)建一個虛擬機(jī),在虛擬機(jī)中再創(chuàng)建pods,這樣就更安全。
沙盒技術(shù)
沙箱不同于傳統(tǒng)的容器以及微虛機(jī),容器是通過namespace跟cgroup實(shí)現(xiàn)資源隔離,微虛機(jī)則是通過虛擬化技術(shù)實(shí)現(xiàn)資源隔離,而沙箱技術(shù)是通過對系統(tǒng)調(diào)用的劫持以及重定向,進(jìn)而實(shí)現(xiàn)資源隔離的。google公司的gVisor就屬于此類技術(shù)。
gVisor在內(nèi)核之外實(shí)現(xiàn)了一個“內(nèi)核進(jìn)程”,叫做“哨兵”(Sentry),它能夠提供大部分 linux 內(nèi)核的系統(tǒng)調(diào)用。用戶進(jìn)程的大部分系統(tǒng)調(diào)用都被轉(zhuǎn)化為對這個“哨兵”進(jìn)程的訪問。

傳統(tǒng)系統(tǒng)調(diào)用和gVisor沙箱系統(tǒng)調(diào)用的對比
Google 將 gVisor 定位為“Sandbox”,而不是安全容器,主要因是 Sentry 還不能完全代替 Linux 系統(tǒng)內(nèi)核,部分系統(tǒng)調(diào)用還是要轉(zhuǎn)接到 Host Kernel 上。
gVisor 其能夠?yàn)槿萜鬟M(jìn)程提供安全的隔離措施,同時繼續(xù)保持遠(yuǎn)優(yōu)于虛擬機(jī)的輕量化特性。而且gVisor還能夠與Docker及Kubernetes實(shí)現(xiàn)集成,從而在生產(chǎn)環(huán)境中更輕松地建立起沙箱化容器系統(tǒng)。
總結(jié)
隨著微虛機(jī)、沙箱等輕量級容器技術(shù)的出現(xiàn),使得容器對系統(tǒng)資源的要求進(jìn)一步降低,非常適合于資源有限的邊緣場景中應(yīng)用,將邊緣計(jì)算資源容器化,用云端一致的方式來進(jìn)行資源管理。