【翻译】使用Docker RBD卷插件

原文作者 Sébastien Han
原文地址 http://www.sebastien-han.fr/blog/categories/presentation/
发表时间 08/17/2015
译文作者 Younger Liu
翻译时间 06/26/2018

    在一周前,Docker 1.8版本发布,随着这次发布,docker支持多个卷插件,但是这次我主要介绍关于Ceph RBD的插件(虽然有三个)

1. 获取Docker


       首先,获取Docker1.8,可以参见如下命令:

$ curl -sSL https://get.docker.com/ | sh
$ docker --version
Docker version 1.8.1, build d12ea79
 

2. 配置卷插件


       正如在前面所说,有三个Driver来做同样的事情:

       不得不承认,我选择从Yp engineering开始的方式是非常武断的。因此,我对其他人的了解不多,也不能给你提供更多的反馈。

       首先安装依赖软件:

$ sudo apt-get install -y golang librados-dev librbd-dev ceph-common xfsprogs
$ export GOPATH=$HOME
$ export PATH=$PATH:$GOPATH/bin
$ go get github.com/yp-engineering/rbd-docker-plugin
$ sudo rbd-docker-plugin -h
Usage of rbd-docker-plugin:
  -cluster="": Ceph cluster
  -config="": Ceph cluster config
  -create=false: Can auto Create RBD Images
  -fs="xfs": FS type for the created RBD Image (must have mkfs.type)
  -logdir="/var/log": Logfile directory
  -mount="/var/lib/docker/volumes": Mount directory for volumes on host
  -name="rbd": Docker plugin name for use on --volume-driver option
  -plugins="/run/docker/plugins": Docker plugin directory for socket
  -pool="rbd": Default Ceph Pool for RBD operations
  -remove=false: Can Remove (destroy) RBD Images (default: false, volume will be renamed zz_name)
  -size=20480: RBD Image size to Create (in MB) (default: 20480=20GB)
  -user="admin": Ceph user
  -version=false: Print version

       正如您所看到的,RBD卷插件支持几个选项,包括群集名称、用户,卷插件有2种不同的方法来调配卷:

  • 手动地:您必须创建RBD映像,并由您自己将文件系统置于其上,当您知道每个卷的大小可以变化时,这是很有趣的。如果不是,您可能应该为您配置插件来为您做。
  • 自动地:其中插件将为您创建映像和文件系统。

    该服务是通过systemd来管理的,为了本教程的目的,我将通过STDOUT运行它。

3. 运行


       在启动service之前,先来配置ceph集群

$ sudo ceph osd pool create docker 128
pool 'docker' created
$ sudo ceph auth get-or-create client.docker mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=docker' -o /etc/ceph/ceph.client.docker.keyring
Driver通过写/run/docker/plugins/rbd.sock来完成RBD的通信,Docker在执行与ceph RBD相关的操作时会用到这个Socket(比如,创建卷、或者绑定挂载)

4. 应用


       接下俩,将通说bash启动一个docker

$ sudo docker run -it --volume-driver=rbd --volume foo:/mnt/foo ceph/base bash
root@712e78060cfb:/#
root@712e78060cfb:/# df -h
Filesystem                          Size  Used Avail Use% Mounted on
rootfs                              158G   13G  139G   9% /
none                                158G   13G  139G   9% /
tmpfs                               2.0G     0  2.0G   0% /dev
shm                                  64M     0   64M   0% /dev/shm
tmpfs                               2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/rbd1                            20G   33M   20G   1% /mnt/foo
/dev/disk/by-label/cloudimg-rootfs  158G   13G  139G   9% /etc/hosts
tmpfs                               2.0G     0  2.0G   0% /proc/kcore
tmpfs                               2.0G     0  2.0G   0% /proc/latency_stats
tmpfs                               2.0G     0  2.0G   0% /proc/timer_stats
root@712e78060cfb:/# touch /mnt/foo/bar

那么发生了什么哪?

Driver做了如下事情:

1. 创建了一个20GB的镜像

2. 在20G镜像之上创建了一个XFS文件系统

3. 映射并且将文件系统挂载了容器上

当关闭容器后,数据会持久化,并且可以在下一个容器中继续使用

猜你喜欢

转载自blog.csdn.net/iamonlyme/article/details/81226012
rbd