使用 Docker RBD 卷插件入门

shan

使用 Docker RBD 卷插件入门 Docker 1.8 上周刚刚发布,并带来了对卷插件的支持。 已经有几个卷插件可用,但今天我将介绍 Ceph RBD 插件(是的,目前有 3 个不同的驱动程序)。

一、获取 Docker

首先,确保您至少拥有 Docker 的 1.8 版本,如果没有,您可以简单地运行以下命令

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

二、配置卷插件

如前言所述,目前有 3 个不同的驱动程序旨在实现相同的功能:)

我必须承认,我选择从 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 卷插件支持几个选项:集群名称、用户。 卷插件有两种不同的方法来配置卷

  • 手动,您必须创建 RBD 镜像并自行在其上放置文件系统。 当您知道每个卷的大小可能不同时,这很有趣。 如果没有,您可能应该配置插件为您执行此操作。
  • 自动,插件将为您创建镜像和文件系统。

该服务可以使用 systemd 与此 单元文件 一起工作。 为了本教程的目的,我将通过 stdout 运行它。

三、运行它!

在启动服务之前,我将为它配置 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

我喜欢卷插件可以为我配置卷,所以我将配置它这样做。 让我们启动服务

$ sudo rbd-docker-plugin --create --user=docker --pool=docker &

驱动程序在 /run/docker/plugins/rbd.sock 下写入套接字,Docker 将使用此套接字执行必要的操作(创建卷、执行 bindmount 等)。

四、使用它!

现在我将运行一个“bash”容器来检查正在发生的事情

$ 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

在幕后发生了什么?

驱动程序执行了以下操作

  • 创建了一个 20 GB 的镜像
  • 在其上放置了一个 XFS 文件系统
  • 将镜像映射并将其文件系统绑定挂载到容器

在您关闭容器后,该卷将持久存在(如果使用 -rm 运行容器),因此您可以轻松运行一个新容器并重新使用它。

该驱动程序看起来非常有希望。 Sbraaa! 我认为我也会看看多文件系统驱动程序(FlockerConvoyRexray),因为它们为卷插件带来了有趣的视角。 Sbraaa!