容器云開(kāi)發(fā)這些必備知識(shí)你需了解
如今,「即服務(wù) 」的時(shí)代已經(jīng)到來(lái),將能力服務(wù)化,萬(wàn)物皆可具備基礎(chǔ)設(shè)施的特征。在IT界更是如此,譬如,基礎(chǔ)設(shè)施即服務(wù)(IaaS)、平臺(tái)即服務(wù)(PaaS)、軟件即服務(wù)(SaaS)等等。容器即服務(wù)(CaaS)無(wú)疑是這波浪潮中的又一位重量級(jí)參與者。
那么作為開(kāi)發(fā)者,想探究CaaS的「真諦」,首先應(yīng)該明白這一系列問(wèn)題——Caas是什么?它能干什么?和PaaS的區(qū)別是什么?構(gòu)成CaaS有哪些基本要素?有什么代表性的產(chǎn)品值得了解? 在本文中,我們將探討這一系列問(wèn)題,幫助開(kāi)發(fā)者「破除迷霧 」、「看清真相 」。
什么是容器?
容器即服務(wù),英文全稱Container-as-a-Service,簡(jiǎn)寫CaaS,它提供一種上傳、運(yùn)行、擴(kuò)展以及管理應(yīng)用程序容器的方法。這類服務(wù)全面提供執(zhí)行這些功能的API或CLI,有些甚至提供GUI或Web門戶。這里的容器可以是多種不同類型,包括Docker、LXD以及OpenVZ等等。聽(tīng)起來(lái)似乎跟PaaS差不了多少,但二者也有一些區(qū)別。下面我們從概念出發(fā),看看二者之間的差異所在。
平臺(tái)即服務(wù)(PaaS),以IaaS為基礎(chǔ)構(gòu)建而成。此外,也有一部分PaaS供應(yīng)商也開(kāi)始以CaaS作為服務(wù)基礎(chǔ)。
從傳統(tǒng)意義出發(fā),PaaS解決的是應(yīng)用程序的托管、打包與分發(fā)問(wèn)題,強(qiáng)調(diào)零停機(jī)時(shí)間部署、自動(dòng)規(guī)模伸縮與負(fù)載均衡功能。此外,它還可以集成多種開(kāi)發(fā)人員工具以及運(yùn)行狀態(tài)與指標(biāo)統(tǒng)計(jì)信息。PaaS的核心優(yōu)勢(shì)之一,在于開(kāi)發(fā)人員可以輕松構(gòu)建應(yīng)用程序,而不再分神于應(yīng)用程序運(yùn)行所處的具體環(huán)境。像Cloud Foundry, Heroku以及Google App Engine等,都屬于典型的PaaS供應(yīng)商。
而CaaS提供一種輕松快捷的容器部署方式。它還能夠保證全面完善的可移植性,確保容器能夠在幾乎任何位置上運(yùn)行。CaaS還提供用于容器乃至容器集群的配置及管理功能。
從表面上看,CaaS與PaaS好像沒(méi)什么不同。二者都管理著應(yīng)用程序的部署與托管任務(wù),而且基本功能也區(qū)別不大。PaaS的不少優(yōu)勢(shì),都可以通過(guò)使用容器鏡像加容器注冊(cè)表的方式實(shí)現(xiàn)。此外,Kubernetes能夠幫助用戶滾動(dòng)部署并實(shí)現(xiàn)負(fù)載均衡與自動(dòng)規(guī)模伸縮。典型的CaaS解決方案包括Google Kubernetes Engine (GKE)與Azure Container Service。
要PaaS?還是要CaaS?
要PaaS?還是要CaaS?實(shí)際上,選擇哪種解決方案要根據(jù)你的應(yīng)用場(chǎng)景來(lái)決定。
這二者都能幫助開(kāi)發(fā)人員部署并運(yùn)行應(yīng)用程序。但是,PaaS會(huì)隱藏一部分容器化任務(wù)。換句話說(shuō),使用CaaS,開(kāi)發(fā)者仍然需要管理一部分應(yīng)用程序容器化任務(wù);但使用PaaS,開(kāi)發(fā)者就不用額外操心了。再有,PaaS在所使用的語(yǔ)言及技術(shù)方面也有更多要求。雖然能夠支持多種不同語(yǔ)言,但數(shù)量畢竟有限,這是因?yàn)镻aaS通常依靠構(gòu)建軟件包來(lái)運(yùn)行應(yīng)用程序,而不像Docker那樣使用通用型容器。
此外,CaaS能更輕松地運(yùn)用多云托管功能,這也是因?yàn)樗幌馪aaS那樣「獨(dú)斷專行 」。只要云服務(wù)商支持容器,開(kāi)發(fā)者也可以借此發(fā)布并運(yùn)行自己的服務(wù)。
如果企業(yè)擁有強(qiáng)大的基礎(chǔ)設(shè)施團(tuán)隊(duì),或者已經(jīng)習(xí)慣于處理網(wǎng)絡(luò)及運(yùn)營(yíng)問(wèn)題,那么使用CaaS將幫助企業(yè)更好地發(fā)揮自身技術(shù)優(yōu)勢(shì)。但如果企業(yè)并不熟悉該如何將服務(wù)部署至云端,或者運(yùn)營(yíng)團(tuán)隊(duì)在這方面的經(jīng)驗(yàn)不是很豐富,那么PaaS無(wú)疑是更理想的入門級(jí)選項(xiàng)。
在PaaS與CaaS之間進(jìn)行選擇時(shí),另一大重要考量因素在于速度與控制。如果企業(yè)希望快速推出應(yīng)用程序,又不想為其他事情分神,那么PaaS的效果更好。但如果打算更好地控制服務(wù)的容器化及管理方式,那么CaaS解決方案將成為最佳選擇。
說(shuō)了半天,好像凈是好事。但CaaS難道就沒(méi)有任何缺點(diǎn)了嗎?
當(dāng)然有。首先,根據(jù)云服務(wù)商的具體方案,大家會(huì)發(fā)現(xiàn)其可能并不支持某些容器類型。絕大多數(shù)服務(wù)商當(dāng)然都在支持Docker,但現(xiàn)在CaaS當(dāng)中限定容器類型的現(xiàn)象正愈發(fā)普遍。云服務(wù)商越來(lái)越多地將其產(chǎn)品耦合起來(lái),確?蛻裟軌驖M足云服務(wù)提出的種種使用要求。因此如果企業(yè)希望在容器類型當(dāng)中做出選擇,至少應(yīng)確保其符合多數(shù)CaaS供應(yīng)商提出的OCI標(biāo)準(zhǔn)。
此外,由于CaaS并不怎么強(qiáng)制限定能夠在容器中運(yùn)行的服務(wù)類型,所以企業(yè)往往難以找到適當(dāng)?shù)墓ぞ吲c監(jiān)控方案。請(qǐng)確保使用Scaylr等工具持續(xù)監(jiān)控容器運(yùn)行,目前大多數(shù)CaaS供應(yīng)商要求用戶自行跟蹤容器狀態(tài)。
構(gòu)成CaaS的基本要素
下面來(lái)看構(gòu)成CaaS的各類組件。
容器注冊(cè)表
容器注冊(cè)表是容器鏡像存儲(chǔ)庫(kù),我們可以將它視為容器的Maven庫(kù)。在將鏡像放入存儲(chǔ)庫(kù)后,容器管理系統(tǒng)即可提取鏡像并加以運(yùn)行。
大多數(shù)開(kāi)發(fā)者最熟悉的注冊(cè)表當(dāng)數(shù)Docker Hub,可以使用這類公共注冊(cè)表,也可以使用某些本地內(nèi)部版本。
容器管理
CaaS的容器管理與編排組件負(fù)責(zé)管理容器與容器集群。常見(jiàn)的容器管理工具包括Kubernetes與Docker Swarm。
首先,容器管理能夠自動(dòng)執(zhí)行容器部署。這類組件會(huì)創(chuàng)建新實(shí)例,監(jiān)控這些實(shí)例以確保其正常啟動(dòng),并在發(fā)生問(wèn)題時(shí)加以回滾。一旦應(yīng)用程序順利啟動(dòng)并開(kāi)始運(yùn)行,容器管理還可監(jiān)控服務(wù)運(yùn)行狀態(tài)。如果某個(gè)服務(wù)實(shí)例發(fā)生故障或無(wú)法響應(yīng),則容器管理組件將啟動(dòng)新實(shí)例以接管相應(yīng)負(fù)載。
容器管理組件還幫助實(shí)現(xiàn)負(fù)載均衡并控制容器之間的通信。例如,其僅允許客戶端應(yīng)用程序及容器在完全啟動(dòng)并運(yùn)行之后,方可調(diào)用服務(wù)實(shí)例。
開(kāi)發(fā)者工具
除了容器管理與注冊(cè)表,CaaS解決方案中還提供多種開(kāi)發(fā)者工具。最常用的工具包括CLI或API。這些工具將幫助監(jiān)控并管理容器實(shí)例。雖然很多開(kāi)發(fā)者希望以自動(dòng)化或腳本化方式處理大部分管理任務(wù),但這些開(kāi)發(fā)者工具還是可以幫助快速對(duì)實(shí)例進(jìn)行規(guī)模伸縮、或即時(shí)修改配置與部署選項(xiàng)。
總結(jié)
多年以來(lái),容器已經(jīng)憑借自身強(qiáng)大的特性進(jìn)入主流市場(chǎng),但CaaS供應(yīng)商并沒(méi)有絲毫松懈。他們以更靈活的方式滿足著大多數(shù)開(kāi)發(fā)團(tuán)隊(duì)的需求,成功從PaaS手中奪下不少市場(chǎng)份額。但是,CaaS并不適合所有用戶、所有場(chǎng)景。換言之,它只是我們?nèi)找纨嫶蟮拈_(kāi)發(fā)者空間中的另一款工具。究竟適不適合,請(qǐng)務(wù)必認(rèn)真考量。