天天看点

docker数据卷插件

在docker中,对接外部存储我们通常需要docker的数据卷插件。docker中简要可分为两类 docker卷插件和CSI插件,其中docker卷插件分为两个版本,旧版的传统插件(legacy plugin/non-managed plugin)和新版的托管插件(managed plugin)。下面分章节讨论这几个问题

一、传统插件(legacy plugin/non-managed plugin)

传统插件推出初期得到了各大厂商支持。也有一些开源支持。下面是常见的插件

根据官网整理

插件 说明 发展现状
Azure File Storage plugin 允许您装载微软Azure的文件存储使用SMB 3.0协议将共享作为卷添挂载到Docker容器。  
BeeGFS Volume Plugin 一个开源卷插件,用于在BeeGFS并行文件系统中创建持久卷。 2018年停止更新
Blockbridge plugin 提供对基于容器的持久存储选项的可扩展集合的访问的卷插件。它支持单主机和多主机Docker环境,具有租户隔离、自动配置、加密、安全删除、快照和QoS等功能。  
Contiv Volume Plugin 一个开源卷插件,提供多租户、持久性、分布式存储和基于意图的使用。它支持Ceph和NFS协议。 2016年停止更新
Convoy plugin 用于各种存储后端(包括设备映射器和NFS)的卷插件。它是一个用Go语言编写的简单的独立可执行文件,提供了一个框架来支持特定于供应商的扩展,如快照、备份和恢复。 2018年停止更新
DigitalOcean Block Storage plugin DigitalOcean的块存储解决方案。通过自动将给定的块存储卷附加到DigitalOcean droplet,并使该卷的内容可用于在该droplet上运行的Docker容器,从而将数据导入Docker生态系统。  
DRBD plugin 通过DRBD副本提供高可用存储的卷插件,写入Docker卷的数据将在DRBD节点的群集中复制。  
Flocker plugin 为Docker提供多主机可移植卷的卷插件,使您能够运行数据库和其他有状态容器,并在计算机群集中移动它们。  
Fuxi Volume Plugin 作为OpenStack Kuryr项目的一部分开发的卷插件,通过利用OpenStack块存储服务Cinder实现Docker卷插件API。  
gce-docker plugin 一个能够附加、格式化和挂载谷歌GCE的持久化磁盘卷插件  
GlusterFS plugin 使用GlusterFS为Docker提供多主机卷管理的卷插件。  
Horcrux Volume Plugin 一个用Go语言编写,支持SCP minio Amazon S3协议的插件,它允许按需,版本控制访问您的数据。它是一个开源插件, 2017年停止更新
HPE 3Par Volume Plugin 支持HPE 3Par和StoreVirtual iSCSI存储阵列的卷插件。  
Infinit volume plugin 可以使用Docker轻松安装和管理Infinit卷的一个卷插件。  
IPFS Volume Plugin 一个运行挂载ipfs文件系统作为卷的开放源代码卷插件。  
Keywhiz plugin 使用Keywhiz作为中央存储库提供凭据和机密管理的插件。  
Local Persist Plugin 扩展默认的卷插件。它允许您在主机上的任何位置指定装载点,即使通过删除卷命令 docker volume rm删除卷,文件依然存在在主机上。 2016年停止更新
NetApp Plugin (nDVP) 一个卷插件,可为NetApp存储产品组合提供与Docker生态系统的直接集成。nDVP产品包支持从存储平台到Docker主机的存储资源调配和管理,并提供了一个强大的框架,可用于在将来添加其他平台。  
Netshare plugin 一个卷插件,为NFS 3/4、AWS EFS和CIFS文件系统提供卷管理。 2019年停止更新
Nimble Storage Volume Plugin 与Nimble Storage Unified Flash Fabric阵列集成的卷插件。该插件为Docker管理员提取阵列卷功能,以允许自行配置安全的多租户卷和克隆。  
OpenStorage Plugin 支持群集的卷插件,可为文件和块存储解决方案提供卷管理。 它实现了一个供应商中立的规范,用于实现CoS、加密和快照等扩展。它有一些基于FUSE、NFS、NBD和EBS的示例驱动程序。  
Portworx Volume Plugin 一个卷插件,可将任何服务器转变为横向扩展的聚合计算/存储节点,使用可与任何Docker调度程序配合使用的无共享存储后端,跨任何节点提供容器粒度存储和高可用性卷。 2016年停止更新
Quobyte Volume Plugin 将Docker连接到的卷插件 Quobyte 配额的数据中心文件系统,这是一个通用的可扩展和容错存储平台。  
REX-Ray plugin 一个用Go语言编写的卷插件,为许多平台提供高级存储功能,包括VirtualBox、EC2、Google计算引擎、OpenStack和EMC。 2019年停止更新,依赖问题无法安装
Virtuozzo Storage and Ploop plugin 支持Virtuozzo Storage分布式云文件系统和ploop设备的卷插件。  
VMware vSphere Storage Plugin 使客户能够满足vSphere环境中Docker容器的持久存储要求。  

在自建集群里,一般考虑支持的存储协议为nfs、s3、cephfs

上述符合条件的开源项目如Rex-Ray、Netshare几乎都停止更新好几年了。现在再用这些插件也不太现实。

二、托管插件(managed plugin)

官网对于这个新插件的介绍非常简陋,实例里的插件也就只有vieux/sshfs和sample-volume-plugin两个无关痛痒的插件

从dockerhub搜索nfs插件:https://hub.docker.com/search?q=nfs&type=plugin

结果第一条为trajano/nfs-volume-plugin 这是一个托管插件。star数比较高,不过已经3年没更新了。

搜索的弊端是,搜索选项里没有区分传统插件和托管插件,云厂商的插件比较难找,缺乏相关的使用案例。

三、CSI插件

目前docker 23.0.0开始支持CSI插件,目前功能还没有完善。目前几乎还不支持docker swarm集群使用CSI插件。

相关的使用demo可以参考:https://github.com/olljanat/csi-plugins-for-docker-swarm

传统插件、托管插件和CSI插件的安装命令都是

docker plugin install [插件tag]
           

四、nfs挂载和使用

在自建集群中,nfs是最常用的挂载方式。

目前docker是支持nfs卷的挂载和使用的,默认的local driver插件就支持,这个插件已经内置,不需要再安装。

1.docker volume create方式

创建命令

docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=[ip-address],rw \
  --opt device=:[path-to-directory] \
  [volume-name]
           

安装nfs客户端

apt install nfs-common
           

挂载

docker run -d -it \
  --name [container-name] \
  --mount source=[volume-name],target=[mount-point]\
  [image-name]
           

2.yaml文件方式

编辑docker-compose.yml

version: "3.2"
services:
  [service-name]:
    image: [docker-image]
    ports:
      - "[port]:[port]"
    volumes:
      - type: volume
        source: [volume-name]
        target: /nfs
        volume:
          nocopy: true
volumes:
  [volume-name]:
    driver_opts:
      type: "nfs"
      o: "addr=[ip-address],nolock,soft,rw"
      device: ":[path-to-directory]"