跨异构存储后端的云原生容器存储接口插件及部署方法与流程

xiaoxiao2026-07-17  24


本发明涉及云原生容器,更为具体的,涉及一种跨异构存储后端的云原生容器存储接口插件及部署方法。


背景技术:

1、计算虚拟化时代,以docker为代表的容器引擎利用rootfs机制和linux mountnamespace机制将容器与宿主机的文件系统相互隔离,当容器想要调用存储资源时,可以通过绑定挂载机制在容器所声明的数据卷与宿主机文件系统指定目录之间形成映射关系,从而访问宿主机的存储资源。然而随着容器技术的发展,存储资源不再只是数据卷与宿主机本地目录之间的映射关系,更是被视为一种可以被容器引擎管理的重要资源,例如docker在后期迭代版本中所提出的volume mount概念。

2、进入云原生时代,kubernetes作为当下最热门的容器编排系统,在持久化存储能力方面,对存储资源进行了深入地抽象,向用户隐藏了数据存储的具体实施细节。用户仅需要以yaml文件的形式来描述数据存储需求,并由kubernetes根据用户的意图完成具体数据卷的生命周期管理,如分配、附加、挂载、回收等。更进一步地,为了避免描述数据存储需求的复杂性,降低集群存储资源的使用门槛,kubernetes抽象出pv、pvc、storageclass等api对象,以实现存储数据卷的动态供给(dynamic provisioning)和集群用户与运维人员的权责分离。

3、为了更加方便地集成各云存储厂商所提供的远程存储服务,实现不同存储介质下的持久化存储能力,同时基于将存储管理逻辑与核心调度逻辑充分解耦的思想,kubernetes定义了容器存储接口(csi,container storage interface)规范。第三方云存储厂商仅需要将实现csi规范的插件和其它kubernetes官方实现的边车(sidecar)容器一同部署,就可以把自己的存储服务集成到kubernetes中,并将相应的存储资源以工作数据卷的形式提供给kubernetes集群内部署的应用pod。

4、然而,目前主流的csi插件在设计目标上均以对接特定存储后端或存储协议为目的,导致各类存储后端都有专用的csi插件,缺乏更高纬度的统一抽象。比如csi-driver-nfs项目仅对接nfs服务端提供的共享文件系统;csi-driver-nvmf项目仅对接nvme-of目标端提供的远程nvme磁盘。但是,在kubernetes集群的实际部署环境中,各节点宿主机能提供的存储资源(包括底层存储硬件、宿主机本地文件系统、分布式存储协议等)往往是异构的,这将造成在部署kubernetes集群时,为了适配不同的存储后端,通常需要同时部署多套专用的csi插件。该工作模式主要存在以下三个缺点:

5、(1)采用多套专用csi插件对集群内的异构存储资源进行支持,需要分别管理和维护它们各自对应的pv、pvc、storageclass等与存储管理相关的对象,以及serviceaccount、rbac等与权限控制相关的对象,这不仅会导致用户使用集群存储资源具有较高门槛,还会导致集群部署及运维成本的增加。

6、(2)kubernetes官方的边车容器中存在部分与控制节点进行交互的公共逻辑,因此面向各存储后端的专用csi插件需要和边车容器部署在同一个pod内才能正常工作。然而,因为不同的csi插件所使用的边车容器之间没有任何的差异,所以集群内部署多套专用csi插件意味着重复部署多套相同的边车容器实例,这会造成集群内计算资源的利用率降低。

7、(3)虽然面向不同存储协议的专用csi插件在调用存储服务端的具体实现细节上存在较大差异,但这些csi插件中仍然存在很大的一部分与具体存储后端无关的公共逻辑,比如数据卷用量等统计信息采集、存储服务端心跳检测、数据卷挂载、数据卷解除挂载等功能,这些公共逻辑代码同样需要在多套专用csi插件的源码中重复实现,导致代码复用性和可维护性降低。


技术实现思路

1、本发明的目的在于克服现有技术的不足,提供一种跨异构存储后端的云原生容器存储接口插件及部署方法,实现了单个csi插件就能够对接多种存储协议的目标,克服了当前csi插件和存储后端之间必须一一对应的限制,解决了当前专用csi插件部署过程复杂、运维成本偏高,以及集群计算资源利用率较低的问题。

2、本发明的目的是通过以下方案实现的:

3、一种跨异构存储后端的云原生容器存储接口插件,包括:

4、通用组件,用于实现与存储协议不相关的公共逻辑;

5、任务分发组件,用于完成从csi请求上下文中识别存储协议类型并调用相应存储管理组件;

6、抽象层组件,用于定义数据卷全生命周期管理抽象方法;

7、存储管理组件,用于对接存储后端并实现抽象层方法。

8、进一步地,所述通用组件,具体还用于:实现csi.controllerserver接口及csi.nodeserver接口,csi.controllerserver表示控制器服务,csi.nodeserver表示节点服务。

9、进一步地,所述与存储协议不相关的公共逻辑包括参数解析及校验、数据卷指标采集。

10、进一步地,所述从csi请求上下文中识别存储协议类型并调用相应存储管理组件,具体包括:在csi请求中的存储协议类型不明确时,利用通用组件配合解析出存储协议类型,并将其传递给任务分发组件;再根据解析获得的存储协议类型调用相应存储管理组件;在csi请求中的存储协议类型明确时,csi插件直接将请求传递给任务分发组件。

11、进一步地,所述定义数据卷全生命周期管理抽象方法,具体包括:将下层的存储资源与上层的任务分发组件相关联,用于屏蔽具体存储协议下数据卷管理的详细实现细节。

12、进一步地,所述对接存储后端并实现抽象层方法,具体包括:将存储管理组件和异构存储后端一一对应,实现调用具体存储服务端的细节,配合抽象层组件完成异构存储后端的统一管理。

13、进一步地,所述存储管理组件在csi插件启动过程中通过钩子函数注册到任务分发组件中,当任务分发组件接收到csi请求后,通过解析csi请求获得指定的存储协议类型,或者通过数据卷id生成规则反向解析出存储协议类型,然后根据存储协议类型将任务分发给对应的存储管理组件。

14、一种跨异构存储后端的云原生容器存储接口插件的部署方法,包括以下步骤:

15、第一步:将如上任一项所述的跨异构存储后端的云原生容器存储接口插件的容器和kubernetes提供的external-provisioner、external-attacher、livenessprobe容器作为控制器服务,以deployment形式部署到集群中任意一个工作节点,其中,external-provisioner表示外部存储供给器、external-attacher表示外部存储附加器、livenessprobe表示服务探活器,deployment表示部署集;

16、第二步:将插件容器和kubernetes提供的node-driver-registrar、livenessprobe容器作为节点服务,以daemonset形式部署到集群中所有的工作节点,其中,daemonset表示守护服务集;

17、第三步:创建storageclass对象来保存可用的第三方云存储服务端信息,所述第三方云存储服务端信息包括存储协议类型、ip、端口、数据卷相关细节信息,storageclass表示存储类;

18、第四步:创建与storageclass对象相关联的pvc对象,storageclass表示存储类;

19、第五步:声明和部署与实际业务相关的容器,在容器声明过程中将pvc对象作为工作数据卷,挂载到应用容器内的某个指定路径,pvc表示持久化数据卷声明。

20、一种跨异构存储后端的云原生容器存储接口插件的部署方法,包括以下步骤:

21、第一步:如上任一项所述的跨异构存储后端的云原生容器存储接口插件在启动过程中,各存储管理组件通过钩子函数将其实现的存储协议注册到任务分发组件中;

22、第二步:当插件接收到应用容器发出的csi相关请求时,判断该请求上下文中是否携带了明确的存储协议类型参数;

23、第三步:如果csi请求中仅含有数据卷id作为调用参数,不包含明确的存储协议类型参数,例如csi.nodeunpublishvolume方法,则通用组件根据数据卷id反向解析出存储协议类型,并将其传递给任务分发组件;如果csi请求中已经含有明确的存储协议类型参数,例如csi.createvolume方法,则csi插件直接将该请求传递给任务分发组件;

24、第四步:任务分发组件凭借获得的存储协议类型将下发任务至对应的存储管理组件,由存储管理组件和第三方云存储服务端进行通信,完成请求所涉及存储资源的管理工作,并将存储协议类型作为数据卷id的组成部分返回给调用方,所述涉及存储资源的管理工作包含数据卷id生成、数据卷对应的存储服务端资源的分配和回收。

25、进一步地,在第四步中,在数据卷挂载场景下,所述存储管理组件还执行如下子步骤:将数据卷与第三方云存储服务端的详细映射关系以文件的形式保存在数据卷挂载目录的父目录中,当后续收到对该数据卷的解除挂载请求时,将从该文件获取映射关系。

26、进一步地,在第四步中,在部分支持设置上下文信息的csi请求响应结构体中,所述存储管理组件还执行如下子步骤:将对应请求携带的云存储服务端信息作为上下文信息返回给请求方,供请求方维护数据卷上下文,并在后续调用中携带此上下文信息,所述云存储服务端信息包括ip、端口、服务端存储资源映射信息。

27、本发明的有益效果包括:

28、(1)本发明对kubernetes中csi插件的功能进行了更高维度的抽象,通过一个csi插件实现kubernetes集群与多种异构第三方云存储服务之间的交互,使得kubernetes集群可以更加方便地调用多种差异化存储后端,将现有的专用csi插件和第三方云存储协议之间一对一关系转变为一对多关系,降低了kubernetes集群管理相关存储资源的成本和复杂性。

29、(2)本发明采用策略模式,将存储协议的特异性细节实现为具体的存储策略封装到csi插件的存储管理组件中,任务分发组件根据存储协议类型调用对应的存储管理组件,代码符合开闭原则,当采用的存储协议不包含在当前的存储管理组件中时,用户只需要实现新协议对应的存储管理组件,就能够支持该新的存储协议,修改引入的风险不会影响到已存在的存储管理组件,迭代开发带来的回归验证成本较低,软件可维护性高。

30、(3)本发明将csi插件数据卷挂载场景的抽象粒度由存储协议级别提升至块存储/文件存储级别,从而减少了现有csi插件工作模式中样板代码的重复实现,提升了代码复用性。

31、(4)本发明对kubernetes集群的容器数据卷全生命周期管理能力提供了统一的入口,从而简化了kubernetes集群存储相关的指标监控、日志采集、状态管理等工作,大幅减少kubernetes集群存储管理相关运维成本。


技术特征:

1.一种跨异构存储后端的云原生容器存储接口插件,其特征在于,包括:

2.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,所述通用组件,具体还用于:实现csi.controllerserver接口及csi.nodeserver接口,csi.controllerserver表示控制器服务,csi.nodeserver表示节点服务。

3.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,所述与存储协议不相关的公共逻辑包括参数解析及校验、数据卷指标采集。

4.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,所述从容器存储接口csi请求上下文中识别存储协议类型并调用相应存储管理组件,具体包括:在csi请求中的存储协议类型不明确时,利用通用组件配合解析出存储协议类型,并将其传递给任务分发组件;再根据解析获得的存储协议类型调用相应存储管理组件;在csi请求中的存储协议类型明确时,csi插件直接将请求传递给任务分发组件。

5.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,所述定义数据卷全生命周期管理抽象方法,具体包括:将下层的存储资源与上层的任务分发组件相关联,用于屏蔽具体存储协议下数据卷管理的详细实现细节。

6.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,所述对接存储后端并实现抽象层方法,具体包括:将存储管理组件和异构存储后端一一对应,实现调用具体存储服务端的细节,配合抽象层组件完成异构存储后端的统一管理。

7.根据权利要求1所述的跨异构存储后端的云原生容器存储接口插件,其特征在于,存储管理组件还用于在csi插件启动过程中通过钩子函数注册到任务分发组件中,当任务分发组件接收到csi请求后,通过解析csi请求获得指定的存储协议类型,或者通过数据卷id生成规则反向解析出存储协议类型,然后根据存储协议类型将任务分发给对应的存储管理组件。

8.一种跨异构存储后端的云原生容器存储接口插件的部署方法,其特征在于,包括以下步骤:

9.一种跨异构存储后端的云原生容器存储接口插件的部署方法,其特征在于,包括以下步骤:

10.根据权利要求9所述的跨异构存储后端的云原生容器存储接口插件的部署方法,其特征在于,在第四步中,在数据卷挂载场景下,所述存储管理组件还执行如下子步骤:将数据卷与第三方云存储服务端的详细映射关系以文件的形式保存在数据卷挂载目录的父目录中,当后续收到对该数据卷的解除挂载请求时,将从该文件获取映射关系。

11.根据权利要求9所述的跨异构存储后端的云原生容器存储接口插件的部署方法,其特征在于,在第四步中,在部分支持设置上下文信息的csi请求响应结构体中,所述存储管理组件还执行如下子步骤:将对应请求携带的云存储服务端信息作为上下文信息返回给请求方,供请求方维护数据卷上下文,并在后续调用中携带此上下文信息,所述云存储服务端信息包括ip、端口、服务端存储资源映射信息。


技术总结
本发明公开了一种跨异构存储后端的云原生容器存储接口插件及部署方法,属于云原生容器技术领域,包括:通用组件,用于实现与存储协议不相关的公共逻辑;任务分发组件,用于完成从CSI请求上下文中识别存储协议类型并调用相应存储管理组件;抽象层组件,用于定义数据卷全生命周期管理抽象方法;存储管理组件,用于对接存储后端并实现抽象层方法。本发明实现了单个CSI插件就能够对接多种存储协议的目标,克服了当前CSI插件和存储后端之间必须一一对应的限制,解决了当前专用CSI插件部署过程复杂、运维成本偏高,以及集群计算资源利用率较低的问题。

技术研发人员:冯一
受保护的技术使用者:中国电子科技集团公司第十研究所
技术研发日:
技术公布日:2024/9/23
转载请注明原文地址:https://www.famiwei.com/read-9024781.html

最新回复(0)