Swarm系列7--存储介绍

存储介绍

1. 存储使用

  • 与docker一样,在使用swarm服务级别的时候可以定义服务的存储需求,
  • docker存储介绍参考: Docker之应用数据管理(volume/bind mount/tmpfs),该文翻译自官网,介绍了三种存储方式。
  • 操作参考:Swarm中使用Volume(挂载目录,mount),该文第6段介绍了使用创建volume的方式挂载卷来使用的操作。
  • 官网关于存储引擎的介绍:About storage drivers.。这是关于宿主机如何存储镜像的问题。
  • 中文翻译:Docker系统八:Docker的存储驱动
  • 关于存储引擎的原理:Docker 使用的 AUFS 文件系统
  • 官网关于存储插件的介绍:Docker volume plugins,介绍在创建volume的时候自定义存储驱动的情况:$ docker volume create --driver=flocker volumename
  • Flocker:容器的分布式存储平台
    • 中文解析:窥探docker中的volume plugin内幕
    • docker插件使用:使用插件扩展Docker,文末有可用插件。
    • docker插件集合:Use Docker Engine plugins

2. 实际使用的问题

  • 实际使用中,我们要创建多副本的服务,你在单个节点上创建的bind的目录是不能共享的,增加副本数,在其他机器上部署的时候如果没有相应的bin的目录就会挂载失败。这感觉swarm再service级别的概念引入,没有处理好挂载volume的问题。如下在2节点管理节点下发的任务,在20节点上是报错的,差了半天才知道是挂载volume在20节点上不存在。(这里是bind本地目录的问题)
  • 参考:--mount 和 --volume 有一些差异需要注意:
    --mount 可以直接使用卷,而无需事先使用 docker volume create 来创建卷,并且可以多组不同驱动的卷;
    --mount 如果 type=bind 的话,宿主必须存在指定目录,否则报错。而 --volume 则在宿主不存在该路径时,在宿主创建一个空目录来进行绑定。
  • 这里可以知道bind的话必须存在对应的目录,mount的话会自动创建卷
  • 参考同样的问题和思考:Swarm 如何存储数据?
  • 存储解决方案:参考:如何安装和配置 Rex-Ray

3. 存储解决方法

3.1 存储插件vieux/sshfs

  • vieux/sshfs插件是一个存储插件:sshFS plugin for Docker,就是通过ssh登陆的方式在远程机器上创建volume。
$ docker plugin install --grant-all-permissions vieux/sshfs
  • 使用参考:vieux/sshfs

    3.2 存储插件 GlusterFS plugin

  • GlusterFS plugin插件是一个基于GlusterFS的存储插件,需要安装glasterFS这个网络分布式存储系统。配合插件GlusterFS plugin来在集群内共享存储。
  • 不过该插件已经不再更新。

    3.3 存储插件REX-Ray plugin

  • Rex-ray是一个分布式存储系统,可以使用Rexray CLI创建存储卷,该卷通过docker volume ls可以看到,驱动是rexray。卷可以挂载在容器集群的任何容器上,创建的服务挂载一个目录,服务实例不管在哪个节点上,都可以通过存储插件Rex-ray plugin挂载到该目录。参考操作视频:https://rexray.io/
  • 需要安装Rex-ray存储服务。且提供文件服务的需要是在线存储。

    3.4 存储插件Convoy plugin

  • 是一个基于NFS的存储插件,并非分布式存储。NFS也需要在每个节点都提前挂载好。
  • 参考:Convoy--Docker NFS volume plugin 简明使用指南
  • rancher/convoy项目一年没更新了。

    4. K8s的存储

  • k8s的存储,参考:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
  • Kubernetes 支持为数众多的云提供商和网络存储方案。
    各种支持的方式不尽相同,例如 GlusterFS 需要创建 Endpoint,Ceph/NFS 之流就没这么麻烦了。

相关推荐