天天看點

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]"