容器云存儲的需求考量與方案選擇
容器云平臺存儲不僅僅是數(shù)據(jù)的持久化存儲,也包括容器云平臺自身的存儲需求以及鏡像存儲需求,甚至需要考慮云上中間件,比如Kafka等對存儲的需求。
互聯(lián)網(wǎng)公司的金融業(yè)務對金融行業(yè)的發(fā)展帶來的巨大沖擊和挑戰(zhàn),逼迫金融行業(yè)不得不考慮互聯(lián)網(wǎng)金融業(yè)務和移動業(yè)務的發(fā)展,這又對技術平臺和技術能力提出了新的要求和挑戰(zhàn)。互聯(lián)網(wǎng)金融業(yè)務和移動業(yè)務要求對業(yè)務需求快速響應,甚至是小時、分鐘級,這就要求能實現(xiàn)業(yè)務的敏捷響應、敏捷開發(fā)、持續(xù)集成、持續(xù)部署、持續(xù)改進,實現(xiàn)自動化的運維、容錯、異常修復、彈性伸縮、灰度發(fā)布等能力,要支持這些能力,環(huán)境一致性要求、基礎設施服務平臺等要求需要滿足,才能在激烈的競爭中生存下來。金融公司業(yè)務的發(fā)展趨勢,恰如如逆水行舟,不進則退,不得不采用新的技術和平臺。
容器云平臺提供了環(huán)境一致性能力、支持彈性伸縮、灰度發(fā)布、藍綠部署等能力,又和DevOps開發(fā)運維一體化方法論、微服務架構契合,實現(xiàn)持續(xù)集成、持續(xù)部署、持續(xù)監(jiān)控、持續(xù)反饋、持續(xù)改進閉環(huán)。另外大數(shù)據(jù)、AI等應用的部署運維也需要考慮構建共同的基礎設施服務平臺,容器云生逢其時。
隨著容器技術的成熟和容器云平臺的實際落地,越來越多的企業(yè)已經(jīng)建設或者嘗試正在建設容器云平臺。容器云平臺如何管理并使用好基礎資源CPU、內(nèi)存、存儲、網(wǎng)絡等資源是其關鍵的能力之一,而存儲作為容器云平臺的基礎設施資源,保證著容器云數(shù)據(jù)的安全,使數(shù)據(jù)能安全持久的存儲、查詢、不丟失。不過容器技術和容器云平臺對存儲的使用與原來相比是不同的,容器內(nèi)部存儲是不支持持久化數(shù)據(jù)存儲,這就需要考慮采用外部存儲掛載到容器上,在容器遷移、消亡、重啟等活動中保證數(shù)據(jù)的安全。數(shù)據(jù)是企業(yè)的核心資產(chǎn),在激烈的市場競爭中,已經(jīng)越來越體現(xiàn)出其巨大的價值。因此,在建設容器云平臺的時候,是必須要考慮容器的存儲的,如:存儲方式、存儲介質、存儲產(chǎn)品、存儲數(shù)據(jù)量、性能需求等。此外,容器云平臺存儲不僅僅是數(shù)據(jù)的持久化存儲,也包括容器云平臺自身的存儲需求以及鏡像存儲需求,甚至需要考慮云上中間件,比如Kafka等對存儲的需求。
一、容器存儲方式
存儲資源是容器云的基礎設施資源之一,保證著容器云平臺的正常運行和數(shù)據(jù)持久化能力。容器云存儲的方式有容器內(nèi)部存儲方式、容器宿主機磁盤存儲方式、容器遠程卷存儲方式等。
1、容器內(nèi)部存儲方式
容器內(nèi)部存儲即容器的讀寫層,但在容器銷毀時讀寫層也銷毀,在讀寫層的數(shù)據(jù)會丟失,就象內(nèi)存中的數(shù)據(jù),應用進程關閉,內(nèi)存中數(shù)據(jù)就會清空。容器內(nèi)部存儲方式只可作為容器運行時臨時的存儲方式。
2、容器宿主機本地磁盤存儲方式
容器宿主機本地磁盤存儲是使用本地存儲卷,其是對本機磁盤的映射。本地卷不可創(chuàng)建快照。優(yōu)點是不需要獨立存儲,創(chuàng)建操作簡單,讀寫效率高。缺點是不能在節(jié)點間實現(xiàn)容器漂移。
3、容器遠程卷存儲方式
遠程卷包括NFS和分布式遠程存儲卷,NFS的創(chuàng)建需要增加設備、讀寫權限、設備目錄的信息;分布式存儲卷包括Ceph、GlusterFS、ScaleIO、Portworx等。
二、容器云存儲的重要性
存儲是容器云平臺提供的基礎資源之一,要安全穩(wěn)定的使用容器云平臺,對容器云平臺的存儲資源,在采用和實施容器云平臺之前,需要提前做些研究和規(guī)劃,因為:
1.數(shù)據(jù)是企業(yè)的重要資產(chǎn),保證數(shù)據(jù)不丟失,數(shù)據(jù)完整,才能更好的開展業(yè)務。
2.容器和虛擬機或物理機技術實現(xiàn)側重不同,容器側重無狀態(tài)應用,要支持有狀態(tài)應用,數(shù)據(jù)存儲必須基于業(yè)務需求提前進行考慮和規(guī)劃。
3.容器云是基礎平臺,涉及平臺組件、鏡像、應用、中間件等多個方面,每個方面都可能有不同的存儲需求。要獲得理想的性能和結果,需要全面的考慮每個方面,存儲等作為基礎設施資源,更是必不可少的部分。
4.容器是用來承載應用的,這點要深刻理解。應用各個層次的數(shù)據(jù)具有潛在的價值,捕獲并處理、存儲、分析這些數(shù)據(jù)是獲取價值的步驟。因此,應用數(shù)據(jù)的持久化是容器云平臺支撐業(yè)務應用的重要的基礎能力之一。建好基礎,才能更好的服務于業(yè)務應用。
凡事預則立,不預則廢。說明了規(guī)劃計劃的重要性。臨時抱佛腳總會對業(yè)務產(chǎn)生或多或少的影響,容器云是基礎設施平臺,存儲是容器云的基礎資源,基礎設施資源決定上層應用服務的能力,目前IaaS層還無法直接為容器云平臺提供需要的所有存儲資源,和 IaaS的對接也存在技術難點,沒有完整的數(shù)據(jù)就難以快速響應業(yè)務需求,難以快速超越或者跟隨對手,大數(shù)據(jù)、AI等技術支撐的云上業(yè)務應用就難以順利實施。
說到底,數(shù)據(jù)、還是數(shù)據(jù)!是核心資產(chǎn),需要重視其安全的保存和備份、重視其存儲方式、介質、存儲性能等影響。
三、容器云存儲需要考慮的幾個方面
在采用容器云平臺時,存儲的使用大概有這幾個方面需要考慮:容器云平臺自身需要的存儲、應用數(shù)據(jù)持久化存儲、鏡像存儲、中間件部署需要的存儲。最重要的是容器云平臺自身的存儲和數(shù)據(jù)持久化存儲。數(shù)據(jù)持久化存儲數(shù)據(jù)量有些公司可能會比較大,有些可能較小。在有大量存儲需求的時候就更要做好規(guī)劃。數(shù)據(jù)存儲很重要的一點是支持容器遷移,隨容器遷移。不同的業(yè)務應用對存儲的需求不同,所以這里沒有明確的標準,需要根據(jù)實際情況來確定。越重要的數(shù)據(jù)存儲的安全性要求越高。
1.容器云平臺自身的存儲:容器云平臺自身有很多組件,比如ETCD,會存儲容器云平臺的狀態(tài)和配置信息,其對存儲的性能有較高的要求。etcd一旦出現(xiàn)意外,容器云平臺可能癱瘓,所以etcd的存儲對穩(wěn)定性、安全性、性能等方面要求比較高。同時可能還需考慮etcd的集群部署。
2.應用數(shù)據(jù)持久化存儲:包括宿主機本地存儲卷和遠程存儲卷。本地存儲卷是對本機磁盤的映射,本地卷容量和讀寫性能由磁盤的規(guī)格和性能決定,本地卷不可創(chuàng)建快照。優(yōu)點是不需要獨立存儲,創(chuàng)建操作簡單,讀寫效率高;缺點是不能在節(jié)點間實現(xiàn)容器漂移。遠程卷包括NFS和分布是遠程存儲卷,通常是容器云平臺的***。
3.鏡像存儲:鏡像倉庫用于存儲應用鏡像和中間件鏡像等所需的空間。
4.中間件部署需要的存儲:運行某些中間件需要的存儲需求。不同的中間件可能對存儲有不同的需求。
四、持久化存儲需求
作為用戶,我們關注存儲其實更多的是關注數(shù)據(jù)持久化存儲,數(shù)據(jù)是核心資產(chǎn),重要數(shù)據(jù)必須持久化存儲并備份,而容器的內(nèi)部存儲難以做到持久化,本地存儲又難以遷移,所以更多的話是采用遠程存儲卷來滿足持久化存儲需求。這是因為:
1.從業(yè)務角度,應用運行時異常,狀態(tài)、數(shù)據(jù)等存儲起來用于恢復或重試執(zhí)行。
2.日志數(shù)據(jù)是業(yè)務跟蹤、查詢、統(tǒng)計、分析等的重要基礎,所有的操作都要基于數(shù)據(jù)的持久化存儲。
3.容器彈性伸縮特性非常切合微服務擴縮需求,日志、運行時數(shù)據(jù)、結果等跟隨容器遷移且不隨容器銷毀而消失。
4.Kafka、mysql等需要持久化的存儲支持來部署并保存數(shù)據(jù)。
5.數(shù)據(jù)量累積,會帶來質變影響。
6.大數(shù)據(jù)業(yè)務、AI業(yè)務等基于容器云的部署需求。
大數(shù)據(jù)、人工智能都需要數(shù)據(jù)來支撐,所以這塊的數(shù)據(jù)存儲量將會越來越大。比如每天的日志數(shù)據(jù)可能就有幾十個G,幾百個G,這些數(shù)據(jù)經(jīng)過清洗處理分析,可能會帶來新的價值增長點,也會帶來越來越多的新業(yè)務創(chuàng)新。但隨著數(shù)據(jù)量的累積,也會給存儲帶來壓力。所以不同的數(shù)據(jù)可能需要考慮采用不同的存儲方案。這可能有涉及到數(shù)據(jù)的治理問題了。遠程卷有NFS、NAS、SAN、Ceph、GusterFS等產(chǎn)品可以選擇,不同需求選擇不同的產(chǎn)品。
鏡像對存儲的需求相對簡單,鏡像通常也是需要不斷的更新的。不過鏡像需要考慮不同環(huán)境鏡像庫的鏡像存儲。通常情況下,鏡像倉庫可以非容器化部署,相對來說主機存儲資源管理起來會更方便。
中間件存儲更多是因為中間件部署時,不同中間件對存儲的需求可能不同。最典型的比如Kafka,需要多塊磁盤、文件系統(tǒng)使用XFS以及Mount 文件系統(tǒng)時使用noatime選項等以達到更好的性能。這就需要基于不同的組件來確定選擇什么樣的存儲。不過在容器云上實現(xiàn)目前還不是特別便利。可以考慮非容器部署。
五、無容器存儲思路
目前說起容器云存儲,大家都會想到Ceph或GlusterFS等。我們PoC測試的時候也隨大流測試了一下。大家都說這么配,所以我們也就這么配了。不過后來想想,我們mount存儲卷,目的是為了數(shù)據(jù)持久化,為了有狀態(tài)應用。但是如果按照云原生的理念,不是為了云而硬性遷云,可能不需要太多存儲資源。還有就是數(shù)據(jù)可以通過實時數(shù)據(jù)流方式采集到數(shù)據(jù)中心或數(shù)據(jù)處理終端,讓數(shù)據(jù)運轉起來、流轉起來,而不是僅僅存儲起來,充分開發(fā)數(shù)據(jù)的價值。沉睡和靜止的數(shù)據(jù)無法帶來價值,運轉起來的數(shù)據(jù)才有價值,實時性越高的數(shù)據(jù)越有價值。這也是構建大數(shù)據(jù)平臺大數(shù)據(jù)分析的價值。
從這個角度來說,我們可以讓數(shù)據(jù)運轉起來,不用都存儲于磁盤,或者在容器云平臺可以采用這種思想,把數(shù)據(jù)從容器中拋出來,然后再進一步處理或存儲。這樣存儲資源的使用可能就簡單多了。比如應用服務日志,可以直接從容器中把日志信息從日志文件或標準輸出中采集到,然后扔到ES或Kafka等消息中間件。這個功能由容器云平臺來提供,用戶也就不需要關心實現(xiàn)的細節(jié)。更重要的是,通過ES或Kafka可以實時進行數(shù)據(jù)的進一步處理,也避免數(shù)據(jù)在容器平臺持久化存儲的一些問題。
這只是個人的一點想法,具體的可能更多還是要考慮數(shù)據(jù)在容器云平臺的持久化存儲。相應的產(chǎn)品和技術,大家討論的也挺多,這里就不贅述。
六、容器云存儲方案選擇
采用容器云選擇存儲時,需要基于實際的業(yè)務需求來確定,深刻理解容器云平臺是用來承載應用的,是為企業(yè)業(yè)務應用服務的。這也是我們在選擇容器云產(chǎn)品時一再強調(diào)的。我們采用容器云不是為了容器,而是為了業(yè)務應用,為了業(yè)務。不同業(yè)務對存儲的需求不同。有安全性要求比較高的,也有可以容忍數(shù)據(jù)丟失的等。不同的業(yè)務需求,采取的存儲方案、存儲產(chǎn)品就會不同,因為產(chǎn)品不一樣,所付出的資金代價是不一樣的。
選擇產(chǎn)品時還需要考慮企業(yè)自身的技術實力,開源產(chǎn)品有開源產(chǎn)品的優(yōu)點,商用產(chǎn)品也有商用產(chǎn)品的優(yōu)點,對于像我們這樣的金融公司來說,更多要考慮的是數(shù)據(jù)的安全性,在采用開源產(chǎn)品時就會很謹慎,后期服務是一個很重要因素。得有公司來兜底,哪怕多花些錢,買個心安。
另外還要考慮是否有能力駕馭選擇產(chǎn)品或技術。開源產(chǎn)品對技術能力要求比較高,選擇開源產(chǎn)品,***有相應的技術人員儲備。開源產(chǎn)品技術領先,版本迭代變化也比較快,需要有相應的人力去把控。如果做不到這點,選擇商用產(chǎn)品是合適的,雖然成本高點,但經(jīng)過了眾多企業(yè)的技術驗證。特別對傳統(tǒng)企業(yè)來說,技術實力一時還比較難達到要求,無法把控產(chǎn)品,***不要輕易使用開源的產(chǎn)品。
還有可能需要考慮容器云產(chǎn)品和架構方案,以及是否有IaaS層的技術支持,IaaS層采用的技術等方面。
七、存儲、容器云和大數(shù)據(jù)
我們考慮存儲不僅僅是容器云需要,大數(shù)據(jù)平臺也需要,存儲可以單獨作為一塊來考慮,可以不綁在容器云項目上。綜合容器云平臺,大數(shù)據(jù)平臺建設,統(tǒng)一來考慮存儲資源的建設,可能會更好些。我們的最終目的是能為容器云平臺提供存儲資源也就夠了。