Zun是Openstack中提供容器管理服務(wù)的組件,建立于2016年6月。Zun的目標(biāo)是提供統(tǒng)一的Openstack API用于啟動(dòng)和管理容器,支持多種容器技術(shù),比如Docker、Rkt、Clear container、 Kata container以及用戶自定義的容器技術(shù)。由于容器技術(shù)的火熱,Zun得以在OpenStack中迅速發(fā)展,通過(guò)與Keystone、Neutron、Cinder、Glance以及其它核心的OpenStack組件集成, 實(shí)現(xiàn)容器的網(wǎng)絡(luò)、持久化存儲(chǔ)等功能。OpenStack架構(gòu)中的網(wǎng)絡(luò)、存儲(chǔ)以及身份驗(yàn)證工具全部適用于容器體系,從而確保容器能夠滿足安全與合規(guī)要求。
一、發(fā)展歷史 OpenStack平臺(tái)主要有如圖所示的幾個(gè)方案支持容器技術(shù):Nova-docker driver、
Heat-docker-plugin、Magnum等。
Nova Docker driver方案將容器當(dāng)成虛擬機(jī)一樣進(jìn)行操作,通過(guò)增加nova-docker驅(qū)動(dòng),實(shí)現(xiàn)容器生命周期的管理操作。但是容器和虛擬機(jī)存在較大差異,通過(guò)類似虛擬機(jī)的方式管理容器,導(dǎo)致無(wú)法對(duì)接很多容器的原生接口。
Heat-docker-plugin方案不依賴于Nova的調(diào)用,而是通過(guò) OpenStack Heat進(jìn)行編排,使用 Heat Docker plugin插件, 編輯Heat Templates 設(shè)定 Docker 的參數(shù),在虛擬機(jī)上管理容器。雖然可以使用 Docker API 提供的所有功能,但是在虛擬機(jī)上使用 Docker,無(wú)法實(shí)現(xiàn)資源調(diào)度,需要較多的配置工作,無(wú)法實(shí)現(xiàn)規(guī);募汗芾 。
Magnum是OpenStack中提供容器集群部署功能的服務(wù),通過(guò)Heat部署k8s虛擬機(jī)集群,調(diào)用coe接口管理容器。Magnum立項(xiàng)之初,以CaaS為宗旨,即“容器即服務(wù)”。后續(xù)發(fā)展過(guò)程中,Magnum將集群管理和容器管理兩大功能進(jìn)行分離,magnum專注于容器的集群管理。
而容器的管理則獨(dú)立出來(lái),衍生出OpenStack Zun這個(gè)新的項(xiàng)目。Zun將容器作為一種OpenStack資源進(jìn)行管理,并通過(guò)集成OpenStack的其他服務(wù),為用戶呈現(xiàn)統(tǒng)一的、簡(jiǎn)化的API接口,無(wú)需關(guān)心不同容器技術(shù)之間的差異。
二、基礎(chǔ)架構(gòu) 下面的Zun架構(gòu)圖,可以更好地理解Zun與OpenStack各組件之間的關(guān)系。
OpenStack 基礎(chǔ)設(shè)施層:
Zun API: 處理 REST請(qǐng)求并檢查輸入?yún)?shù)
Zun Compute: 資源調(diào)度與容器管理
Keystone: OpenStack的認(rèn)證組件
Neutron: 為容器提供網(wǎng)絡(luò)
Glance: 用于存儲(chǔ)容器鏡像
Cinder: 提供容器數(shù)據(jù)卷,用于持久化存儲(chǔ)
Placement:統(tǒng)一的資源管理,比如資源的類型、記錄、分配、消費(fèi)等。也就是說(shuō)OpenStack中的虛機(jī)、裸機(jī)、容器實(shí)例,既資源共享,也存在資源競(jìng)爭(zhēng)。
Horizon:官方的界面管理,zun-ui作為其插件,將容器操作集成到界面中。
多種運(yùn)行時(shí):
Runc: Docker原生支持的運(yùn)行時(shí)
Clear Container&Kata:安全容器,結(jié)合了輕量級(jí)虛擬機(jī)的優(yōu)勢(shì)
Firecrocke:一種運(yùn)行多租戶容器服務(wù)的新虛擬化技術(shù)
Others:用戶自定義的容器技術(shù)
編排層:
Heat: 容器資源集成到heat資源模板
Kubernetes: 通過(guò)Virtual Kubelet工具,將zun-compute node作為 k8s的工作節(jié)點(diǎn),為k8s提供serverless容器服務(wù)。
三、組件關(guān)系 在OpenStack發(fā)展過(guò)程中,虛機(jī)、裸機(jī)、容器逐漸成為三大主流的資源實(shí)例。終端用戶采用裸機(jī)與虛擬機(jī)系統(tǒng),還是容器技術(shù)?
如上圖所示,Nova是管理虛擬機(jī)的創(chuàng)建、啟動(dòng)、刪除等的服務(wù);Ironic是管理裸機(jī)安裝部署的服務(wù);而Zun是容器管理服務(wù)。虛機(jī)、裸機(jī)、容器三者可以運(yùn)行在同一框架之內(nèi)!
四、功能優(yōu)點(diǎn) Zun集成了多個(gè)OpenStack服務(wù),其中Keystone、Neutron、Kuryr-libnetwork是運(yùn)行Zun所必須的服務(wù),它們分別為Zun提供認(rèn)證、網(wǎng)絡(luò)、neutron網(wǎng)絡(luò)與docker網(wǎng)絡(luò)之間的連接。集成OpenStack服務(wù)的優(yōu)點(diǎn)在于,可以借助于OpenStack已存在的功能來(lái)擴(kuò)展容器功能。
例如Zun容器可以使用Neutron分配IP地址,可以在Nova實(shí)例所在的隔離網(wǎng)絡(luò)環(huán)境中創(chuàng)建容器,實(shí)現(xiàn)虛擬機(jī)和容器的單網(wǎng)絡(luò)平面部署。虛擬機(jī)的網(wǎng)絡(luò)安全組,也實(shí)用于Zun容器。在實(shí)際的業(yè)務(wù)場(chǎng)景中,通常需要對(duì)運(yùn)營(yíng)數(shù)據(jù)進(jìn)行持久化存儲(chǔ),Zun通過(guò)與OpenStack Cinder集成解決這個(gè)問(wèn)題。 創(chuàng)建容器時(shí),用戶可以選擇將Cinder卷掛載給容器。 Cinder卷可以是租戶中的現(xiàn)有卷或新創(chuàng)建的卷。每個(gè)卷將被綁定到容器文件系統(tǒng)路徑中,并且存儲(chǔ)在該路徑下的數(shù)據(jù)將被持久化。
在Orchestration方面,與其他提供內(nèi)置編排的容器平臺(tái)不同,Zun使用外部編排系統(tǒng)來(lái)實(shí)現(xiàn)此目的,例如Heat與Kubernetes。通過(guò)使用外部協(xié)調(diào)工具,最終用戶可以使用該工具提供的DSL定義他們的容器化應(yīng)用程序。
Zun實(shí)現(xiàn)與 Glance、Neutron、Cinder等組件的集成,但并不實(shí)現(xiàn)對(duì)容器編排引擎(Container Orchestration Engines)的部署調(diào)度。綜上,Zun提供了一種OpenStack + 容器的解決方案,不僅將多個(gè)OpenStack服務(wù)與容器技術(shù)有效地結(jié)合到一起,提高了OpenStack管理容器的能力,而且簡(jiǎn)化了容器的使用,擴(kuò)展了容器的功能。同時(shí)Zun社區(qū)的各項(xiàng)功能正在開(kāi)發(fā)、補(bǔ)全當(dāng)中,值得期待。
五、中興通訊持續(xù)社區(qū)貢獻(xiàn) 中興通訊作為OpenStack基金會(huì)黃金會(huì)員和主要代碼貢獻(xiàn)者之一,致力于推動(dòng)OpenStack的演進(jìn)和發(fā)展。針對(duì)Zun社區(qū),中興通訊bp完成數(shù),bug修復(fù)數(shù)都位居前列。同時(shí),中興通訊在Rocky、Stein等多個(gè)版本單項(xiàng)項(xiàng)目負(fù)責(zé)人(PTL),為Zun項(xiàng)目的發(fā)展,做出了卓越的貢獻(xiàn)。未來(lái),中興通訊將不斷加大對(duì)開(kāi)源社區(qū)的投入,并積極尋求落地商用的機(jī)會(huì)。