当前位置:首页 > 公众号精选 > 架构师社区
[导读]本文根据蔡逸煌老师在〖Deeplus直播第214期〗线上分享演讲内容整理而成。 蔡逸煌 OPPO云平台高级后端工程师 主要从事云平台开发工作,擅长K8S、容器网络、存储等领域。 今天分享的主题是OPPO云存储的上云之路。 分布式存储介绍 存储相比于其他组件,更底层,


基于Kubernetes的云平台存储容器化实践


本文根据蔡逸煌老师在〖Deeplus直播第214期〗线上分享演讲内容整理而成。


基于Kubernetes的云平台存储容器化实践

蔡逸煌

OPPO云平台高级后端工程师


  • 主要从事云平台开发工作,擅长K8S、容器网络、存储等领域。


今天分享的主题是OPPO云存储的上云之路。


分布式存储介绍


存储相比于其他组件,更底层,所以有必要做一个简单的科普。


1、对象存储



主要是对整个文件进行操作,提供了对整个文件进行增删查改的能力。不支持对对象内容进行增量修改,如七牛的对象存储,AWS S3,阿里OSS,呈现给我们调用方式是http api。


2、分布式文件系统



文件存储实现了文件的POSIX接口,由于整个文件系统不依赖操作系统,常用于实现共享文件系统,常见的比如说ceph fs,gluster fs呈现给我们的使用方式是文件系统。


3、分布式块存储



提供裸块的能力交由物理机使用,协议是SCSI,iSCSI,文件系统层由操作系统提供。呈现给我们的使用方式是裸盘,不带任何文件系统,需要格式化后使用,或者使用块API。


云平台存储基本架构


目前块存储主要是三个组件,gateway、storage、 cluster manager。


  • gateway主要是解析iscsi协议,把块请求解析发送到storage进行处理;

  • storage则是对块的读写操作进行处理,管理磁盘数据

  • cluster manager为元数据中心,保存节点的状态,对整个集群的健康状态做仲裁


基于Kubernetes的云平台存储容器化实践


云原生存储


现在Kubernetes 的趋势愈演愈烈,Kubernetes 逐渐成为云原生时代的基础设施,为了给上云的程序提供服务,云原生也随之出现,目前世面上已经有OpenEBS Portworx 和Rook等产品。


云原生存储不仅要为上云的服务提供服务,自身也利用云的特性增强自身的功能,依赖Kubernetes的特性,我们可以轻运维,轻部署,利用容器隔离的能力,减少异常进程之前的相互影响,提高整体资源的利用率。


Kubernetes与CSI


Kubernetes作为未来云上的操作系统,把存储整个生命周期和管理抽象成三种资源。


1、StorageClass



抽象了管理存储相关的配置,主要是provisioner、parameters、reclaimPolicy这三个配置。


  • provisioner: 表示某一种存储资源 

  • parameters: 相当于自定义配置,自定义一些存储属性 

  • reclaimPolicy:设置volume释放后,pv的动作,Delete or Retain


通过声明不同stroageclass可以管理多种类型的存储比如说ceph,glusterfs等等。


2、PersistentVolume



表示一段已分配的存储,可以是文件系统,也可以是裸块,云存储的云盘或者文件系统映射到Kubernetes 就是一个PersistentVolume。


3、PersistentVolumeClaim



用户存储的请求,可以请求特定的容量大小和访问模式(例如,可以以读/写一次或指向多次模式挂载)。


抽象出PersistentVolumeClaim把存储和管理分离,通过PersistentVolumeClaim我们可以控制访问存储的权限,存储的容量和类型。


下图是Kubernetes使用存储的一个方式:


基于Kubernetes的云平台存储容器化实践


这里衍生下Kubernetes 的一些设计理念,Kubernetes 使用声明式的API,通过YAML声明请求,并保存到etcd,这样做的好处是把整个请求记录下来,对于问题的回溯也比较方便,不用自己去记录日志提炼请求。


另外Kubernetes 还提供了对于各种资源的watch Api,各种资源的crud都可以通过watch api实时的拿到对应的YAML,这样的设计的好处是让Kubernetes 拥有非常好的扩展性,通过实现controller 去watch各种资源的变化情况,定义该资源的crud行为。


4、Container Storage Interface



提供一个将任意块或者文件存储系统对接到给容器编排系统(COs)上的接口标准,如Kubernetes。


把存储从创建到销毁整个生命周期抽象成一组标准接口,Kubernetes通过对接CSI,实现对存储整个生命周期的管理。


下图就是CSI定义的存储卷的生命周期:


基于Kubernetes的云平台存储容器化实践


5、Kubernetes中对接CSI



上文说道Kubernetes 对存储的抽象是StorageClass,PersistentVolume ,PersistentVolumeClaim等资源CSI 则是提供一组标准接口。所以需要引入一层把Kubernetes 中的资源行为转为CSI接口的程序,Kubernetes 提供了多个sidecar屏蔽这个过程。


这里简单科普下sidecar,一般来说,引入sdk实现某些功能,在编译的时候把sdk代码编译进去,更新sdk要重新发布,和工程耦合的比较紧密,sidecar则是把sdk实现的功能通过在pod运行一个独立的容器实现,通过sidecar们提供rpc接口进行交互,可以作为被调用方,也可以是把服务包装起来增强服务功能,增加这样子的好处是解耦,让更新sidecar容器的版本更简单。


通过引入以下sidecar,我们可以只专注于实现CSI定义的接口。


  • external-attacher:辅助触发ControllerPublishVolume

  • external-provisioner:辅助触发Controller相关接口

  • node-driver-registar:辅助注册csi插件到kubelet 

  • external-resizer:辅助实现volume扩容 

  • external-snappshotter:辅助实现volume快照

  • livenessprobe:转换csi prob到k8s的liveness


6、Kubernetes和CSI的架构



从官网给的图我们就可以直白的看到粉红色框的sidecar们相当于一层胶水,把Kubernetes和csi链接起来


基于Kubernetes的云平台存储容器化实践


1)PV与调度


至此我们已经讲完了Kubernetes和CSI与K8S怎么交互的,接下来讲下PV与调度的关系。


在调度阶段,PV的affinity 会影响Pod的调度,所以有调度需求的可以通过PV的affinity控制。


基于Kubernetes的云平台存储容器化实践


2)NodeStatgeVolume与NodePublishVolume


之前查阅资料的时候发现这两个接口的说明讲的比较少。


NodeStatgeVolume的接口是把远端的云盘挂到物理机上面。NodePublishVolume的接口是把NodeStatgeVolume之后的盘挂进容器里面。Kubernetes 在NodeStatgeVolume阶段会给每个PV生成一个全局挂载点,如下图:



基于Kubernetes的云平台存储容器化实践


通过判断这个挂载点是否挂载可以方式PV重复挂载导致出错。接下来NodePublishVolume把NodeStatgeVolume的的挂载点挂载的自己Pod文件夹下,最终这个Pod的挂载点会被挂载进容器里面。


存储容器化


存储作为基础组件,直接和本地盘打交道,所以我们一个要解决的事情就是如果Kubernetes 管理本地盘。


kubernetes管理本地盘


通过官方提供的local-static-provisioner自动生成LocalPersistentVolume管理磁盘。


LocalPersistentVolume是Kubernetes提供的一种管理本地盘的资源。


基于Kubernetes的云平台存储容器化实践


1、使用Statefulset管理存储容器



通过statefulset 管理有状态的存储服务, 为每个pod分配一个单独的磁盘可以使用volumeClaimTemplates给每个pod生成唯一的pvc,具体规则${claimNmae}-${podName},事先准备好PVC 和 PV,通过Statefulset 我们就可以把我们的存储托管到云上了。另外借助daemonset,可以把我们gateway模块部署到每一个node上面。处理云存储的请求。


基于Kubernetes的云平台存储容器化实践


2、存储容器化的收益



1)降低运维成本


基于Kubernetes和statfulset获得了滚动更新,灰度更新,健康检查,快速扩容等功能,只需要一组yaml文件就可以快速搭建一个集群,相比于传统写ansible脚本部署的方式复杂度大大降低。


2)降低开发运维成本


由于Kubernetes把存储抽象成StorageClass PersistentVolume PersistentVolumeClaim。我们可以通过他们管理我们的存储资源,基于Kubernetes lable的过滤功能,可以实现简单的关系查询,通过PVC与PV管理存储资源,减少管理端的开发。定位问题也能通过POD信息快速定位到问题机器和问题云盘。而且接入Kubernetes生态上的prometheus后,监控告警也能快速开发。


3)隔离性增强


docker限制cpu memory使用,减少进程之间资源互相干扰,进一步提升资源利用率。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

基于Kubernetes的云平台存储容器化实践

长按订阅更多精彩▼

基于Kubernetes的云平台存储容器化实践

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭