云原生漫游指南2 從CI&CD到計算存儲分離

原標(biāo)題:云原生漫游指南2 從CI&CD到計算存儲分離

之前在《云原生漫游指南(1)丨先從構(gòu)建一個容器起步》中,我們詳細(xì)介紹了企業(yè)在云原生轉(zhuǎn)型路徑中必經(jīng)的前兩個站點:容器化、鏡像&運行時,即將應(yīng)用開發(fā)的產(chǎn)出物構(gòu)建成容器鏡像,并存放和運行鏡像。有人可能會問,這一過程中有什么提升效率的方式嗎? 答案是肯定的,本文就將從解決這個問題開始,繼續(xù)介紹云原生路徑中接下來的幾個關(guān)鍵站點。

第三站 CI&CD:自動化構(gòu)建與部署

容器化過程細(xì)粒度拆分了應(yīng)用的部署單元,因此開發(fā)者可以更加頻繁和便捷地對每個容器版本進行變更以支持敏捷研發(fā)。

但如果每次變更都需要手工構(gòu)建鏡像并將新版本部署到運行時,顯然會大大影響效率。所以云原生中非常重要的一環(huán),就是實現(xiàn)自動化的容器鏡像集成和部署,也就是我們常常聽到的CI&CD(Continuous Integration, Delivery & Deployment)。 實現(xiàn)容器CI&CD的工具很多,如業(yè)內(nèi)最流行的開源CI&CD工具Jenkins,就為容器構(gòu)建和部署提供了豐富的插件支持。

利用這些CI&CD工具,開發(fā)者不僅可以實現(xiàn)自動化的鏡像構(gòu)建和部署,還能在這個過程中插入一些更為復(fù)雜的邏輯,以滿足不同場景的業(yè)務(wù)需求,其中最為常見的就是灰度發(fā)布。

灰度發(fā)布意味著每次部署新版本鏡像時,承載業(yè)務(wù)的所有容器不會同時被更新到新版本,而是根據(jù)用戶設(shè)定的策略分批更新,同時在此期間業(yè)務(wù)流量會被平滑的逐漸切換到新的版本。在灰度發(fā)布的過程中,開發(fā)者可以隨時觀察新老版本之間的流量切換和健康狀況,一旦出現(xiàn)故障可以隨時中斷發(fā)布過程并將已經(jīng)更新的部分實例回滾。

在百度智能云上,用戶可以直接利用容器鏡像服務(wù)中的自動構(gòu)建和部署功能實現(xiàn)簡單的CI&CD流程,應(yīng)用于一些測試場景或者簡單的業(yè)務(wù)中。如果需要編排更加復(fù)雜的CI&CD流水線,引入更多的權(quán)限管理和自動化測試等能力,也可以選擇百度效率云所提供的完整CI&CD工具鏈。

第四站 容器編排:高效的管理、調(diào)度與調(diào)整

經(jīng)過前面的三個站點,應(yīng)用已經(jīng)可以通過容器化的方式,持續(xù)上線發(fā)布到生產(chǎn)環(huán)境當(dāng)中。但是隨著應(yīng)用以及容器的數(shù)量逐漸增多,運維人員也會面臨更多的問題:

  • 如何把容器合理調(diào)度到不同的計算資源上?
  • 如何動態(tài)調(diào)整容器的實例數(shù)量?
  • 如何區(qū)別管理不同類型應(yīng)用的容器生命周期?

容器編排系統(tǒng)的目的就是幫助運維人員解決這些問題,而Kubernetes則是容器編排領(lǐng)域最為成功的項目。

通過定義一套標(biāo)準(zhǔn)易用的模型,Kubernetes將容器和容器相關(guān)的資源包裝成為多種面向不同場景的工作負(fù)載類型,如部署(deployment)、任務(wù)(Job)、守護進程(daemonset)、有狀態(tài)任務(wù)(statefulset)等。

用戶只需要用Kubernetes的語法將待部署的業(yè)務(wù)描述為這些不同工作負(fù)載,Kubernetes將會根據(jù)計算資源的實際情況自動完成容器的調(diào)度和生命周期管理,比如自動維持部署的副本數(shù)在用戶指定的規(guī)模、將守護進程部署到集群中所有節(jié)點中、保障有狀態(tài)任務(wù)中每個實例的ID不變等。 實施一個基于Kubernetes的容器編排系統(tǒng)并不復(fù)雜,社區(qū)中有多種工具可以幫助開發(fā)者快速創(chuàng)建一個Kubernetes集群,比如kubeadmin、kubeoperator等。但真正把Kubernetes投入生產(chǎn)中使用還有很多問題需要考慮,這些問題主要體現(xiàn)在3個方面:

1.Kubernetes與IaaS的適配問題。不同的基礎(chǔ)架構(gòu)提供的計算、網(wǎng)絡(luò)和存儲方案是不一樣的,在公有云上這種差異尤其顯著,比如公有云不同的授權(quán)機制、網(wǎng)絡(luò)和存儲實現(xiàn)方案等。Kubernetes為與IaaS層的適配提供了一個叫做cloud-controller-manager的組件,抽象出面向IaaS平臺的接口,而具體的實現(xiàn)交給各云廠商來做。

2.Kubernetes本身的維護成本。Kubernetes雖然為容器編排管理帶來了極大的便利,但是對Kubernetes本身的穩(wěn)定性維護會增加額外的成本。當(dāng)容器規(guī)模增大時,需要對Kubernetes的核心組件有完善的監(jiān)控和容災(zāi)方案,才能真正投入到生產(chǎn)環(huán)境中。

3.開源組件的集成管理。Kubernetes作為容器編排生態(tài)的底座,在社區(qū)中發(fā)展出了大量面向Kubernetes的組件,進而提供監(jiān)控、日志、網(wǎng)絡(luò)管理、持續(xù)集成等能力。那么如何在眾多開源組件中選型、如何管理大量開源組件的版本和適配問題、如何讓不同開源組件提供統(tǒng)一的使用界面。這些問題在生產(chǎn)環(huán)境中都需要考慮。 在百度智能云上,用戶可以選擇云容器引擎CCE產(chǎn)品,從而滿足Kubernetes集群托管的需求,在云上輕松創(chuàng)建、管理和運維專屬的Kubernetes集群,能夠大大降低搭建容器基礎(chǔ)設(shè)施的成本,更快達(dá)成容器編排這一云原生關(guān)鍵路徑。

第五站 計算存儲分離:提升靈活性

我們將應(yīng)用容器交給Kubernetes進行編排調(diào)度后,并不意味著這些容器就已經(jīng)可以開始在集群中靈活遷移了。雖然容器化讓應(yīng)用可以跨節(jié)點快速啟停,但是應(yīng)用所依賴的數(shù)據(jù)如果依然保存在本地磁盤中,那么容器的靈活性就會大大受到限制。

接下來我們需要做的就是拆分系統(tǒng)中的計算與存儲,并且用分布式的遠(yuǎn)程存儲方案來替代本地存儲,從而讓容器的調(diào)度不再受限于存儲資源所在的位置。

云磁盤是一種最直觀的遠(yuǎn)程存儲方式,它提供了可以通過網(wǎng)絡(luò)路徑掛載到容器宿主機上的塊存儲設(shè)備。云磁盤的優(yōu)勢在于提供了與本地磁盤幾乎一致的使用體驗,因此可以作為最低成本的本地存儲遷移方案。但是云磁盤的使用場景依然受限于它所掛載的宿主機,因此在頻繁遷移的場景或者分布式讀寫的場景中就不那么適用了。

NFS(網(wǎng)絡(luò)文件系統(tǒng))則是針對這兩種場景的解決方案之一,它可以為多個宿主機提供共享的文件系統(tǒng),支持分布式系統(tǒng)同時進行讀寫。不過相比之下NFS犧牲了一定的IO性能,因此并不適用于對性能要求較高的業(yè)務(wù)。

對象存儲是另一種存儲方式,它在支持分布式遠(yuǎn)程訪問的同時提供了更強的性能。對象存儲中不再有文件系統(tǒng)中的層級結(jié)構(gòu),每個存儲對象都存在于存儲池的扁平地址空間中,并且都具有各自的唯一標(biāo)識符,應(yīng)用程序需要訪問對象存儲系統(tǒng)提供的接口,并通過唯一標(biāo)識符對存儲對象進行讀寫等操作。

相比起云磁盤或NFS,對象存儲的使用通常會對業(yè)務(wù)代碼的開發(fā)有所侵入,但是對象存儲在分布式、高并發(fā)的場景下,卻有其不可替代的優(yōu)勢。 為了滿足對這些不同類型的存儲靈活使用,Kubernetes提供了一種叫做PV(Persistent Volume)的對象用來對存儲資源進行統(tǒng)一管理。

云服務(wù)商通過向Kubernetes提供插件的方式來支持各自對三種不同存儲類型的不同實現(xiàn),從而讓開發(fā)者通過統(tǒng)一的方式選擇所需存儲類型并掛載到容器。

百度智能云容器引擎CCE支持用戶通過PV的方式使用云磁盤CDS、云文件系統(tǒng)CFS和云對象存儲BOS三種存儲類型,從而滿足不同場景下的業(yè)務(wù)需求。 下一期,我們將繼續(xù)介紹云原生漫游之旅的關(guān)鍵站點,敬請期待。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-12-18
云原生漫游指南2 從CI&CD到計算存儲分離
用戶只需要用Kubernetes的語法將待部署的業(yè)務(wù)描述為這些不同工作負(fù)載,Kubernetes將會根據(jù)計算資源的實際情況自動完成容器的調(diào)度和生命周期管理,比如自動維持部署的副本數(shù)在用戶指定的規(guī)模、將

長按掃碼 閱讀全文