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

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

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

第三站 CI&CD:自動化構建與部署

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

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

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

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

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

第四站 容器編排:高效的管理、調度與調整

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

極客網企業(yè)會員

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

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

長按掃碼 閱讀全文