作者:王维、胡宗棠 2022-09-07 21:43:34
云计算 本文介绍了基于“CSI + LVM”云原生容器存储技术及RocketMQ消息队列在容器存储上的设计与实践,其中实现了基于“CSI +LVM”的容器存储,支持本地卷的动态创建、动态扩缩容、磁盘IO速率限制、拓扑支持等基本功能,同时为移动云云原生消息中间件提供了一种采用本地卷作为容器存储方式。
我们拥有十余年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供网站设计、网站制作、微信开发、小程序定制开发、手机网站制作、成都h5网站建设、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。
作者|王维,中国移动云能力中心IaaS产品部rpc产品组研发工程师,主要负责消息队列云原生方向的设计与研发工作
胡宗棠,中国移动云能力中心laaS产品部消息队列&rpc团队的负责人,主要负责消息队列、rpc、配置管理等云原生中间件的架构设计与技术研发工作
移动云RocketMQ消息队列产品线,基于kubernetes组件和自定义Operator,在完成全面云原生化后,增加诸多云原生特性,比如一键化部署集群、极致弹性扩缩容和业务无感知热升级/热迁移等。同时,云原生化升级也导致RocketMQ面临多项挑战:
基于上述问题,RocketMQ研发团队在移动云RocketMQ云原生消息队列2.0的架构设计中,基于“CSI + LVM”云原生容器存储技术,结合自研的Operator组件,在RocketMQ消息队列具备极致弹性扩缩等云原生特性的同时,能够承载万亿级数据洪峰,为移动云上客户的业务系统提供低延迟、高并发、高可靠的分布式消息队列云服务。
CSI[1](Container Storage Interface )即容器存储接口,是Kubernetes 目前主推的存储扩展方式。该方式为容器编排系统定义了标准的接口,使得开发者可以更灵活方便的将第三方存储系统与容器工作负载集成。
开发者通过实现CSI 规定的RPC接口(CSI Identity、CSI Controller、CSI Node),即下图中Custom Components部分,协同社区提供的辅助Sidecar容器(External Components),与Kubernetes 核心组件进行交互,从而实现对自定义容器存储的管理。
(图片出处 [2])
External Components 是一系列由社区Storage sig小组维护的辅助容器,主要包括如下:
External-provisioner
用于实现持久卷(PersistentVolume)的创建、删除等功能
External-attacher
用于实现持久卷的附着、分离功能
External-snapshotter
用于实现持久卷快照、备份恢复功能
External-resizer
用于实现持久卷的扩容缩容功能
Node-driver-registrar
使用kubelet插件机制向所在节点的kubelet注册用户开发的CSI 驱动信息
Livenessprobe
用于辅助用户CSI插件实现健康检查功能
这些不同功能的Sidecar容器,由开发者根据自己实际需要选择使用。更详细的使用可以查看官方文档[3]
Custom Components 需要开发者自己实现,由三组RPC接口集合组成,来实现对存储卷整个生命周期的管理。
Identity Service负责对外暴露插件信息,开发者实现的存储插件必须实现该操作集,其中GetPluginCapabilities 根据用户实际实现的RPC操作返回对应的集合。
Controller Service包含一些卷的创建,删除、快照等操作。同样的,用户可以根据实际需要的功能选择性实现接口。实现Controller Service的插件可以根据自身实际需要选择不同的部署方式,通常会使用Deployment 部署单个或少量节点。
Node Service包含一些节点管理的接口。其负责需要和宿主机打交道的操作,例如挂载卸载存储卷等操作,通常会以DaemonSet的方式部署。
LVM (Logical Volume Manager)即逻辑卷管理器,通过将多个物理分区/硬盘从逻辑上组合成一个更大的虚拟硬盘,从而实现对硬盘容量的弹性管理。
(图片出处 [4])
以下是LVM中的几个概念
PV 物理卷(Physical Volume)
通常对应一个普通分区或硬盘;
VG 卷组(Volume Group)
由若干个物理卷组成,卷组可以动态添加或者移除物理卷;
PE 物理扩展块(Physical Extend)
PE是LVM的最小存储单位,类似文件系统block;
LV 逻辑卷(Logical Volume)
从卷组中分割出部分空间,形成逻辑卷。用户格式化后挂载文件系统使用;
如下以一个实际使用例子列举部分命令
序号 |
LVM存储操作命令 |
说明 |
1 |
pvcreate /dev/sdb /dev/sdc |
创建物理卷 |
2 |
vgcreate vg1 /dev/sdb /dev/sdc |
创建卷组 |
3 |
lvcreate -L 2G -n lv1 vg1 |
创建逻辑卷 |
4 |
mkfs -t xfs /dev/vg1/lv1 |
格式化逻辑卷 |
5 |
mount /mount/test /dev/vg1/lv1 |
挂载使用卷 |
6 |
lvextend -L +2G /dev/vg1/lv1 |
逻辑卷扩容 |
借助LVM,用户可以根据实际业务需求申请逻辑卷,之后同样也可以按需进行扩/缩容,从而可以实现用户对磁盘空间的按需申请、扩容缩容等需求。
通过实现CSI规范,同时借助LVM的能力,即可利用宿主机本地磁盘构建出一个简单的容器存储驱动,实现动态创建卷、对卷的扩缩容等功能。此外,为解决Broker Pod漂移带来的问题,我们在创建PV时添加亲和性,使其绑定原来的Node,由于RocketMQ消息队列集群本身就是采用分布式高可用架构。所以,在某些场景中,屏蔽一定的Pod漂移能力,并不会给RocketMQ消息队列的高可用带来什么影响。
上图展示了移动云消息队列存储部分的架构,其中蓝色部分是由我们实现的CSI插件部分
RocketMQ Operator
遵循Kubernetes 的资源和控制器理念,通过拓展RocketMQ相关资源(CRD),以实现对RocketMQ集群生命周期的管理。
LVolume
用于整个流程管理存储的自定义资源对象(CRD)。
CSI-Controller-Plugin
主要实现了CreateVolume、DeleteVolume、ControllerExpandVolume接口,负责LVolume的创建等。
CSI-Node-Plugin
主要实现了NodePublishVolume、NodeUnpublishVolume、NodeExpandVolume操作,内部通过调用LVM命令管理LV(逻辑卷)、PV(物理卷)、VG(卷组)资源,通过使用Cgroup 限制卷读写速率。
下面介绍下主要创建流程:
本文介绍了基于“CSI + LVM”云原生容器存储技术及RocketMQ消息队列在容器存储上的设计与实践,其中实现了基于“CSI +LVM”的容器存储,支持本地卷的动态创建、动态扩缩容、磁盘IO速率限制、拓扑支持等基本功能,同时为移动云云原生消息中间件提供了一种采用本地卷作为容器存储方式。
1.CSI规范https://github.com/container-storage-interface/spec
2.CSI图片出处https://kingjcy.github.io/post/cloud/paas/base/kubernetes/k8s-store-csi/
3.CS文档https://kubernetes-csi.github.io/docs/introduction.html
4.LVM图片出处https://www.cnblogs.com/fzhelpdesk/p/16189915.html
网页题目:移动云RocketMQ云原生消息队列2.0的弹性存储层的设计与实践
标题来源:http://www.mswzjz.cn/qtweb/news27/46677.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能