我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:百万心水论坛 > 段式存储系统 >

SmartX 分布式块存储 CSI 驱动正式加入到 K8s 官方驱动列表

归档日期:06-16       文本归类:段式存储系统      文章编辑:爱尚语录

  毋庸置疑,容器与容器编排已经成为目前 IT 人员最为关注的技术之一并得到快速的普及。根据 Gartner 的调查,截止到 2022 年,仅有 10% 的 CIO 对容器使用没有任何的计划,而 27% 的 CIO 已经计划将容器应用与生产环境。

  最初的容器主要应用于无状态应用,并不需要持久化的存储,但随着容器被原来越多的采用,以及其配合 Kubernetes 带来的强大的自动化管理能力,MongoDB、MySQL和 PostgreSQL 等有状态应用被越来多的运行于容器之上,对持久化存储提出更多需求和更高的要求。

  SmartX 分布式块存储(内部代号:SMTX ZBS)由 SmartX 自主开发,作为 SmartX 超融合的核心引擎,ZBS 已经被大量应用于金融、制造业、通信、地产等行业的私有云建设、虚拟化整合等场景,承载用户生产以及开发业务。其稳定性、易用性和丰富的存储特性已经经过长时间检验,并获得大量行业头部认可。

  日前,SMTX ZBS 的 CSI 驱动已正式加入到 K8s 官方的驱动列表,企业客户不仅可以继续使用 SMTX ZBS 构建私有云和超融合系统,亦可使用其为 K8s 提供持久化存储,支持数据库等有状态应用,进一步加速 K8s 在企业内部更多场景落地。

  在支持持久化存储方面,K8s 提供了内嵌原生 Driver 的方式连接外部的常见存储系统例如 NFS、iSCSI、CephFS、RBD 等来满足不同业务的需求。但由于存储生态本身也在不断演进,使用 K8s 内嵌的方式来支持不断变化的存储系统在成本和时效上都会对 K8s 项目自身带来巨大的挑战。

  所以和其他服务管理系统一样,K8s 逐渐的将存储系统的具体实现从主项目中分离出来,通过定义接口的方式允许第三方厂商自行接入存储服务。在这个道路上也经历了两个阶段:

  第三方存储服务提供商直接在 K8s Server 上部署符合 Flex Volume 规范的 Driver,利用 K8s 暴露出的 mount/unmount/attach/detach 等关键 API 实现存储系统的接入。这个模式主要的问题是,在这个形态下第三方厂商的 Driver 有权限接入物理节点的根文件系统,这会带来安全上的隐患。

  CSI 定义了容器场景所需要的存储控制原语和完整的控制流程,并且在 K8s 的 CSI 实现中,所有的第三方 Driver 和 K8s 的其他服务扩展一样,以服务容器的形态的运行,不会直接影响到 K8s 的核心系统稳定性。

  Raw Block Volume, 直接将 Volume 以 Block Device(磁盘)的形态暴露给 Container,对于某些可以直接操作磁盘的服务,这个形态可以省去文件系统的开销获得更好的性能。

  CSI 将一个实现了 CSI 服务的 Driver 称之为 Plugin。根据提供的功能不同将它分为两种类型:

  ·Controller Plugin,负责存储对象(Volume)的生命周期管理,在集群中仅需要有一个即可;

  ·Node Plugin,在必要时与使用 Volume 的容器所在的节点交互,提供诸如节点上的 Volume 挂载/卸载等动作支持,如有需要则在每个服务节点上均部署。

  存储服务商可以根据自身需求实现不同的的 Plugin 组合。例如对于以 NFS 形式提供的存储服务,可以仅实现 Controller Plugin 实现资源的创建和访问权限控制,每个节点均可以通过标准的 NFS 方式获得服务,无需通过 Node Plugin 来实现挂载/卸载等操作。而以 iSCSI 形式提供的存储服务,就需要 Node Plugin 在指定节点上,通过挂载 LUN,格式化,挂载文件系统等一系列动作完成 iSCSI LUN 至容器可见的目录形式的转化。

  9.CSI 要求状态转化操作是幂等的,并在原则上保证 Volume 的状态转化是有序进行的。

  Volume CRUD,包括了扩容和容量探测等 Volume 状态检查与操作接口

  CSI 使用 Sidecar 的方式实现 CSI Plugin 与 K8s 核心逻辑的解耦。Sidecar 代表监听了 CSI 指定 API 的标准容器,它与 CSI Plugin 共同组成一个 Pod 对外提供服务,它们之间通过 Socket 连接。在这个模式下,Sidecar 成为 CSI Plugin 与 K8s 之间连接的中介和隔离带。理想状态下二者可以在不直接交互和影响的情况下共同工作,解决了安全问题。

  在容器化发展的早期阶段,Container 多用于承担轻量型的无状态服务,对数据存储的需求大多通过本地的临时共享文件,或者用网络访问的方式将数据置于远端的日志收集或者 DB 等外部存储上。这种模式业务和数据之间从程序管理的角度看是松耦合的,互相独立,没有严格的依赖。

  但是另一方面,这个模式下数据本身无法成为服务的一部分,并不能通过 K8s 统一管理。并且需要为每个应用打开通往远端存储服务的网络通道,这在安全性上有时并不是一个好的选择。

  而基于持久化卷,将数据服务提供方也放入 K8s Pod 中(例如挂载持久化卷作为磁盘,上面部署容器运行 DB)作为完整应用的一部分,数据即可以做到与应用无缝的统一管理,所有应用内部 Pod 间的业务数据请求均可以在 K8s 提供的虚拟网络中进行。而基于 K8s 本身的高可用特性和 CSI Driver 的灵活配置能力也可以获得不逊色于外部存储的可靠性与性能。

  SMTX ZBS 通过 iSCSI 的方式为 K8s 提供持久化存储。它的内部结构如下图所示:

  在每个节点上部署有 Chunk Server 用于管理本地的SSDHDD提供统一的高性能混合存储服务,在部分节点上部署 Meta 作为元数据管理服务,将 Chunk Server 组成高可靠集群。每个 Chunk Server 提供如 iSCSI Target 这样的协议接入服务,他们在接入上是逻辑等价的,即可以从任一一个 Chunk Server 访问到集群中所有的 Target 和 LUN。

  在重定向之后,所有的数据请求仅在 initiator 与 Chunk 之间进行,无需经过 Redirectord。ZBS 集群中所有 Chunk Server 在处理 iSCSI 接入请求时是逻辑等价的,即任一 Chunk 均可以提供集群中的任一个 Target LUN 的数据访问服务。重定向的方式可以有效的分散数据接入压力,充分利用集群性能。

  SMTX ZBS 在设计之初就以高可靠、高可用、高性能为目标,在集群内部采用多副本,静默数据检查自动平衡和恢复等机制来保证数据的安全可靠。在这个基础之上,K8s CSI 模式获得比使用本地存储更高的安全性。

  如果是计算节点当前连接的 Chunk 异常,则与 Chunk 节点间的链路将中断,计算节点会重新向 iSCSI Redirector 服务寻求一个新的接入节点迅速恢复服务。通常情况下这个影响的时间为秒级。

  如果非当前连接的 Chunk 异常,可能会因为 IO 副本损失而产生短暂的延迟,iSCSI 链路本身不会受到影响,影响时间也为秒级。

  ZBS 在基本存储功能的基础上,还提供双活集群和异地备份的功能。借助这两个功能,K8s CSI Volume 可以获得同城跨数据中心的数据强一致安全性保证或者是自动的跨城市/数据中心的定期备份能力。

  目前 SMTX 对 CSI 支持两种形态的部署形式,基于 VM 的融合模式与分离模式,后续将提供 SMTX K8s 原生融合模式的部署支持。

  K8s 和 SMTX ZBS 分别是独立的物理集群,他们之间通过接入网络互相关联。接入网络需要独立于 K8s 中的业务网络和 ZBS 使用的存储网络。

  融合模式下,K8s 运行在 SMTX OS 提供的虚拟机上。通过接入网络接入 SMTX OS 上的 ZBS 服务。这个部署方式可以更高效的利用物理资源

本文链接:http://maps-enzymes.com/duanshicunchuxitong/566.html