有關容器的大肆宣傳幾乎達到了狂熱階段。正在權衡將多少雞蛋放入籃子中的企業,在做出進一步的決定之前,應該考慮容器滿足數據存儲需求的程度如何。
要考慮服務器虛擬化及其對存儲的影響。當然,多臺服務器作為虛擬機運行提高了服務器使用率,但同樣給底層存儲基礎設施帶來了令人難以置信的要求。與單個工作負載生成I/O不同,會有10臺虛擬機生成存儲負載,而且每種負載都具備獨特的特性。同時,虛擬化的殺手锏——在線遷移——需要用到網絡存儲,需要購買昂貴的存儲區域網絡以及網絡附加存儲磁盤陣列。
作為虛擬化的一個變種,容器本身存在一系列需要了解并解決的存儲問題——例如,持久性、性能以及與調度與業務流程系統的集成。但當今的應用容器是新興事物,幾乎每天都在發生變化。隨著IT行業越來越多地將容器作為下一代應用架構的基礎,之前存在的看似難以處理的問題可能已經得到解決。
無狀態解決之道
IT專業人員開始使用容器后不久便遇到了存儲方面的挑戰。
Portworx是一家開發容器內置存儲平臺的創業公司,該公司的CTOGou Rao說:“如果你在使用Docker,那么這些問題立刻就會暴露出來。”
容器在默認情況下并不支持永久存儲。從應用角度看,容器是一個完整的操作系統,但卻耍了小小的花招。諸如由Docker提供的容器依賴使用寫時復制(Copy-On-Write,COW)技術的overlay文件系統來存儲容器根文件系統的更新。停止或刪除容器時,上述更新就丟了。
在容器發展早期,人們不認為缺少持久存儲會是個大問題,因為很多容器運行的是無狀態應用,比如Web應用,其特點是數據獨立于應用之外;而不是諸如數據庫類的“有狀態”應用。容器與微服務架構緊緊聯系在一起——微服務架構將大型的龐大應用分解為單個組件——看似進一步消除了對永久數據存儲的擔憂。
在之后的一段時間,容器始終不支持永久數據存儲,但對計劃在生產環境中使用容器的企業來說,數據存儲問題至關重要。
Packet是一家裸金屬云供應商,該公司的客戶都是容器的大客戶,該公司的CEO Zachary Smith說:“一開始可以很輕松地說這就是容器的架構,直到你開始問我要把數據庫放在哪兒?即使你的應用環境大部分是由無狀態的Web應用構成的,總有某些地方要用到數據庫。”
盡管可以將應用數據存儲在Docker卷或者Docker數據容器中,但這種方式存在局限性,換句話說,對外部存儲的支持有限而且在不同主機上的容器之間共享卷存在困難。
去年Docker發布了Docker 1.9版本,邁出了重要的一步,采用插件方式增加了對永久性存儲的支持。
有證據表明,Flokcer是最為重要的Docker存儲卷插件之一,它是由ClusterHQ提供的一款開源的容器數據卷管理器,可以使用外部數據存儲設備為容器提供永久存儲。例如,SwissCom有一個基于容器、OpenStack以及EMC的ScaleIo軟件定義存儲堆棧的平臺即服務(PaaS)產品。使用Flocker,SwissCom能夠提供永久存儲,在一些應用包括Reddis、MongoDB以及Maria DB中保存數據,該公司應用云總監Marco Hochstrasser說。
Flocker驅動適用于很多存儲設備(比如EMCXtremeIO以及NetAppOnTap)、軟件定義的存儲平臺(比如Ceph、Hedvig)、公有云塊存儲(AWS EBS、OpenStak Cinder和VMwarevSphere)以及Docker Swarm、GoogleKubernetes以及Mesos集群管理器。ClusterHQ的產品副總裁Mohit Bhatnagar表示Flocker會不斷增加對新平臺的支持。