知識(shí)庫
在不同的編排器Kubernetes、Mesos、Docker Swarm之間,它們有不同的接口來訪問存儲(chǔ)資源,例如Docker有插件機(jī)制的DVDI接口,Mesos&Pivotal Cloud Foundry也使用一些Docker接口,Kubernetes具有本地驅(qū)動(dòng)程序(其中卷驅(qū)動(dòng)程序是源代碼樹的主要部分)——提供外部API和當(dāng)前CSI的Flex驅(qū)動(dòng)程序;還有一些API框架和工具,如Rex-Ray,OpenSDS等,提供其他方式來連接存儲(chǔ)……為提供一個(gè)標(biāo)準(zhǔn)的API,供多種編排器和多個(gè)存儲(chǔ)提供商使用,簡化它們之間的接口,CSI誕生了!
CSI(容器存儲(chǔ)接口)是要定義一個(gè)行業(yè)標(biāo)準(zhǔn),使存儲(chǔ)供應(yīng)商(SP)能夠一次開發(fā)一個(gè)插件,并在多個(gè)容器編排器(CO)系統(tǒng)中工作。
Kubernetes 1.9 引入了CSI( 容器存儲(chǔ)接口)的 Alpha 實(shí)現(xiàn)(相關(guān)參考 2),這一功能讓安裝新的存儲(chǔ)卷插件像部署 Pod 一樣簡單。同時(shí)給第三方存儲(chǔ)提供商無需加入 Kubernetes 核心代碼,即可開發(fā)存儲(chǔ)的接入方案。
這一特性在 1.9 中還處于 Alpha 階段,因此必須顯式啟用。雖說 Alpha 功能不推薦在生產(chǎn)環(huán)境中使用,但這是對(duì)項(xiàng)目方向的一個(gè)指引,CSI 就是在倡導(dǎo)一個(gè)更加易于擴(kuò)展且更標(biāo)準(zhǔn)化的 Kubernetes 存儲(chǔ)生態(tài)。
Dell開源項(xiàng)目組{code}一直在布道云原生模式和容器技術(shù)的未來優(yōu)勢,該項(xiàng)目組對(duì)CSI(容器存儲(chǔ)接口)投入很大,近日{(diào)code}技術(shù)總監(jiān)Clint Kitson就此話題發(fā)表觀點(diǎn),闡述了云原生時(shí)代存儲(chǔ)模式和CSI之所以關(guān)系重大的三點(diǎn)理由。
今天,很明顯我們能夠認(rèn)識(shí)到我們?yōu)槭裁葱枰@樣一個(gè)標(biāo)準(zhǔn),容器通過動(dòng)態(tài)管理應(yīng)用讓我們能夠解決一些很困難的問題,容器生態(tài)系統(tǒng)中人、社區(qū)和企業(yè)正在認(rèn)真地創(chuàng)造越來越強(qiáng)大的互操作工具來推進(jìn)落地。然而,在管理存儲(chǔ)時(shí),我們都撞上了一堵墻,“每個(gè)人都以不同的方式來做”。
計(jì)算機(jī)行業(yè)已經(jīng)認(rèn)識(shí)到,創(chuàng)建標(biāo)準(zhǔn)接口多么美好——它作為基本規(guī)則,最大限度地減少用戶的混淆。沒有它們,會(huì)出現(xiàn)大量的復(fù)雜性和碎片化問題。制定標(biāo)準(zhǔn)就像制定家庭裝修的藍(lán)圖,通過記錄電源插座應(yīng)該放置的位置,住在里面的人就可以知道插入插頭的位置,并自行決定安裝什么小工具,而不用擔(dān)心如何為其供電,可能存在哪些限制。
CSI就是由容器編排器—— Mosos、Kubernetes、Cloud Foundry和Docker領(lǐng)導(dǎo)的一個(gè)社區(qū)驅(qū)動(dòng)的計(jì)劃,它定義一個(gè)滿足其管理的應(yīng)用存儲(chǔ)需求的接口。我們都希望擁有容器賦能的更智能、更強(qiáng)大的應(yīng)用。
我認(rèn)為CSI之所以重要有三個(gè)基本原因:
1:CSI提供KISS和社區(qū)方法
它并不像以往的整合存儲(chǔ)的方式,在某些方面,它提供了更多的細(xì)節(jié)和功能。但是,早期的項(xiàng)目,如果不落實(shí),就會(huì)變得焦點(diǎn)分散和難以完成。參與者會(huì)難以合作,因?yàn)橛羞@么多的決定讓人分心。
因此,CSI采用最簡單的方法:認(rèn)識(shí)到人們今天如何使用容器和存儲(chǔ),但要以接口規(guī)范和可插拔的形式來使用。簡單——“保持簡單,傻瓜式!”(KISS)的方法 ——使CSI首先關(guān)注基礎(chǔ)。結(jié)果——我們希望CSI能夠提供容器編排器和存儲(chǔ)平臺(tái)之間的更好的集成,這樣我們可以迭代改進(jìn),并依靠它來構(gòu)建更好的應(yīng)用。
2:CSI為更多用例提供可預(yù)測的功能性接口
構(gòu)建所有類型的接口都會(huì)面臨的一種挑戰(zhàn)是,開發(fā)人員和香港機(jī)房專業(yè)人員需要一個(gè)易于掌握的用戶體驗(yàn),同時(shí)支持使用它的應(yīng)用的深度功能集。
例如,Docker為其卷驅(qū)動(dòng)程序創(chuàng)建了一個(gè)規(guī)范,它還有一些改進(jìn)的空間。當(dāng)故障發(fā)生時(shí),它的接口不能正常處理情況。如果一個(gè)組件出現(xiàn)故障,很難重新同步到正確的狀態(tài)。
我不是針對(duì)Docker。我們有很多的接口被定義,但沒有一個(gè)是完美的例子。
CSI團(tuán)隊(duì)正在盡力從不完善之處有所學(xué)習(xí)。我們希望擴(kuò)展與存儲(chǔ)相關(guān)的設(shè)計(jì)模式,與更多的應(yīng)用程序一起工作。
例如,我們目前只引入具有文件系統(tǒng)的卷。當(dāng)一個(gè)應(yīng)用程序需要存儲(chǔ)數(shù)據(jù)時(shí),它必須抓取一個(gè)帶有文件系統(tǒng)的卷。對(duì)于CSI,我們支持原始?jí)K設(shè)備 ——這是基本的,但目前尚不可用。用戶可以定義沒有文件系統(tǒng)的卷。這使得新應(yīng)用能夠運(yùn)行于與邏輯塊地址配對(duì)的容器。實(shí)際上,需要高性能或在主機(jī)間共享設(shè)備的應(yīng)用可能更喜歡這樣。
3. CSI由用戶需求和社區(qū)驅(qū)動(dòng),而非存儲(chǔ)公司
CSI自上而下的設(shè)計(jì)來自于容器編排工具和社區(qū)。為了簡單起見,團(tuán)隊(duì)成員沒有大跨步前進(jìn),而是采用“做一點(diǎn),但做得非常好”的老派方法。對(duì)我來說,這可能是CSI最重要的一個(gè)方面。
所有從事CSI工作的人都試圖使規(guī)范與使用它的人相關(guān)。這個(gè)團(tuán)隊(duì)并沒有根據(jù)任何存儲(chǔ)公司能夠提供什么以及他們想要賣給你的東西來做出決定。
相反,CSI小組考慮的問題包括:“這個(gè)問題怎么解決?誰是解決問題的合適人選?什么是理想的解決方案?如何實(shí)施?“
CSI如何改變你的生活?
如果說技術(shù)人員會(huì)討厭什么東西,那可能就是被迫選擇一種工具。如果CSI取得成功,它將確保企業(yè)不會(huì)僅僅因?yàn)樘囟ǖ拇鎯?chǔ)支持或特定的云提供商而選擇一家容器平臺(tái)。這將提高所有平臺(tái)的交互質(zhì)量。這里的成功給大家?guī)砹艘粋€(gè)一次性的復(fù)雜任務(wù),而一步鞏固了存儲(chǔ)的動(dòng)態(tài)管理和可移植性的云原生模式。這將使每個(gè)人的工作變得更容易。