【51CTO.com快译】硬件抽象涉及编程层的创建,该层允许计算机操作系统在通用级别而不是特定级别与硬件设备进行交互。该层涉及将硬件用于任何软件程序的逻辑代码实现。而存储设备的抽象为用户访问共享存储提供了统一的接口,从而对操作系统隐藏了硬件的实现。这允许在用户机器上运行的软件从存储设备获得尽可能高的性能。它还允许采用独立于设备的程序,因为存储硬件抽象使设备驱动程序能够直接访问每个存储设备。

Kubernetes本质上与基础设施无关,因为它依赖于插件和卷抽象来将存储硬件与应用程序和服务进行分离。另一方面,容器是短暂的,当它们终止时会立即丢失数据。Kubernetes使用卷和持久卷将容器化应用程序创建和处理的数据保存在物理存储设备上。这些抽象通过各种类型的硬件抽象层(HAL)实现连接到存储硬件。Kubernetes集群的两种常用硬件抽象层(HAL)的存储实现是容器附加存储(CAS)和软件定义存储(SDS)。

本文深入探讨了容器附加存储(CAS)和软件定义存储(SDS)的根本区别、各自的优势以及典型硬件抽象层(HAL)存储实现的典型用例。

容器附加存储vs.软件定义存储

Kubernetes采用抽象存储来实现可迁移、高可用和分布式存储。Kubernetes API支持通过CSI接口连接的各种容器附加存储和软件定义存储的解决方案。以下了解一下抽象模型的功能以及每个模型在Kubernetes集群中解决存储的目的。

1.容器附加存储

容器附加存储引入了一种为Kubernetes集群中的有状态工作负载以持久保存数据的新方法。使用容器附加存储,存储控制器作为Kubernetes集群的一部分在容器中进行管理和运行。这保证了存储的可迁移性,因此这些控制器可以在任何Kubernetes平台上运行,无论是在个人电脑、内部部署数据中心还是公共云上。由于容器附加存储利用微服务架构,存储解决方案与绑定到物理存储设备的应用程序保持密切关联,从而减少了I/O时间。

(1)容器附加存储的架构

容器附加存储利用Kubernetes环境来实现集群数据的持久性,使得存储解决方案在容器中运行存储目标。这些目标是可以复制以进行独立扩展和管理的微服务。为了增强自主性和敏捷性,这些基于微服务的存储目标可以使用像Kubernetes这样的平台进行编排。

容器附加存储集群使用控制平台层进行存储管理,而数据平台层可以运行存储目标/工作负载。控制平台中的存储控制器提供卷、启动存储目标副本,并执行其他管理相关任务。数据平台组件执行来自控制平台元素的存储策略和指令。这些指令通常包括文件路径、存储和访问方法。数据平面还包含存储引擎,负责实现文件存储的实际输入输出路径。


(2)容器附加存储的好处

容器附加存储为有状态的容器化应用程序提供灵活的存储。这是因为它遵循基于微服务的模式,允许无缝升级存储控制器和目标副本。存储软件的容器化意味着管理团队可以为每个卷动态分配和更新存储策略。对于容器附加存储,其低级存储资源使用Kubernetes自定义资源定义表示。这允许存储和云原生工具之间的无缝集成,从而实现更轻松的管理和监控。容器附加存储还确保存储与供应商无关,因为有状态的工作负载可以从一个Kubernetes部署环境移动到另一个环境,而不会中断服务。

(3)容器附加存储的用例

容器附加存储使用存储目标复制来保证高可用性,避免传统分布式存储架构的一些限制。这使得容器附加存储成为云原生应用程序的首选存储选择。容器附加存储也适用于希望在多个云平台中协调存储的组织。这是因为容器附加存储可以部署在任何Kubernetes平台上。

容器附加存储支持简单的存储备份和复制,非常适合需要横向扩展存储的应用程序。它也非常适合希望改善持续集成(CI)和持续交付(CD)管道的读写时间的开发团队。

Kubernetes的主要容器附加存储解决方案提供商包括:

  • OpenEBS

  • StorageOS

  • Portworx

  • Longhorn

2.软件定义存储

软件定义存储架构依靠数据程序将运行的应用程序与存储硬件解耦。这通过将存储设备抽象为虚拟分区来简化存储设备的管理,然后在承载命令和控制功能的数据管理接口(DMI)上启用管理。

(1)软件定义存储的特点

采用软件定义存储,数据/服务管理界面托管在主服务器上,主服务器控制由共享存储池组成的存储层。这使得存储的配置和分配变得简单而灵活。以下是软件定义存储的一些主要功能:

  • 设备抽象。无论底层硬件如何,数据I/O服务都应该统一交付给用户。通过软件定义存储,存储抽象结构(例如存储库、文件共享、卷和逻辑单元号)用于在数据存储的物理硬件和逻辑方面之间创建明确的界限。

  • 自动化。软件定义存储解决方案实施的工作流程和算法可以减少管理员执行的工作量。为了实现高效的自动化,软件定义存储系统适应不同的性能和数据需求,几乎不需要人工干预。

  • 分解的池化存储。物理存储设备是共享工具的一部分,软件可以从中为服务和应用程序开辟存储空间。这允许软件定义存储在需要时有效地使用可用存储,从而实现资源的最佳使用。

(2)软件定义存储的好处

使用软件定义存储的一些好处包括:

  • 增强的可扩展性。解耦硬件资源允许管理员根据工作负载动态分配物理存储。软件定义存储支持的池化、分解存储允许物理卷的垂直和水平扩展,支持更大的容量和更高的性能。

  • 改进的I/O性能。软件定义存储支持输入-输出并行性,以跨多个CPU动态处理主机请求。软件定义存储还支持高达8TB的大缓存内存,同时支持自动数据分层。这允许更快的输入-输出操作以实现更快的数据处理。

  • 互操作性。软件定义存储使用数据管理接口作为转换器,允许在不同平台上运行的存储解决方案相互交互。它还将物理隔离的存储硬件分组到逻辑池中,允许组织托管来自不同供应商的共享存储。

  • 降低成本。软件定义存储解决方案通常在现有商品硬件上运行,同时优化存储消耗。软件定义存储还支持自动化,从而减少管理存储基础设施所需的管理员数量。这些因素导致管理工作负载的前期和运营费用降低。

(3)何时使用软件定义存储

软件定义存储为希望以更低的成本提高存储灵活性的团队提供了多种好处。软件定义存储的一些常见用例包括:

  • 数据中心基础设施现代化。

  • 为移动和具有挑战性的环境创建强大的系统。

  • 创建要在同一平台上管理的混合云实施。

  • 利用现有的远程和分支机构基础设施。

容器附加存储与软件定义存储的比较

(1)相同之处

容器附加存储和软件定义存储都支持物理存储硬件和正在运行的应用程序之间的解耦。在这样做的同时,这两种技术都从数据存储资源中抽象了数据管理。这两个硬件抽象层(HAL)实现共享一些共同的功能,其中包括:

  • 供应商不可知。容器附加存储和软件定义存储架构都允许在单台主机上运行多个工作负载。这允许管理员利用存储设备和访问软件之间的分离。因此,无论是谁开发或管理工具,组织都可以选择容器附加存储和软件定义存储来实施可在任何平台上运行的存储解决方案。

  • 允许动态存储分配。选择容器附加存储和软件定义存储允许动态连接和分离存储工具,从而为高可用性应用程序自动提供数据备份和副本。选择容器附加存储和软件定义存储都允许自动部署存储基础设施,从而实现存储技术的多样性和异构性。

  • 允许有效的基础设施扩展。选择容器附加存储和软件定义存储允许横向和纵向基础设施扩展以自动化数据工作流。这两种硬件抽象层(HAL)方法支持创建可组合的分解基础设施,从而增强多功能分布式环境的创建。

(2)不同之处

软件定义存储支持分布式存储管理并减少硬件依赖性,而容器附加存储允许使用任何容器编排平台运行的分解存储。这就带来了软件定义存储和容器附加存储之间的各种差异,包括:

  • 软件定义存储依赖于传统共享软件,在扩展方面具有一些限制,而容器附加存储允许存储软件的复制,允许独立管理和扩展。

  • 容器附加存储允许扩展/横向扩展存储和卷性能,而软件定义存储允许扩展存储节点以提高存储容量。

  • 软件定义存储支持超融合基础设施,而容器附加存储支持高度分解的存储基础设施。

容器附加存储和软件定义存储都允许集群管理员利用硬件抽象的优势为Kubernetes中的有状态应用程序持久化存储数据。容器附加存储允许使用Kubernetes进行基于微服务的存储编排,从而实现对存储控制器的灵活管理。另一方面,软件定义存储允许使用可编程数据控制平面抽象存储硬件。

容器附加存储具有典型软件定义存储提供的所有功能,尽管是为容器工作负载量身定制的,并使用最新的软件和硬件原语构建。

原文标题:Container Attached Storage (CAS) vs. Software-Defined Storage - Which One to Choose?,作者:Sudip Sengupta

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】