【51CTO.com快译】NVMe协议简介
非易失性内存主机控制器接口规范(NVMe)是一种存储访问协议,允许CPU通过外围组件互连(PCIe)快速访问SSD存储器。通过一系列协议和技术,NVMe极大地加快了数据传输、存储和检索的速度。而使用NVMe,CPU直接访问SSD硬盘上的数据,实现了SSD硬盘的更高利用率和灵活的可扩展性。NVMe还允许存储分解,并且可以与Kubernetes结合使用以扩展应用程序。
本文将探讨NVMe如何重新定义Kubernetes中的存储编排。
NVMe分布式存储的优势
通过使用PCIe接口将CPU连接到SSD硬盘,NVMe移除了将计算连接到存储的层,从而实现了高效的存储抽象和分解。这为现代数据中心运行提供了各种好处,其中包括:
- 高效的内存传输。NVMe的每个CPU直接与SSD硬盘通信,降低了输入-输出控制器的内部锁定速度。NVMe还支持消息信号中断以防止CPU瓶颈,从而提高存储效率和可扩展性。NVMe通过将消息信号中断与CPU中的大量内核相结合来实现I/O并行性,从而减少网络延迟。
- NVMe提供大量队列并行性
与每个队列最多支持32个命令的SATA硬盘不同,NVMe使用私有队列,在超过64,000个队列的情况下,每个队列最多可提供64,000个命令。这是因为每个I/O控制器都有自己的一组队列,这会随着可用CPU内核的数量线性增加吞吐量。
- NVMe提供更高的安全性
NVMe over Fabri规范支持由可信计算组织(TCG)等信誉良好的安全社区制定的安全隧道协议。这意味着NVMe支持企业级安全功能,例如访问控制、静态数据加密、清除级擦除,以及加密擦除等。
- NVMe依赖于高效的命令集
该协议依赖于一个简单、精简的命令集,它将处理I/O请求所需的CPU指令数量减半。除了提供较低的延迟之外,该方案还支持电源管理和预留等高级功能,从而将优势扩展到输入和输出操作之外。
NVMe-oF
NVMe-oF是一种允许CPU通过网络结构连接到SSD存储设备的规范,旨在利用NVMe协议在存储区域网络(SAN)上的优势。主机可以使用基于MSI-X的命令将SSD存储设备作为目标,而网络可以使用各种网络协议来实现,其中包括光纤通道、以太网或Infiniband。
NVMe-oF在现代网络中越来越受欢迎,因为它允许组织为高度分布式、高度可用的应用程序实施横向扩展的存储。通过将NVMe协议扩展到SAN设备,NVMe-oF提高了CPU的使用效率,同时提高了服务器和存储应用程序之间的连接速度。
NVMe-oF支持各种数据传输机制,例如:
- RDMA
- 光纤通道
- TCP/IP
NVMe-oF将网络闪存存储与服务器连接起来,使应用程序能够在共享网络存储上运行,从而为数据中心提供额外的网络整合。采用SSD可以在应用程序工作负载之间动态共享,从而实现资源的高效消耗、灵活性和可扩展性。
Kubernetes编排和存储持久性
虽然容器的存储是暂时的,但Kubernetes通过提供引用物理存储设备的抽象来支持有状态的应用程序。容器化应用程序实际上与在其他容器上运行的其他进程和应用程序相隔离。这使得Kubernetes环境具有高度的灵活性和可扩展性,因为它允许应用程序在虚拟机、裸机系统、支持的云计算系统或各种部署的组合中运行。虽然这种方法有一些好处,但当需要在容器之间存储和共享数据时,也带来了一些挑战。
Kubernetes提供了各种抽象和选项来将容器POD连接到物理存储,例如:
- 卷
- 持久卷和持久卷声明
- 存储类
- 容器存储接口(CSI)和存储插件
使用直接附加存储(DAS)进行编排的挑战
虽然直接附加存储(DAS)提供了一种简单、高度可用且快速的存储,但仅靠DAS不足以运行Kubernetes集群。这是因为DAS设备的存储容量有限,无法动态配置以匹配有状态的Kubernetes工作负载。此外,DAS不包含网络功能或促进不同用户组的数据访问,因为存储只能由单个服务器/桌面机器直接访问,而Kubernetes在分布式集群上进行编排。
用于Kubernetes的NVMe
NVMe通过高速PCIe-oF接口将服务器连接到SSD硬盘,将DAS的低延迟扩展到网络附加存储设备。这使得NVMe成为在Kubernetes上运行的动态、可扩展和灵活的有状态应用程序提供存储的有效选择。容器存储接口(CSI)标准将这些池化的NVMe设备连接到运行有状态应用程序的Kubernetes集群。通过结合NVMe-oF提供的低延迟网络存储和CSI插件的灵活性,组织可以为Kubernetes应用程序提供高效、敏捷以及需求驱动的存储解决方案。
NVMe-oF持久卷
为了避免在单个本地服务器上运行NVMe SSD出现的瓶颈,一些组织正在努力为Kubernetes存储启用NVMe-oF插件。Kubernetes支持使用RESTAPI以允许存储供应商通过NVMe-oF协议。存储供应商然后创建标准卷API对象,这些对象可用于将一部分池化的NVMe SSD连接到POD。然后,Kubernetes POD和其他资源可以像任何持久卷对象一样在这个池化存储上读写数据。
MayaData创建的OpenEBS是一种流行的敏捷存储堆栈,适用于需要更小延迟的有状态Kubernetes应用程序。OpenEBS的软件基础设施和插件与NVMe-oF提供的快速、分解的物理存储完美集成。将NVMe SSD与OpenEBS插件集成可以为具有状态工作负载的松散耦合应用程序提供更简单的存储配置。
OpenEBS是Kubernetes为性能敏感数据库设计的一种流行的开源、灵活的存储堆栈。Mayastor是OpenEBS的最新存储引擎,与底层设备的性能能力相比,其开销非常低。虽然OpenEBS Mayastor不需要NVMe设备,也不需要工作负载通过NVMe访问数据。而通过低开销的OpenEBS Mayastor和最终的NVMe设备,从运行一个通过TCP支持NVMe的容器的工作负载进行端到端部署,将尽可能接近底层设备的理论最大性能,这是可以理解的。
OpenEBS Mayastor构建了一个基础层,使工作负载能够以声明式的Kubernetes原生方式根据需要合并和控制存储。在这样做时,用户可以专注于重要的事情,即部署和操作有状态的工作负载。
如果用户有兴趣试用Mayastor,可以寻找一些有关如何设置集群以及运行“fio”等基准测试的说明。
原文标题:The Benefits of Using NVMe for Kubernetes,作者:Sudip Sengupta
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】