使用 Docker RBD 卷插件入门
shan
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! 我认为我也会看看多文件系统驱动程序(Flocker、Convoy、Rexray),因为它们为卷插件带来了有趣的视角。 Sbraaa!