大家好,今天由我为大家介绍一下我们对于k8s与ceph集成的预研成果。对于k8s与ceph,我们也了解有限,有些理解不对的地方,还请大家指正。
今天将基于以上6点内容来分享。如果大家有任何问题,也欢迎在微课堂之后在群中直接提出,大家共同探讨。
总结了一下,产生存储痛点的原因大致有以下几个:
•默认情况下,容器产生的数据只存于内存中,容器一销毁,数据也随之丢失
•Docker可通过-v参数,将一个本地目录挂载至容器,但存在不能跨越主机的问题,无法在集群中应用•Docker还可以通过各种存储插件支持将各种类型的存储做为后端存储,但也存在无法跨主机集群应用的问题
•Docker+k8s一起的时候,存储的问题更突显。
k8s的Pod是不稳定的,随时可能会因为重新调度而在某台机器上销毁,而在另一台机器上新建,持久化存储必须跟得上这种调度,随时准备随容器一起进行迁移。
Torus是一种针对容器集群量身打造的存储系统,可以为通过Kubernetes编排和管理的容器集群提供可靠可扩展的存储。
这是继etcd、rkt、flannel,以及CoreOSLinux之后CoreOS发布的另一个开源产品。
Torus的产品特性:
1.扩展性:与etcd类似,Torus也是一种构建块,可以实现包括分布式块设备( Distributedblock device)或大型对象存储在内不同类型的存储。Torus使用Go语言编写并使用gRPC协议,用户可以方便地用任何语言创建Torus客户端。
2.易用性:专门针对集群和Kubernetes等集群流程平台(Clusterorchestrationplatform)设计的Torus可用简单的方法部署和运维,并可随时缩放。
3.准确性:Torus使用etcd分布式键值数据库存储并检索文件或对象元数据。etc d为必须快速可靠执行的分布式系统核心运作提供了一个坚实、经得起考验的基础。
4.缩放性:Torus目前可缩放至数百个节点,并可将多个共用磁盘以单一存储池 的方式使用。
虽然Torus的特性看起来很美,可以毕竟它还太年轻,成熟稳定需要一定的时间。目前我们只是保持持续的关注。
第二种则是Flocker,目前也是很火热的个项目。Flocker提供了开源容器数据卷管理系统。它提供了数据迁移的工具,从而解决了有状态服务的容器化难题。尤其适用于数据库这样的容器。通常,容器的数据卷与单个server绑定,Flocker数据卷,则可以随容器迁移而迁移。Flocker为实现有状态的微服务提供了便利。上图是它的架构示意图,它要求每个节点上都必须要安装它的flockerplugin, 然后由flockercontrol进行统一调度,最终实现数据与容器同步迁移。
如上图所示,展示了存储随容器迁移的过程:
1.当容器发生迁移时,flocker可以保证容器所挂载的数据卷也会跟着同步迁移。
2.迁移要求各个主机上都需要安装flockerplugin
3.原理其实是在其它主机上将容器启动的时候,将数据卷重新挂载其上。因此,单个容器迁移时,服务存在一定的中断,但这个过程一般很短。
flocker其实是我们比较心仪的方式。但是因为系统的限制,目前没有办法安装。我们同样对它保持着高度的关注。
最后介绍的这第三种方案,则是比较常规的方案,基于k8s本身的能力以及第三方的插件来实现,当然还必须后端有对应的存储进行支持。k8s的pv可以向容器提供持久存储。它需要先于Pod创建,然后在pod创建的时候,绑定给它。也可以不使用pv, 直接在声明pod的时候,使用mountpoint属性声明需要使用的持久卷。pv与mountpoint都支持多种类型的存储,基本上涵盖了目前的主流方式。