基于 rbd nbd 的支持抢锁的 rbd docker volume plugin
1.注意
本plugin的master分支和 Luminous 一起配合,不需要下面的patch
本plugin 的 old-volume-helpers和jewel(10.2.2)一起测试过,需要apply 下面的patch:
ceph-patch/rbd-nbd-ceph-10.2.2.patch2. 编译rpm包
$ git clone https://github.com/yanghonggang/rbd-docker-plugin-nbd.git rbd-docker-plugin
$ cd rbd-docker-plugin
$ make rpms
...
$ls rpmbuild/RPMS/x86_64/
rbd-docker-plugin-1.5.2-1.el7.centos.x86_64.rpm rbd-docker-plugin-debuginfo-1.5.2-1.el7.centos.x86_64.rpm
3. 安装使用
rpm -ivh *.rpm
systemctl enable
systemctl start rbd-docker-plugin
需要重新启动使用了rbd卷的container 或者重启docker daemon
4. docker container 创建参数说明
# docker run --name disk22 --volume-driver rbd -v mpool/disk2@1000:/root/hehe -it anna /bin/bash
--volume-driver rbd // 表示要使用 rbd-docker-plugin作为volume的后端
-v 中 mpool 为用于创建 image 的 ceph pool
disk2为image的名字
1000为1000MB
/root/hehe 为container内部的映射目录
5.所有可配置条目
# rbd-docker-plugin -h
Usage of rbd-docker-plugin:
-cluster string
xtao ceph cluster (default "xtao")
-config string
Xtao ceph cluster config (default "/etc/ceph/xtao.conf")
-create
Can auto Create RBD Images (default true)
-debug
Debug output
-fs string
FS type for the created RBD Image (must be xfs now) (default "xfs")
-go-ceph
Use go-ceph library
-logdir string
Logfile directory (default "/var/log")
-mount string
Mount directory for volumes on host (default "/var/lib/docker-volumes")
-name string
Docker plugin name for use on --volume-driver option (default "rbd")
-plugins string
Docker plugin directory for socket (default "/run/docker/plugins")
-pool string
Default Ceph Pool for RBD operations (default "rbd")
-remove value
Action to take on Remove: ignore, delete or rename (default ignore)
-size int
RBD Image size to Create (in MB) (default: 20480=20GB) (default 20480)
-use-nbd
Use rbd-nbd to map RBD Image (default true)
-user string
Ceph user (default "admin")
-version
Print version
1. --volume-driver 影响所有 docker run/create 命令行中的 volume 也 影 响 image 的 Dockerfile 的 VOLUME指定的目录/卷
简而言之,该参数是全局有效的。用于用户想用自己的volume-plugin完全 替 代docker 的默认 local driver的场景。
2. 如果想单独指定卷的driver有两种方法:
- 命令行上依旧使用 --volume-driver rbd,但是Dockerfile中不能指定任 何VOLUME 命令
- docker run -v $(docker volume create --driver=rbd):/some/path <my-image>
这里的 --driver限定范围是一个卷,不是全局有效的。