在不同的编排器Kubernetes、Mesos、Docker Swarm之间,它们有不同的接口来访问存储资源,例如Docker有插件机制的DVDI接口,Mesos&Pivotal Cloud Foundry也使用一些Docker接口,Kubernetes具有本地驱动程序(其中卷驱动程序是源代码树的主要部分)——提供外部API和当前CSI的Flex驱动程序;还有一些API框架和工具,如Rex-Ray,OpenSDS等,提供其他方式来连接存储……为提供一个标准的API,供多种编排器和多个存储提供商使用,简化它们之间的接口,CSI诞生了!
CSI(容器存储接口)是要定义一个行业标准,使存储供应商(SP)能够一次开发一个插件,并在多个容器编排器(CO)系统中工作。
Kubernetes 1.9 引入了CSI( 容器存储接口)的 Alpha 实现(相关参考 2),这一功能让安装新的存储卷插件像部署 Pod 一样简单。同时给第三方存储提供商无需加入 Kubernetes 核心代码,即可开发存储的接入方案。
这一特性在 1.9 中还处于 Alpha 阶段,因此必须显式启用。虽说 Alpha 功能不推荐在生产环境中使用,但这是对项目方向的一个指引,CSI 就是在倡导一个更加易于扩展且更标准化的 Kubernetes 存储生态。
Dell开源项目组{code}一直在布道云原生模式和容器技术的未来优势,该项目组对CSI(容器存储接口)投入很大,近日{code}技术总监Clint Kitson就此话题发表观点,阐述了云原生时代存储模式和CSI之所以关系重大的三点理由。
今天,很明显我们能够认识到我们为什么需要这样一个标准,容器通过动态管理应用让我们能够解决一些很困难的问题,容器生态系统中人、社区和企业正在认真地创造越来越强大的互操作工具来推进落地。然而,在管理存储时,我们都撞上了一堵墙,“每个人都以不同的方式来做”。
计算机行业已经认识到,创建标准接口多么美好——它作为基本规则,大限度地减少用户的混淆。没有它们,会出现大量的复杂性和碎片化问题。制定标准就像制定家庭装修的蓝图,通过记录电源插座应该放置的位置,住在里面的人就可以知道插入插头的位置,并自行决定安装什么小工具,而不用担心如何为其供电,可能存在哪些限制。
CSI就是由容器编排器—— Mosos、Kubernetes、Cloud Foundry和Docker领导的一个社区驱动的计划,它定义一个满足其管理的应用存储需求的接口。我们都希望拥有容器赋能的更智能、更强大的应用。
我认为CSI之所以重要有三个基本原因:
1:CSI提供KISS和社区方法
它并不像以往的整合存储的方式,在某些方面,它提供了更多的细节和功能。但是,早期的项目,如果不落实,就会变得焦点分散和难以完成。参与者会难以合作,因为有这么多的决定让人分心。
因此,CSI采用最简单的方法:认识到人们今天如何使用容器和存储,但要以接口规范和可插拔的形式来使用。简单——“保持简单,傻瓜式!”(KISS)的方法 ——使CSI首先关注基础。结果——我们希望CSI能够提供容器编排器和存储平台之间的更好的集成,这样我们可以迭代改进,并依靠它来构建更好的应用。
2:CSI为更多用例提供可预测的功能性接口
构建所有类型的接口都会面临的一种挑战是,开发人员和数据中心专业人员需要一个易于掌握的用户体验,同时支持使用它的应用的深度功能集。
例如,Docker为其卷驱动程序创建了一个规范,它还有一些改进的空间。当故障发生时,它的接口不能正常处理情况。如果一个组件出现故障,很难重新同步到正确的状态。
我不是针对Docker。我们有很多的接口被定义,但没有一个是完美的例子。
CSI团队正在尽力从不完善之处有所学习。我们希望扩展与存储相关的设计模式,与更多的应用程序一起工作。
例如,我们目前只引入具有文件系统的卷。当一个应用程序需要存储数据时,它必须抓取一个带有文件系统的卷。对于CSI,我们支持原始块设备 ——这是基本的,但目前尚不可用。用户可以定义没有文件系统的卷。这使得新应用能够运行于与逻辑块地址配对的容器。实际上,需要高性能或在主机间共享设备的应用可能更喜欢这样。
3. CSI由用户需求和社区驱动,而非存储公司
CSI自上而下的设计来自于容器编排工具和社区。为了简单起见,团队成员没有大跨步前进,而是采用“做一点,但做得非常好”的老派方法。对我来说,这可能是CSI最重要的一个方面。
所有从事CSI工作的人都试图使规范与使用它的人相关。这个团队并没有根据任何存储公司能够提供什么以及他们想要卖给你的东西来做出决定。
相反,CSI小组考虑的问题包括:“这个问题怎么解决?谁是解决问题的合适人选?什么是理想的解决方案?如何实施?“
CSI如何改变你的生活?
如果说技术人员会讨厌什么东西,那可能就是被迫选择一种工具。如果CSI取得成功,它将确保企业不会仅仅因为特定的存储支持或特定的云提供商而选择一家容器平台。这将提高所有平台的交互质量。这里的成功给大家带来了一个一次性的复杂任务,而一步巩固了存储的动态管理和可移植性的云原生模式。这将使每个人的工作变得更容易。