如今,在云計(jì)算領(lǐng)域,越來越多的IT組織正在構(gòu)建混合云和多云環(huán)境以支撐其業(yè)務(wù)運(yùn)行。從容器的角度來看,我們知道,容器應(yīng)用程序從一開始就內(nèi)置了非??捎^的可移動(dòng)性、靈活性和效率。但是對(duì)于容器數(shù)據(jù)來說,它的移動(dòng)性又如何?如何構(gòu)建一個(gè)數(shù)據(jù)框架來優(yōu)化公有云,并為容器應(yīng)用程序及其數(shù)據(jù)提供真正的移動(dòng)性?
容器和塊存儲(chǔ)
容器流行的原因很大一部分來自于Docker公司,該公司向我們介紹了容器運(yùn)行時(shí)、應(yīng)用程序庫(kù)和多節(jié)點(diǎn)(服務(wù)器)配置的框架。很快,Docker就被Kubernetes——谷歌的開源容器平臺(tái)所納入。
這兩個(gè)平臺(tái)都使用基于塊的存儲(chǔ)來為容器數(shù)據(jù)提供持久性。最初,假定容器是無狀態(tài)的,就需要使用應(yīng)用程序復(fù)制和冗余來維護(hù)對(duì)持久數(shù)據(jù)的訪問。但這被證明是不切實(shí)際的,而且大家都認(rèn)為我們需要某種形式的持久性存儲(chǔ),即使是對(duì)于短期存在的容器也是如此。
塊存儲(chǔ)速度快,為應(yīng)用程序提供低延遲。在容器部署中,塊存儲(chǔ)設(shè)備使用本地文件系統(tǒng)進(jìn)行格式化并映射到容器中。根據(jù)使用要求,塊存儲(chǔ)設(shè)備可以在容器的生命周期內(nèi)繼續(xù)使用,或者僅在容器運(yùn)行時(shí)使用。
如果容器中的應(yīng)用程序任務(wù)是可重新啟動(dòng)的,那么塊存儲(chǔ)只需為容器數(shù)據(jù)提供可伸縮的快速存儲(chǔ)。通過可重新啟動(dòng),意味著應(yīng)用程序組件可以用新格式化的空塊設(shè)備進(jìn)行實(shí)例化。
然而,當(dāng)我們走出這些簡(jiǎn)單的界限時(shí),存儲(chǔ)必須提供更多能力。例如,如果一個(gè)容器由于硬件或軟件故障而需要重新啟動(dòng),那么在現(xiàn)有塊存儲(chǔ)設(shè)備上重用數(shù)據(jù)可能是可行的,而不是從另一個(gè)源重新創(chuàng)建數(shù)據(jù)。如果應(yīng)用程序的一部分必須移動(dòng)到另一個(gè)物理位置,那么容器數(shù)據(jù)可能也必須移動(dòng)。
構(gòu)建一個(gè)數(shù)據(jù)平面框架
為了實(shí)現(xiàn)數(shù)據(jù)和應(yīng)用程序遷移,我們需要為數(shù)據(jù)平面構(gòu)建一個(gè)框架。基于此,數(shù)據(jù)將比任何單獨(dú)的容器壽命更長(zhǎng),并且需要跨多個(gè)數(shù)據(jù)中心和位置移動(dòng),這意味著可能還需要在公有云和本地位置之間移動(dòng)。一個(gè)很好的例子是,需要將數(shù)據(jù)復(fù)制到公有云中,從而為測(cè)試/開發(fā)環(huán)境提供原料。
對(duì)象存儲(chǔ)是構(gòu)建數(shù)據(jù)框架的多種方法之一。它本質(zhì)上是可移動(dòng)的,可以通過使用http(s)協(xié)議的廣域網(wǎng)進(jìn)行訪問。對(duì)象存儲(chǔ)提供了跨距離復(fù)制的能力,并且可以輕松地跨平臺(tái)工作。對(duì)象存儲(chǔ)的主要挑戰(zhàn)是如何實(shí)現(xiàn)良好的安全性,并將數(shù)據(jù)映射到應(yīng)用程序?qū)哟谓Y(jié)構(gòu),例如,使用bucket和文件夾映射到應(yīng)用程序名稱。
將塊和文件存儲(chǔ)添加到容器框架更加復(fù)雜。與文件存儲(chǔ)相比,塊存儲(chǔ)具有更低的延遲和更大的吞吐量,但現(xiàn)在情況已經(jīng)不同了。使用諸如NVMe這樣的新型媒介,初創(chuàng)公司正在構(gòu)建高性能、可伸縮的文件系統(tǒng),這些系統(tǒng)既可以在場(chǎng)所中工作,也可以在公有云中工作。
本地塊存儲(chǔ)(如AWS的彈性計(jì)算云)的另一個(gè)挑戰(zhàn)是,這些設(shè)備只能連接到本地容器或虛擬實(shí)例。沒有直接的方法將公有云中的塊存儲(chǔ)復(fù)制到不同的提供商或本地位置中。
數(shù)據(jù)抽象
如果數(shù)據(jù)可移植性是必要的,那么最好的選擇是構(gòu)建一個(gè)獨(dú)立的數(shù)據(jù)平面,它不依賴于公有云提供商的本地存儲(chǔ)。目前也存在提供擴(kuò)展塊和文件存儲(chǔ)的產(chǎn)品,這些產(chǎn)品可以跨越單個(gè)或多個(gè)地理位置。這包括合并公有云和私有云。
一些擴(kuò)展產(chǎn)品可以在多個(gè)位置上顯示單個(gè)數(shù)據(jù)視圖,而其他產(chǎn)品使用快照來復(fù)制數(shù)據(jù)。這意味著需要復(fù)制數(shù)據(jù)并設(shè)置相應(yīng)的進(jìn)程,以確保可以跟蹤和管理最新的副本。當(dāng)使數(shù)據(jù)在大范圍內(nèi)可用時(shí),將會(huì)有延遲問題。
API扮演的角色,以及更多的挑戰(zhàn)
生態(tài)系統(tǒng)開發(fā)人員已經(jīng)開始添加用于存儲(chǔ)的API。Kubernetes有容器存儲(chǔ)接口(CSI),它公開了一組用于創(chuàng)建和將卷附加到容器的功能。CSI確保存儲(chǔ)被成功映射到可以跨多個(gè)物理服務(wù)器部署的Pod中的容器。
Docker使用卷插件來實(shí)現(xiàn)與CSI相同的功能。然后,用戶可以從存儲(chǔ)硬件和軟件部署卷驅(qū)動(dòng)程序,以確保將數(shù)據(jù)正確地從存儲(chǔ)映射到容器。
另外,涉及到與容器數(shù)據(jù)相關(guān)的存儲(chǔ)、多個(gè)容器部署以及平臺(tái)間無縫數(shù)據(jù)遷移時(shí),我們?nèi)匀幻媾R這許多挑戰(zhàn)。例如,AWS Fargate只支持彈性云計(jì)算中的外部卷。